Пагинация REL PREV NEXT 1С-Битрикс | Для разработчиков | Сайты для бизнеса

Пагинация REL PREV NEXT 1С-Битрикс


Что бы облегчить поисковикам работу можно указать в теге header сайта link с атрибутом REL и значениями PREV и NEXT, со ссылками на нужные страницы, например ?PAGEN_1=2 . Это полезно для СЕО, иначе поисковики могут принять эти страницы за дубли. Также важно указать canonical на страницах с пагинацией.
Для этого нам придется править всего два файла шаблона компонента:

1. result_modifier.php
В нем мы должны взять все необходимые данные из переменной $arResult['NAV_RESULT']
  1. $arResult['NAV_NUM'] = $arResult['NAV_RESULT']->NavNum;
  2. $arResult['NAV_PAGE_NOMER'] = $arResult['NAV_RESULT']->NavPageNomer;
  3. $arResult['NAV_PAGE_COUNT'] = $arResult['NAV_RESULT']->NavPageCount;
  4. $arResult['SECTION_CODE'] = $arParams["SECTION_CODE"];
  5. $this->__component->SetResultCacheKeys([
  6. 'NAV_NUM',
  7. 'NAV_PAGE_NOMER',
  8. 'NAV_PAGE_COUNT',
  9. 'SECTION_CODE',
  10. ]);

2. component_epilog.php
Далее в файле, который срабатывает при включенном кэшировании
  1. if (!defined('ERROR_404')){
  2. $arResult['URL'] = "/catalog/".$arResult['SECTION_CODE']."/";
  3. if($arResult['NAV_PAGE_NOMER']>1){
  4. $APPLICATION->AddHeadString('<link rel="canonical" href="http://' .$_SERVER["HTTP_HOST"].$arResult['URL'] . '">');
  5. }
  6.  
  7. if (isset($arResult['NAV_NUM'], $arResult['NAV_PAGE_NOMER'], $arResult['NAV_PAGE_COUNT'], $arResult['URL'])){
  8. if ($arResult['NAV_PAGE_COUNT'] > $arResult['NAV_PAGE_NOMER']) { // rel next
  9. $next = $arResult['NAV_PAGE_NOMER'] + 1;
  10. $urlNextRel = $arResult['URL']."?PAGEN_1=".$next;
  11. }
  12. if ($arResult['NAV_PAGE_NOMER'] > 1) { // rel prev
  13. $prev = $arResult['NAV_PAGE_NOMER'] - 1;
  14. If($prev > 1){
  15. $urlPrevRel = $arResult['URL']."?PAGEN_1=".$prev;
  16. }
  17. else{
  18. $urlPrevRel = $arResult['URL'];
  19. }
  20. }
  21. if (isset($urlNextRel)) {
  22. //$APPLICATION->SetPageProperty('next', 'http://' . $_SERVER["HTTP_HOST"] . $urlNextRel);
  23. $APPLICATION->AddHeadString('<link rel="next" href="http://' .$_SERVER["HTTP_HOST"].$urlNextRel . '">');
  24. }
  25. if (isset($urlPrevRel)) {
  26. //$APPLICATION->SetPageProperty('prev', 'http://' . $_SERVER["HTTP_HOST"] . $urlPrevRel);
  27. $APPLICATION->AddHeadString('<link rel="prev" href="http://' .$_SERVER["HTTP_HOST"].$urlPrevRel . '">');
  28. }
  29. }
  30. }

Обратите внимание на первую строчку, там происходит проверка, существует ли страница, иначе каноникал и линки будут указываться на 404 странице, что совершенно не нужно.
На второй строке указывается собственно URL который мы будем подставлять, в данном случае это раздел каталога /catalog/символьный код/
Затем в каноникал уже указывается полный адрес в функции AddHeadString с приклеиванием домена $_SERVER["HTTP_HOST"].
Кстати если у вас сайт на HTTPS, то протокол можно указать так:
  1. $protocol = ($APPLICATION->IsHTTPS() ? 'https://' : 'http://');
Тег link с атрибутом rel можно вывести по разному используя AddHeadString
  1. $APPLICATION->AddHeadString('<link rel="prev" href="http://' .$_SERVER["HTTP_HOST"].$urlPrevRel . '">');
или SetPageProperty
  1. $APPLICATION->SetPageProperty('prev', 'http://' . $_SERVER["HTTP_HOST"] . $urlPrevRel);
Если используете второй вариант, то в header.php нужно использовать функции
  1. $APPLICATION->ShowLink('prev', 'prev');
  2. $APPLICATION->ShowLink('next', 'next');
или
  1. $APPLICATION->AddBufferContent([$APPLICATION, 'GetLink'], 'prev');
  2. $APPLICATION->AddBufferContent([$APPLICATION, 'GetLink'], 'next');

Загрузка

5908 просмотров
15.06.2018


Комментариев пока нет
Оставить комментарий
 
Текст сообщения*
Защита от автоматических сообщений
 


Сервисы




Последние публикации

24.окт.2021 Битрикс Работа с сокетами Ошибка! Не работает
В проверке сайте можно наблюдать такую ошибку
Работа ...

17.июл.2021 Как передать Roistat в заказ 1С-Битрикс
Передать ID Roistat можно в сам заказ в Битриксе после его о...

21.июн.2021 Сбой на файле, ошибка распаковки пакета
При очередном обновлении 1С-Битрикс выскочила ошибка [UUGZA0...

03.июн.2020 Не выводиться заглушка в композитном кеше
Столкнулся с тем, что при указании заглушки в динамической о...

01.апр.2020 Установка SSL сертификата LetsEncrypt на BitrixVM
Установка SSL сертификата LetsEncrypt на виртуальную машину ...

07.мар.2020 Битрикс настройка SSL, ошибка работы с сокетами
Заходим в меню битрикса выбираем 8. Manage pool web servers ...

14.ноя.2019 Не выгружаются заказы в 1С
Не выгружаться заказы в 1С из сайта на битрисе могут по разн...

07.ноя.2019 Видео youtube на фон сайта
Как-то на сайт мне нужно было вывести видео на весь экран, к...

05.ноя.2019 Свойство с большим списком (датой)
Если в инфоблоке необходимо использовать свойство типа списо...

05.ноя.2019 Основные настройки BitrixVM
Приведу основные пути и файлы конфигурации в виртуальной маш...