В статье описано как вывести SEO-данные элемента и раздела инфоблока с помощью Bitrix API
Зачем нужно на детальной странице карточки товара или на странице раздела выводить SEO-данные, если они автоматически выводятся в секции head? Спросите вы. На самом деле эти данные можно использовать для микроразметки Open Graph.
Для детальной страницы статьи, товара и т.д. код выглядит так:
$ipropValues = new \Bitrix\Iblock\InheritedProperty\ElementValues($arParams["IBLOCK_ID"], $arResult["ID"]);
$IPROPERTY = $ipropValues->getValues();
В метод ElementValues мы передаем в качестве первого параметра id инфоблока, а в качестве второго параметра ID текущего элемента. В итоге в массиве $IPROPERTY будет массив с заполненными SEO-данными, которые можно использовать в микроразметке Open Graph:
$APPLICATION->SetPageProperty("og:image", "https://доменсайта/local/templates/.default/images/logo.svg");
$APPLICATION->SetPageProperty("og:description", $IPROPERTY["ELEMENT_META_DESCRIPTION"]);
$APPLICATION->SetPageProperty("og:type", "website");
$APPLICATION->SetPageProperty("og:url", "https://доменсайта".$arResult["DETAIL_PAGE_URL"]);
$APPLICATION->SetPageProperty("og:title", $IPROPERTY["ELEMENT_META_TITLE"]);
В ключе ELEMENT_META_TITLE находится SEO-title, в ключе ELEMENT_META_DESCRIPTION SEO-описание, в ключе ELEMENT_META_KEYWORDS ключевые слова.
На странице раздела инфоблока вместо метода ElementValues нужно использовать метод SectionValues:
$ipropValues = new \Bitrix\Iblock\InheritedProperty\SectionValues($arParams["IBLOCK_ID"], $arResult["VARIABLES"]["SECTION_ID"]);
$IPROPERTY = $ipropValues->getValues();
Здесь соответственно вторым параметром нужно передать ID раздела. Если $arResult["VARIABLES"]["SECTION_ID"] пусто, то используем $arResult["VARIABLES"]["SECTION_CODE"] для определения ID раздела:
$rsSections = CIBlockSection::GetList(array(),array('IBLOCK_ID' => $arParams ['IBLOCK_ID'], '=CODE' => $arResult['VARIABLES']['SECTION_CODE']));
$arSection = $rsSections->GetNext();
Данный код используем до предыдущего. И теперь, чтобы сделать разметку раздела OpenGraph делаем следующий код:
$APPLICATION->SetPageProperty("og:image", "https://доменсайта/local/templates/.default/images/logo.svg");
$APPLICATION->SetPageProperty("og:description", $IPROPERTY["SECTION_META_DESCRIPTION"]);
$APPLICATION->SetPageProperty("og:type", "website");
$APPLICATION->SetPageProperty("og:url", "https://домен сайта".$arSection["SECTION_PAGE_URL"]);
$APPLICATION->SetPageProperty("og:title", $IPROPERTY["SECTION_META_TITLE"]);
В ключе SECTION_META_TITLE находится SEO-title, в ключе SECTION_META_DESCRIPTION SEO-описание, в ключе SECTION_META_KEYWORDS ключевые слова.