На ваших проектах наверняка используются компоненты каталога или новостей. Но как изменить 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 сформировался пройдя целую кучу этапов (про то какие события и функция выполняются в битриксе вы можете прочитать подробнее в официальной документации).
При помощи регулярного выражения, мы находим необходимые нам теги и заменяем в них содержимое.
Надеюсь у вас все получилось 🙂 .
Попробовал ваш метод, получилось. Но у нас есть один нюанс. Как можно заменить тайтл и дескрипшен на H1(название раздела) когда перешли на 2,3 и т.д страницу.
То есть, в корне раздела тайтл(заголовок в браузере) например Купить экраны в москве дешево, Дескрипшен тоже какое то описание, H1(название раздела) Экраны. А вот если перешли на вторую, третью и тд страницу, то тайтл и дескрипшен был H1(название раздела)+номер страницы и еще какой нибуть текс.
например
Корень раздела:
тайтл: Купить экраны в москве дешево
дескрипшен: тут неважно какой текст
H1: Экраны
Страница пагинации page 2
тайтл: Экраны – страница 2 – название сайта
дескрипшен: Экраны – страница 2, название сайта
H1: Экраны – страница 2
Заранее спасибо.
ответил вам на емейл