Меню

Уникальная СЕО информация для каждого торгового предложения в каталоге 1С-Битрикс

Уникальная СЕО информация для каждого торгового предложения в каталоге 1С-Битрикс

Задача: реализовать уникальную информацию для каждого SKU в каталоге. У каждого ТП должны быть свои: заголовок h1, ключевые слова, описание страницы, заголовок окна браузера и канонический адрес.
Для компонента bitrix:catalog.element в element.php, не забудте установить параметры
Код
 
"SET_TITLE" => $arParams['SET_TITLE'],
"SET_BROWSER_TITLE" => $arParams['SET_BROWSER_TITLE'],
"SET_META_KEYWORDS" => $arParams['SET_META_KEYWORDS'],
"SET_META_DESCRIPTION" => $arParams['SET_META_DESCRIPTION'],
Немного костыльный вариант, но временно размещу сдесь - позже сделаю более "красиво" и допишу в заметку)

Вариант не использовать параметр ?TARGET_OFFER=, а создать полноценную ЧПУ сраницу вида:
/catalog/#РАЗДЕЛ#/#ТОВАР#/#ID_ТП#

На индексную страницу /catalog/ добавляем:
Код
$isOfferUrl = explode('/', $APPLICATION->GetCurDir());
if (empty($isOfferUrl['4'])) {
    $SEF_URL_TEMPLATES = [
                    "sections" => "",
                    "section" => "#SECTION_CODE#/",
                    "element" => "#SECTION_CODE#/#ELEMENT_CODE#/",
                    "compare" => "compare/",
                    "smart_filter" => "#SECTION_CODE#/filter/#SMART_FILTER_PATH#/apply/",
   ];
}
 if (!empty($isOfferUrl['4'])) {
     $SEF_URL_TEMPLATES = [
                    "sections" => "",
                    "section" => "#SECTION_CODE#/",
                    "element" => "#SECTION_CODE#/#ELEMENT_CODE#/" . $isOfferUrl['4'] . '/',
                    "compare" => "compare/",
                    "smart_filter" => "#SECTION_CODE#/filter/#SMART_FILTER_PATH#/apply/",
    ];
}
$APPLICATION->IncludeComponent(
                "bitrix:catalog",
                "",
                [
                    ... ПРОЧИЕ ПАРАМЕТРЫ bitrix:catalog
                    "SEF_URL_TEMPLATES" => $SEF_URL_TEMPLATES,
                   
                ],
                false
            );

В component_epilog.php детальной карточки

Код
if (isset($templateData['JS_OBJ'])) {

    $isOfferUrl = explode('/', $APPLICATION->GetCurDir());
    if (!empty($isOfferUrl['4'])) {
        $TARGET_OFFER = $isOfferUrl['4'];
    }
    if (!empty($TARGET_OFFER)) {
        $offerNum = array_search($TARGET_OFFER, $templateData['OFFER_IDS']);

        $dbOfferData = CIBlockElement::GetList(
            false,
            array(
                   '=ID' => $TARGET_OFFER
            ),
            false,
            array(
                  'nTopCount' => 1
            ),
            array(
                'NAME',
                'IBLOCK_ID',
                'CANONICAL_PAGE_URL'
            )
        )->GetNext();

       $dbOfferSeoProps = new \Bitrix\Iblock\InheritedProperty\ElementValues(
            $dbOfferData['IBLOCK_ID'], // ID инфоблока с ТП
            $TARGET_OFFER // ID элемента
        );
        $arOfferSeoProps = $dbOfferSeoProps->getValues();
        $APPLICATION->SetTitle($dbOfferData['NAME']);
        $APPLICATION->SetPageProperty("title", $arOfferSeoProps['ELEMENT_META_TITLE']);
        $APPLICATION->SetPageProperty("keywords", $arOfferSeoProps['ELEMENT_META_KEYWORDS']);
        $APPLICATION->SetPageProperty("description", $arOfferSeoProps['ELEMENT_META_DESCRIPTION']);
        $APPLICATION->SetPageProperty("canonical", $dbOfferData['CANONICAL_PAGE_URL']);

        if ($offerNum !== false) {
            ?>
            <script>
                BX.ready(function () {
                    if (!!window.<?= $templateData['JS_OBJ'] ?>) {
                        window.<?= $templateData['JS_OBJ'] ?>.setOffer(<?echo $offerNum ?>);
                    }
                });
            </script>
            <?
        } else {
            // TODO переделать на SetHttpStatus
            LocalRedirect('/404.php');
        }
    }
}
Видеоуроки по
1С-Битрикс
на моем Boosty канале Видео
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить файлы
 

Блог-note: заметки разработчика

Как вывести свойства инфоблока по отдельности и немного плюшек не в тему

Если у инфоблока несколько свойств- то при выводе их всех, скажем в детальном описании новости, они выводятся все вместе...

Вывести все товары, с постраничной навигацией, из всех разделов инфоблока

По сути, эта заметка, небольшой лайфхак. Достаточно часто нужно, в корне каталога, в ТОП-е товаров вывести все товары вс...

Вывести все разделы в которых находится элемент инфоблока

Если нужно вывести все разделы, со всей доступной информацией о них, внутри элемента инфоблока, например в карточке това...

Автоматическая загрузка каталогов из csv файлов в Битрикс

Если требуется настроить автоматический импорт каталогов из csv файлов, от поставщиков. В 1С-Битрикс, уже есть весь не...

Бонус на внутренний счет пользователя по информации из 1С

Задача: 1С-Предприятие каждый день выгружает HL справочник на сайт с количеством бонусов контрагента в виде "XML-ID...

Произвольные ссылки в элементе из свойства инфоблока

Задача: предоставить контент-менеджерам возможность добавлять произвольные ссылки внутри карточки товара. Управление ссы...

Заполнить инфоблок брендов из свойства инфоблока с товарами

Задача: в интернет-магазине есть инфоблок с товарами, загружаемый из 1С, у которого заполнено свойство "Производите...

Заполнить коэффициент единицы измерения (MEASURE_RATIO) из свойства элемента

Задача: Каталог наполняется из 1С, но 1С не передает коэффициент единицы измерения (особенность конкретной 1С, но во...

Смена группы пользователя по информации из 1С для переключения типа цены

На сайте созданы две группы пользователей с доступом к разным типам цен: «Розничный покупатель» и «Оптовый покупатель». ...