Битрикс смена мета-тегов и rel canonical при постраничной навигации

На ваших проектах наверняка используются компоненты каталога или новостей. Но как изменить SEO данные, а именно мета-теги на второй, третей и т.д. страницах?

Как в битриксе поменять rel canonical, prev и next при постраничной навигации

Из данной статьи вы узнаете также как поменять “столь любимый сеошниками” rel canonical. Не знаю откуда взялись такие теплые чувства к этому тегу, но если надо – сделаем 🙂 .

Установка link rel=”canonical”, а также “prev” и “next”:
– залазим в компонент постраничной навигации и создаем файл component_epilog.php если он еще не создан:

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

if (!defined('ERROR_404')){
	$arResult['URL'] = $arResult['SECTION_CODE'];

	$url = $APPLICATION->GetCurDir();

	$APPLICATION->AddHeadString('<link rel="canonical" href="https://site.ru'.$url.'">');

	if (isset($arResult['NAV_NUM'], $arResult['NAV_PAGE_NOMER'], $arResult['NAV_PAGE_COUNT'], $arResult['URL'])){
		if ($arResult['NAV_PAGE_COUNT'] > $arResult['NAV_PAGE_NOMER']) { // rel next
			$next = $arResult['NAV_PAGE_NOMER'] + 1;
			$urlNextRel = $arResult['URL']."?PAGEN_1=".$next;       
		} 
		if ($arResult['NAV_PAGE_NOMER'] > 1) { // rel prev
			$prev = $arResult['NAV_PAGE_NOMER'] - 1;
			If($prev > 1){
				$urlPrevRel = $arResult['URL']."?PAGEN_1=".$prev; 
			}
			else{
				$urlPrevRel = $arResult['URL'];
			}
		} 
		if (isset($urlNextRel)) {
			//$APPLICATION->SetPageProperty('next', 'https://' . $_SERVER["HTTP_HOST"] . $urlNextRel);
			$APPLICATION->AddHeadString('<link rel="next" href="https://' .$_SERVER["HTTP_HOST"].$urlNextRel . '">');
		} 
		if (isset($urlPrevRel)) {
			//$APPLICATION->SetPageProperty('prev', 'https://' . $_SERVER["HTTP_HOST"] . $urlPrevRel);
			$APPLICATION->AddHeadString('<link rel="prev" href="https://' .$_SERVER["HTTP_HOST"].$urlPrevRel . '">');
		} 
	}
}

Сам по себе код не сложный, но как говорится “есть один нюанс” 🙂 . Вам нужно передать все параметры в массиве $arResult, которые вы видите в коде, иначе могут быть ошибки. В данном проекте используется компонент и шаблон bitrix/system.pagenavigation/arrows.

Как изменить мета теги в битриксе при постраничной навигации

AddEventHandler("main", "OnEndBufferContent", "replacePagenation");
function replacePagenation(&$content){
	if (isset($_GET['PAGEN_1']) && $_GET['PAGEN_1'] > 1) {
		$curPage = $_GET['PAGEN_1'];
		// H1
		$content = str_replace("</h1>", " — Страница ".$curPage."</h1>", $content);
		// title
		$content = str_replace("</title>", " — Страница ".$curPage."</title>", $content);
		// description
		$pattern = '#<meta name="description" content="(.*?)" />#s';
		preg_match($pattern, $content, $matches);
		$content = str_replace($matches[1], $matches[1]." — Страница ".$curPage, $content);
	}

	// change self url
	global $APPLICATION;
	$curPage = $APPLICATION->GetCurDir();
	$content = str_replace('href="'.$curPage.'"', 'href="#"', $content);
}

Как видно по коду, вы должны добавить его в init.php. Если вы не знаете где лежит этот файл, то лучше пропускайте данный раздел этой статьи.

Данная функция, а точнее событие “Вызывается при выводе буферизированного контента”. Это значит что она выполнится уже после того, как ваш HTML сформировался пройдя целую кучу этапов (про то какие события и функция выполняются в битриксе вы можете прочитать подробнее в официальной документации).

При помощи регулярного выражения, мы находим необходимые нам теги и заменяем в них содержимое.

Надеюсь у вас все получилось 🙂 .

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

автор: Dmitriy

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

Email: dmitriyribka@gmail.com

2 коментаря

  1. Попробовал ваш метод, получилось. Но у нас есть один нюанс. Как можно заменить тайтл и дескрипшен на H1(название раздела) когда перешли на 2,3 и т.д страницу.
    То есть, в корне раздела тайтл(заголовок в браузере) например Купить экраны в москве дешево, Дескрипшен тоже какое то описание, H1(название раздела) Экраны. А вот если перешли на вторую, третью и тд страницу, то тайтл и дескрипшен был H1(название раздела)+номер страницы и еще какой нибуть текс.
    например
    Корень раздела:
    тайтл: Купить экраны в москве дешево
    дескрипшен: тут неважно какой текст
    H1: Экраны

    Страница пагинации page 2
    тайтл: Экраны – страница 2 – название сайта
    дескрипшен: Экраны – страница 2, название сайта
    H1: Экраны – страница 2

    Заранее спасибо.

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

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *