Дата публикации : 2024.01.02
Автор: Виноградов Александр

Установка и настройка rel canonical Битрикс

Вариант 1. С удалением всех $_GET параметров из url

Важно! На всех страницах будут вырезаны $_GET параметры для атрибута rel canonical, например: PAGEN_.*,SHOWALL_.* и т.д.

Для этого необходимо в header.php (как правило) вставить следующий код:

<?php 
/*полный url страницы*/
$url = ((!empty($_SERVER['HTTPS'])) ? 'https' 'http') . '://' $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
/*избавляемся от $_GET переменных*/
$url explode('?'$url);
$url $url[0];

/*на главной отрежем слеш в конце*/
if($APPLICATION->GetCurPage()=='/')
{
    
$url=trim($url,'/');
}    

$APPLICATION->SetPageProperty("canonical"$url );
unset(
$url); 
?> 

<link rel="canonical" href="<?$APPLICATION->ShowProperty("canonical")?>"/>

У меня в файле local/templates/имя-шаблона/header.php это выглядит так:

<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die(); ?>
<?php
use Bitrix\Main\Page\Asset;
$APPLICATION->AddHeadScript(ASSETS_URL 'js/main.js');
// Для подключения скриптов
// Подключение мета тегов или сторонних файлов
Asset::getInstance()->addString("<link rel='shortcut icon' href='" SITE_TEMPLATE_PATH "/favicon.ico' />");
?>

<!DOCTYPE html>
<html>
    <head> 
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title><? $APPLICATION->ShowTitle() ?></title>
        <? $APPLICATION->ShowHead(); ?>
        
        
        <? //Наш canonical ?>
        <?php 
        
/*полный url страницы*/
        
$url = ((!empty($_SERVER['HTTPS'])) ? 'https' 'http') . '://' $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
        
/*избавляемся от $_GET переменных*/
        
$url explode('?'$url);
        
$url $url[0];
        
        
/*на главной отрежем слеш в конце*/
        
if($APPLICATION->GetCurPage()=='/')
        {
            
$url=trim($url,'/');
        }    
        
        
/*занесем значение в отложенную функцию */
        /*и оставим таким образом возможность переопределения в component_epilog.php других компонентов*/
        
$APPLICATION->SetPageProperty("canonical"$url );
        unset(
$url); 
        
?> 

        <link rel="canonical" href="<?$APPLICATION->ShowProperty("canonical")?>"/>
        
        <? //Наш canonical конец ?>
        
    </head>
    <body> 
        <? $APPLICATION->ShowPanel(); ?> 

Вариант 2. С частичной обрезкой $_GET параметров, например, только в каталоге 

Для этого необходимо в header.php (как правило) вставить следующий код:

<? //Наш canonical ?>
        <?php 
        
/*полный url страницы*/
        
$url = ((!empty($_SERVER['HTTPS'])) ? 'https' 'http') . '://' $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
        
        
/*на главной отрежем слеш в конце*/
        
if($APPLICATION->GetCurPage()=='/')
        {
            
$url=trim($url,'/');
        }    
        
/*оставляем возможность переопределить в component_epilog.php других компонентов*/
        
$APPLICATION->SetPageProperty("canonical"$url );
        
        
?> 

        <link rel="canonical" href="<?$APPLICATION->ShowProperty("canonical")?>"/>
        <? unset($url); ?>
<? 
//Наш canonical конец ?>

Сам код удаления переменных

Удалим нужные нам переменные в component_epilog.php нужного компонента с пагинацией или на странице вывода элементов инфоблока

PAGEN_.* - идентификатор пагинации каталога, могут быть любые $_GET переменные

У меня в файле local/templates/имя-шаблона/templates-parts/uslugi/list.php это выглядит так:

<?php 

$context 
= \Bitrix\Main\Application::getInstance()->getContext();
$uri = new \Bitrix\Main\Web\Uri($context->getRequest()->getRequestUri());
$uri->deleteParams(['PAGEN_' $res->NavNum ?? ]);
$uri->deleteParams(['SHOWALL_' $res->NavNum ?? ]);
$protocol $context->getRequest()->isHttps() ? 'https://' 'http://';
$href $protocol $context->getServer()->getHttpHost() . $uri->getUri();
$APPLICATION->SetPageProperty('canonical'$href);

//$res->NavNum - может храниться в $arrResult, а может в результате CIBlockElement::GetList,
//в зависимости используете ли вы модуль каталог или пишите каталог на лицензии старт
//вставить данный код можно в component_epilog.php или на странице с запросом CIBlockElement::GetList

Комментарии
Наверх страницы