Битрикс мета теги и SEO вкладка в новых версиях

Вы наверняка сталкивались с ситуацией, когда в битриксе мета теги выставляются непонятно как. Если раньше было лишь API и настройки компонентов, то сейчас появилась SEO вкладка.

Как можно поставить сео настройки в битрикси

SEO вкладка это конечно хорошо. Формулы, наследования у разделов и элементов, и много чего хорошего она принесла. Но у нее есть минус – очень часто её нельзя перекрыть, даже если писать код в component_epilog.php.

Сначала приведу код, который вы явно сможете улучшить, т.к. он уже утратил свою актуальность, а затем расскажу где вы можете найти “вывод мета свойств” в шаблоне (ведь разработчики запихивают код куда ни попадя).

<?
if ($arResult["VARIABLES"]["SECTION_ID"] > 0) {

	$my_sections = CIBlockSection::GetList (
		Array("ID" => "ASC"),
		Array("IBLOCK_ID" => 38, "ACTIVE" => "Y", "ID" => $arResult["VARIABLES"]["SECTION_ID"]),
		false,
		Array('ID', 'NAME', 'UF_TITLE', 'UF_KEYWORD', 'UF_DESCR')
	);
	if ($ar_fields = $my_sections->GetNext()) {
		if ($ar_fields['UF_TITLE'] != false) {
			global $myTitle;
			$myTitle = $ar_fields['UF_TITLE'];
		}
		if ($ar_fields['UF_KEYWORD'] != false) {
			global $myKeyw;
			$myKeyw = $ar_fields['UF_KEYWORD'];
		}
		if ($ar_fields['UF_DESCR'] != false) {
			global $myDescr;
			$myDescr = $ar_fields['UF_DESCR'];
		}
	}
}
?>

Код который привел выше, записываем в section.php если говорить про компонент каталога. Перед этим вам необходимо создать 3 свойства у раздела – ‘UF_TITLE’, ‘UF_KEYWORD’, ‘UF_DESCR’, всё, естественно в строках.

По факту мы записываем в глобальный массив наши значения если они есть.

Во втором шаге, будем использовать файл init.php, и событие OnEpilog:

<?
AddEventHandler('main', 'OnEpilog', 'SeoSetup');
function SeoSetup(){
        // title
        if ($GLOBALS['myTitle']) {
            $APPLICATION->SetPageProperty('title', $GLOBALS['myTitle']);
            if(strlen($arSeo['PROPERTY_TITLE_VALUE'])>0) $APPLICATION->SetTitle($arSeo['PROPERTY_TITLE_VALUE']);
        } 
        elseif(!empty($arSeo)){
            if(strlen($arSeo['PROPERTY_BROWSER_TITLE_VALUE'])>0) $APPLICATION->SetPageProperty('title',$arSeo['PROPERTY_BROWSER_TITLE_VALUE']);
            if(strlen($arSeo['PROPERTY_TITLE_VALUE'])>0) $APPLICATION->SetTitle($arSeo['PROPERTY_TITLE_VALUE']);
        }
        // descr
        if ($GLOBALS['myDescr']) {
            $APPLICATION->SetPageProperty('description', $GLOBALS['myDescr']);
        } 
        elseif(!empty($arSeo)){
            if(strlen($arSeo['PROPERTY_DESCRIPTION_VALUE'])>0) $APPLICATION->SetPageProperty('description',$arSeo['PROPERTY_DESCRIPTION_VALUE']);
        }
        // keyword
        if ($GLOBALS['myKeyw']) {
            $APPLICATION->SetPageProperty('keywords', $GLOBALS['myKeyw']);
        } 
        elseif(!empty($arSeo)){
            if(strlen($arSeo['PROPERTY_KEYWORDS_VALUE'])>0) $APPLICATION->SetPageProperty('keywords',$arSeo['PROPERTY_KEYWORDS_VALUE']);
        }

        // OLD
        /*if(!empty($arSeo)){
            if(strlen($arSeo['PROPERTY_KEYWORDS_VALUE'])>0) $APPLICATION->SetPageProperty('keywords',$arSeo['PROPERTY_KEYWORDS_VALUE']);
            if(strlen($arSeo['PROPERTY_DESCRIPTION_VALUE'])>0) $APPLICATION->SetPageProperty('description',$arSeo['PROPERTY_DESCRIPTION_VALUE']);
            if(strlen($arSeo['PROPERTY_BROWSER_TITLE_VALUE'])>0) $APPLICATION->SetPageProperty('title',$arSeo['PROPERTY_BROWSER_TITLE_VALUE']);
            if(strlen($arSeo['PROPERTY_TITLE_VALUE'])>0) $APPLICATION->SetTitle($arSeo['PROPERTY_TITLE_VALUE']);
        }*/
}

Приведенный код работает на шаблона от ребят из АСПРО. Вы можете удалить всё лишнее и тогда у вас получится:

<?
AddEventHandler('main', 'OnEpilog', 'SeoSetup');
function SeoSetup(){
        // title
        if ($GLOBALS['myTitle']) {
            $APPLICATION->SetPageProperty('title', $GLOBALS['myTitle']);
            $APPLICATION->SetTitle($GLOBALS['myTitle']);
        } 
        // descr
        if ($GLOBALS['myDescr']) {
            $APPLICATION->SetPageProperty('description', $GLOBALS['myDescr']);
        } 
        // keyword
        if ($GLOBALS['myKeyw']) {
            $APPLICATION->SetPageProperty('keywords', $GLOBALS['myKeyw']);
        } 

}

По каким правилам настраивать далее, это уже вам решать, тут уже кому как удобнее, и кто решает какой из способов правильный. Ясно одно – новые обновления с SEO вкладкой добавили гораздо больше вариантов по работе с мета тегами. Хорошо это или плохо покажет время 🙂 .

Как и обещал, оставлю небольшой список мест, где могут хранится ваши мета теги:
1. В коде самого шаблона – template.php, component_epilog.php или result_modifier.php
2. в header.php шаблона, который находится в папке bitrix/templates/ либо же в local/templates
3. в footer.php шаблона, который находится в папке bitrix/templates/ либо же в local/templates
4. в init.php, который находится в папке bitrix/php_interface/ либо же в local/php_interface
5. в каком-то отдельном файле, который либо подключается самым последним в шаблоне компонента, либо же в самом шаблоне

6. другой вариант 🙂

Для администраторов и контент-менеджеров настоятельно рекомендую прочитать другую мою статью – работа SEO и мета-тегов в Битриксе

Если у вас возникли сложности связанные с настройкой мета тегов, или вы хотите улучшить SEO на вашем сайте, обращайтесь ко мне за помощью

автор: Dmitriy

З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

Залишити відповідь