Меню

Уникальная СЕО информация для каждого торгового предложения в каталоге 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: заметки разработчика

Звездочки в рейтинге Битрикс статей и товаров каталога

Задача: изменить вывод рейтинга элемента на звездочки, с помощью шаблона iblock.vote в товарах и новостях.

Минимальная сумма заказа в корзине и оформлении заказа в 1С-Битрикс

В этой заметке добавим возможность установки минимальной суммы заказа, в новом шаблоне корзины на 1С-Битрикс.

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

Задача: В каталоге, у товаров, есть свойство типа список с названием "Тип изделия" и кодом "TIP_IZDELIYA&...

Запретить оплату с внутреннего счета, если в корзине есть определенный товар

Задача: пользователи могут оплачивать заказы с бонусного счета (штатный внутренний счет), но если в корзине&nbsp...

Как добавить режим редактирования элементов в собственном компоненте Битрикс

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

Если товар в корзине, поменять значение input на "В корзине"

Если Вам нужно поменять текст на кнопке, добавляющей товар в корзину, достаточно воспользоваться методом API "CSaleBaske...

Номера страниц в Title и Description при постраничной навигации каталога

Задача: Часто SEO-специалисты просят добавить номер страницы, из постраничной навигации, в заголовок и описание раздела ...

Настройка прав доступа в 1С-Битрикс

Часто, в интернет-магазине под управлением 1С Битрикс, нужно создать группу пользователей со специфическими правами. Нап...

Определить местоположение пользователя и показать магазины поблизости.

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