Назад

Как узнать SEO-свойства раздела в Битрикс: эффективные методы

Главная
Блог
Как узнать SEO-свойства раздела в Битрикс: эффективные методы

В этой статье разберем, как правильно работать с SEO-свойствами разделов в Битрикс, включая нестандартные методы через API. Вы узнаете:

  • Где хранятся SEO-данные в Битрикс.

  • Как избежать ошибок в коде.

  • Как получить SEO-свойства раздела через D7.

  • Как добавить название раздела в хлебные крошки.

Где хранятся SEO-настройки в Битрикс?

SEO-свойства в Битрикс могут храниться в разных местах:

  • В дополнительных свойствах инфоблока.

  • В файле component_epilog.php.

  • Иногда разработчики ошибочно прописывают мета-теги прямо в header.php, что усложняет поддержку.

❌ Пример плохого кода (так делать не надо!):

$SEO_TITLES = array(
    "/catalog/filtry_k_elektoerozionike/" => "Купить фильтр недорого",
    "/catalog/bloki/" => "Купить осевые блоки в магазине"
);

<?if ($SEO_TITLES[$APPLICATION->GetCurPage()]) :?>
    <title><?=$SEO_TITLES[$APPLICATION->GetCurPage()]?></title>
<?else :?>
    <title><?$APPLICATION->ShowTitle();?></title>
<?endif;?>

Такой подход неудобен для редактирования и масштабирования.

Правильный способ: получение SEO-свойств через API Битрикс

Допустим, у нас есть компонент, который не передает ID раздела в $arResult. Решение — получить ID раздела через его символьный код.

1. Получаем символьный код раздела

global $APPLICATION;
$SECTION_CODE = $APPLICATION->GetCurDir(); // Текущий URL

2. Очищаем URL от лишних частей

if ($SECTION_CODE != '/articles/') {
    $SECTION_CODE = str_replace('/articles/', '', $SECTION_CODE);
    $SECTION_CODE = str_replace('/', '', $SECTION_CODE); // Получаем символьный код (например, "tehnika")
}

3. Получаем ID раздела по его коду

if (CModule::IncludeModule("iblock")) {
    $iblock_id = 9; // ID инфоблока
    $section = CIBlockSection::GetList(
        ["ID" => "ASC"],
        ["IBLOCK_ID" => $iblock_id, "ACTIVE" => "Y", "CODE" => $SECTION_CODE],
        false,
        ["ID", "NAME"]
    );
    
    if ($ar_fields = $section->GetNext()) {
        $sectionId = $ar_fields['ID']; // ID текущего раздела
    }
}

4. Получаем SEO-свойства через D7

$ipropValues = new \Bitrix\Iblock\InheritedProperty\SectionValues($iblock_id, $sectionId);
$IPROPERTY = $ipropValues->getValues();

5. Устанавливаем мета-теги

if ($IPROPERTY['SECTION_META_TITLE']) {
    $APPLICATION->SetPageProperty("title", $IPROPERTY['SECTION_META_TITLE']);
    $APPLICATION->SetTitle($IPROPERTY['SECTION_META_TITLE']);
}

if ($IPROPERTY['SECTION_META_KEYWORDS']) {
    $APPLICATION->SetPageProperty("keywords", $IPROPERTY['SECTION_META_KEYWORDS']);
}

if ($IPROPERTY['SECTION_META_DESCRIPTION']) {
    $APPLICATION->SetPageProperty("description", $IPROPERTY['SECTION_META_DESCRIPTION']);
}

6. Добавляем раздел в хлебные крошки

Если компонент не выводит название раздела в навигации:

$APPLICATION->AddChainItem($ar_fields['NAME']);

Полный код решения

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

global $APPLICATION;
$SECTION_CODE = $APPLICATION->GetCurDir();

if ($SECTION_CODE != '/articles/') {
    $SECTION_CODE = str_replace('/articles/', '', $SECTION_CODE);
    $SECTION_CODE = str_replace('/', '', $SECTION_CODE);

    if (CModule::IncludeModule("iblock")) {
        $iblock_id = 9;
        $section = CIBlockSection::GetList(
            ["ID" => "ASC"],
            ["IBLOCK_ID" => $iblock_id, "ACTIVE" => "Y", "CODE" => $SECTION_CODE],
            false,
            ["ID", "NAME"]
        );

        if ($ar_fields = $section->GetNext()) {
            $ipropValues = new \Bitrix\Iblock\InheritedProperty\SectionValues($iblock_id, $ar_fields['ID']);
            $IPROPERTY = $ipropValues->getValues();

            if ($IPROPERTY['SECTION_META_TITLE']) {
                $APPLICATION->SetPageProperty("title", $IPROPERTY['SECTION_META_TITLE']);
                $APPLICATION->SetTitle($IPROPERTY['SECTION_META_TITLE']);
            }

            if ($IPROPERTY['SECTION_META_KEYWORDS']) {
                $APPLICATION->SetPageProperty("keywords", $IPROPERTY['SECTION_META_KEYWORDS']);
            }

            if ($IPROPERTY['SECTION_META_DESCRIPTION']) {
                $APPLICATION->SetPageProperty("description", $IPROPERTY['SECTION_META_DESCRIPTION']);
            }

            $APPLICATION->AddChainItem($ar_fields['NAME']);
        }
    }
} else {
    // Настройки для главной страницы раздела (/articles/)
    $APPLICATION->SetPageProperty("title", 'Статьи');
    $APPLICATION->SetTitle('Статьи');
}
?>


Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Читайте по теме
Все статьи
Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Все статьи