Битрикс смена мета-тегов и 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 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.ru.

Какие услуги предоставляю:
- Создание сайтов, шаблонов и компонентов на 1С-Битрикс;
- Разработка функционала с нуля и доработка кода на уже созданных проектах;
- Адаптивная вёрстка макетов и натяжка на Битрикс;
- Парсинг файлов и выгрузка на сайт (форматы - CSV, XML, XLSX, JSON)
- Интеграции со сторонними сервисами по API;
- Многоязычные версии и многое другое.

Если у вас остались вопросы, свяжитесь со мной любым удобным для вас способом или оставьте комментарий внизу.
E-mail: dmitriyribka@gmail.com
Skype: cinemacreaterus

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *