@Shrapovyan

Как установить каноническую ссылку на страницах пагинации Битрикс?

Всем привет!
Подскажите пожалуйста, как настроить тег rel canonical на страницах пагинации? На всем сайте настроено и функционирует правильно, кроме пагинации. Чтобы на страницах ?page-2 и т.д. установился тег на главную страницу категории. Перерыл все, и даже здесь тема есть, но не работает ничего, не нашел рабочего решения.
Заранее спасибо!
  • Вопрос задан
  • 4753 просмотра
Решения вопроса 2
@Shrapovyan Автор вопроса
Нашел решение, кому надо, пользуйтесь, все работает как надо:
Добавляем в /bitrix/php_interface/init.php

if ($_REQUEST['PAGEN_1']) {
    global $APPLICATION;
    $APPLICATION->AddHeadString('<link href="https://'.$_SERVER['HTTP_HOST'].$APPLICATION->sDirPath.'" rel="canonical" />',true);
}
Ответ написан
Anadi
@Anadi
Если ответ Вам помог мой, решением отметье его!
Я просто в хедер добавил строку
$APPLICATION->AddHeadString('<link rel="canonical" href="' . $APPLICATION->GetCurDir() . '"/>');

На сколько правильно не могу сказать, но вроде работает.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@ZardoZAntony
программист, сис. админ
Главная ошибка использования для подобного AddHeadString в том, что возможны ситуации, когда на одной странице в нескольких местах будет разный canonical. А в части решений забыли использовать второй параметр true, так будут выводиться дубли одного и того же, в случае если такой подход используется в разных компонентах. А так же вы получите дубляж при уже добавленном canonical от стандартных компонентов, которые такой подход не используют.

Правильно использовать свойства страницы, как это делают стандартные компоненты битрикса
Например catalog.element это делает так:
$APPLICATION->SetPageProperty('canonical', $arResult["CANONICAL_PAGE_URL"]);


Для страниц навигации правильно устанавливать canonical так:
для шалонов используемого system.pagenavigation создаете файл component_epilog.php

use Bitrix\Main\Web\Uri;
$context = \Bitrix\Main\Application::getInstance()->getContext();
$uri = new Uri($context->getRequest()->getRequestUri());
$uri->deleteParams(['PAGEN_' . $arResult['NavNum']]);

$protocol = $context->getRequest()->isHttps() ? 'https://' : 'http://';
$href = $protocol . $context->getServer()->getHttpHost() . $uri->getUri();

$APPLICATION->SetPageProperty('canonical', $href);


В последних версиях ничего делать больше не нужно, если в header.php есть вызов
<?php $APPLICATION->ShowHead()?>
В других случаях надо явно указывать
<?php $APPLICATION->ShowLink("canonical")?>

В админке проверьте, что в "управлении структурой" добавлено данное свойство.
Данный метод можно использовать в любых ситуация, даже без ЧПУ, т.к. остальные параметры из строки не удаляются.

Задача, которую опционально требуется решать - проверить, а не установлен ли canonical до вас. В таком случае вы его перетрёте, а это часто не то что нужно. Оставлю её на домашнее задание.
Ответ написан
rabamaster
@rabamaster
Для себя такой способ использую
Здесь как для товаров сделать описано https://aspro.ru/docs/course/course40/lesson1145/?...
Для пагинации и остальных страниц:
а в header.php
$APPLICATION->SetPageProperty('canonical', getSiteUrl() . $APPLICATION->GetCurPage(false));

В init.php или functions.php
function getSiteUrl() {
    $protocol = $_SERVER['HTTPS'] != '' ? 'https://' : 'http://';
    return $protocol . $_SERVER['SERVER_NAME'];
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы