SEO для умного фильтра

Умному фильтру 1С-Битрикс "из коробки" (версия 21.0.0) очень не хватает возможности устанавливать уникальные title, keywords, description, h1 на страницах с результатами фильтра. Приходится использовать дополнительные модули из маркетплейса или дорабатывать свой шаблон.

В комплексном компоненте bitrix:catalog сначала подключается bitrix:catalog.smart.filter, а потом bitrix:catalog.section. Поэтому мы не можем установить title и description в файле component_epilog.php шаблона умного фильтра. Нам надо их менять после вызова bitrix:catalog.section.

Решение: зададим свойства страницы в файле component_epilog.php шаблона умного фильтра, а потом воспользуемся ими.
Пример для умного фильтра расположенного в корне каталога без разделов.

В шаблоне умного фильтра catalog.smart.filter:
В файле result_modifier.php добавляем ключ FLT_VALUES.
$this->__component->SetResultCacheKeys(array("FLT_VALUES"));
В файле template.php заполняем его для выбранных свойств.

...
foreach($arItem["VALUES"] as $val => $ar){
	if($ar["CHECKED"]){
		$flt_values[$arItem["CODE"]]=$ar["VALUE"];
	}
}
....

if($flt_values){//если фильтр не пустой, передаем данные в $arResult["FLT_VALUES"]
	$this->__component->arResult["FLT_VALUES"] = $flt_values;
}

В файле component_epilog.php задаем свойства для страницы.

Здесь Вы составляете заголовки и описания на свой вкус. У меня несложный фильтр и всего два свойства (CAT и STYLE), поэтому я просто воспользовалась языковым файлом для разных вариантов title.


if($arResult["FLT_VALUES"]){
	global $APPLICATION;
	
	if($arResult["FLT_VALUES"]["CAT"] && $arResult["FLT_VALUES"]["STYLE"]):
		$title=GetMessage('TITLE_WITH_CAT_AND_STYLE',array('#CAT#'=>mb_convert_case($arResult["FLT_VALUES"]["CAT"], MB_CASE_TITLE, "UTF-8"),'#STYLE#'=>mb_convert_case($arResult["FLT_VALUES"]["STYLE"], MB_CASE_TITLE, "UTF-8")));
		$description=GetMessage('DESCRIPTION_WITH_CAT_AND_STYLE',array('#CAT#'=>$arResult["FLT_VALUES"]["CAT"],'#STYLE#'=>mb_convert_case($arResult["FLT_VALUES"]["STYLE"], MB_CASE_TITLE, "UTF-8")));
	elseif($arResult["FLT_VALUES"]["CAT"]):
		$title=GetMessage('TITLE_WITH_CAT',array('#CAT#'=>mb_convert_case($arResult["FLT_VALUES"]["CAT"], MB_CASE_TITLE, "UTF-8")));
		$description=GetMessage('DESCRIPTION_WITH_CAT',array('#CAT#'=>$arResult["FLT_VALUES"]["CAT"]));
	elseif($arResult["FLT_VALUES"]["STYLE"]):
		$title=GetMessage('TITLE_WITH_STYLE',array('#STYLE#'=>mb_convert_case($arResult["FLT_VALUES"]["STYLE"], MB_CASE_TITLE, "UTF-8")));
		$description=GetMessage('DESCRIPTION_WITH_STYLE',array('#STYLE#'=>mb_convert_case($arResult["FLT_VALUES"]["STYLE"], MB_CASE_TITLE, "UTF-8")));
	endif;
	
	$APPLICATION->SetPageProperty("flt_title", $title);
	$APPLICATION->SetPageProperty("flt_description", $description);
}	
	
Языковый файл выглядит так:

$MESS ['TITLE_WITH_CAT'] = "#CAT# портреты по фото";
$MESS ['TITLE_WITH_STYLE'] = "Портреты по фото в стиле #STYLE#";
$MESS ['TITLE_WITH_CAT_AND_STYLE'] = "#CAT# портреты по фото в стиле #STYLE#";
$MESS ['DESCRIPTION_WITH_CAT'] = "Примеры #CAT# портретов по фото выполненных на заказ для печати на холсте в студии Muse";
$MESS ['DESCRIPTION_WITH_STYLE'] = "Примеры портретов по фото в стиле #STYLE# выполненных на заказ для печати на холсте в студии Muse";
$MESS ['DESCRIPTION_WITH_CAT_AND_STYLE'] = "Примеры #CAT# портретов по фото в стиле #STYLE# выполненных на заказ для печати на холсте в студии Muse";

Теперь у нас есть свойства страницы "flt_title" и "flt_description".

В шаблоне каталога catalog
В файл section.php (или в sections.php, если ваш умный фильтр находится в корне каталога) внизу добавляете код:

if(isset($_REQUEST["SMART_FILTER_PATH"]) && $_REQUEST["SMART_FILTER_PATH"]!='clear'){//проверяем, что фильтр не пустой
	if($title=$APPLICATION->GetPageProperty("flt_title")){
		$APPLICATION->SetPageProperty("title", $title);
	}
	if($descr=$APPLICATION->GetPageProperty("flt_descr")){
		$APPLICATION->SetPageProperty("description", $descr);
	}
}

Обратите внимание: в моем проекте умный фильтр находится в корне, поэтому здесь нет названия раздела.

Пример реализации https://muse.ooo/portret-na-zakaz/portret-po-foto/



14.07.2021

Возврат к списку