Вывод SEO блока на страницах каталога товаров
Задача
Вывести уникальные для каждой страницы категории и/или товара тексты SEO, а так же метатеги keywords, description и title страницы.
Решение 0. Утопичное.
Если идет постоянная синхронизация с 1С, и ее данные являются приоритетными, а так же сеошники готовы вносить данные в 1С, то добавляем поля типа “Текст SEO” и прочие туда и выводим их на страницу в нужные места.
Так можно поступить с товарами, но для категорий 1С привязанные тексты не вернет.
Решение 1. Применяем стандартные возможности Битрикс.
В инфоблок каталога для текста - добавляем свойство для элементов и, если описание категорий не используется, то СЕО текст можно писать туда, иначе - добавляем пользовательское свойство для раздела.
метатеги keywords, description и title страницы заполняются на вкладке “SEO” элементов инфоблок.
Решение 2. Совмещаем стандартные средства Битрикс и включаемую область.
Для метатегов keywords, description и title страницы используем вкладку “SEO” элементов инфоблок.
Для текста на странице категории/товара используем включаемую область, имя файла должно определяться на основе данных страницы.
<?
// формируем имя файла для включаемой области с сео текстом
$pagenPart = '';
if(isset($_GET['PAGEN_1'])) {
$pagenPart = $_GET['PAGEN_1'];
}
// область без учета постраничной навигации
$seoFileSuffix = str_replace('/', '_', $arResult['VARIABLES']['SECTION_CODE_PATH']).'_descr_seo';
// область с учетом постраничной навигации
$seoFileSuffixPagen = $seoFileSuffix.$pagenPart;
$seoFilePath = $_SERVER['DOCUMENT_ROOT'].'/catalog/sect_' . $seoFileSuffixPagen . '.php';
// если есть для постранички, то подключим ее
if (file_exists($seoFilePath)) {
$seoFileSuffix = $seoFileSuffixPagen;
}?>
// подключим область с сео текстом
<?$APPLICATION->IncludeComponent(
"bitrix:main.include",
"",
Array(
"AREA_FILE_RECURSIVE" => "N",
"AREA_FILE_SHOW" => "sect",
"AREA_FILE_SUFFIX" => $seoFileSuffix,
"EDIT_TEMPLATE" => ""
)
);?>
Решение 3. Храним данные в отдельном инфоблоке.
Тут есть 2 варианта привязки инфоблока с SEO данными:
-
1 В символьный “Символьный код” вносим часть URL страницы без домена и получаем выборкой по соответствию.
-
2 Добавляем в SEO инфоблок свойства “Привязка к элементам инфоблока” и “Привязка к разделам инфоблока”, которые будут ссылаться на товары и разделы каталога.
Пример получения данных на странице категории:
$intSectionID = $APPLICATION->IncludeComponent(
"bitrix:catalog.section",
"",
array(
...
),
$component
);?>
// получим данные связанного с категорией сео блока
$arSelect = [
'NAME',
'PROPERTY_LINK',
'PROPERTY_KEYWORDS',
'PROPERTY_DESCRIPTION',
'PREVIEW_TEXT',
];
$arFilter = [
'ACTIVE' => 'Y',
'IBLOCK_ID' => IBID_SEO_CATALOG,
'PROPERTY_LINK' => $intSectionID,
];
$arOrder = ['SORT' => 'DESC'];
$dbSeo = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelect);
$arSeo = $dbSeo->Fetch();
if($arSeo) {
$APPLICATION->SetPageProperty("title", $arSeo["NAME"]);
$APPLICATION->SetPageProperty("keywords", $arSeo["PROPERTY_KEYWORDS_VALUE"]);
$APPLICATION->SetPageProperty("description", $arSeo["PROPERTY_DESCRIPTION_VALUE"]);
}
// в нужном месте страницы выводим текст
<? if($arSeo && $arSeo["PREVIEW_TEXT"]): ?>
<?=$arSeo["PREVIEW_TEXT"];?>
<? endif; ?>