Добавление canonical в head — это частный случай более общей задачи — добавления динамических переменных в header. А обобщенно это — «задача добавления буферизированного контента в шаблон Битрикс», но я люблю рассматривать все на конкретных примерах.
Все не так просто
Проблема в том, что $APPLICATION->GetProperty(‘canonical’) в header.php шаблона возвращает пустую строку, если $APPLICATION->SetProperty(‘canonical’, %КАНОНИЧЕСКАЯ_ССЫЛКА%) выполняется внутри компонента
Почему canonical возвращается пустым?
header.php шаблона выполняется перед тем как будет выполнено тело страницы, а значит раньше, чем мы его назначим, а значит GetProperty вызывается прежде, чем мы назначаем canonical через SetProperty
Решение
В Битриксе для решения подобных задач существует методы класса Application : SetHeadString, SetHeadScript, AddBuffetContent и прочие.
- Открываем редактор, открываем шаблон /bitrix/templates/ШАБЛОН/header.php
- Внутри тэга <head> добавим следующие строки
[php]
function getCanonical(){
global $APPLICATION;
if ($APPLICATION->GetProperty(‘canonical’)){
return »;
}
}
$APPLICATION->addBufferContent(‘getCanonical’);
[/php] - Добавляем $APPLICATION->SetProperty(‘canonical’, ‘%URL%’) в нужном месте(компонент, или где вы собирались назначать его)
Не совсем понятно, как прописывать разные каноникалы для разных страниц, если все они обращаются к одному и тому же GetProperty(‘canonical’), прописанному в хедере шаблона.
в этом и заключается смысл
$APPLICATION->addBufferContent(‘getCanonical’);
на самой странице, допустим konkretnaya_stranica.php вы можете написать $APPLICATION->SetProperty(‘canonical’, ‘%каноническая_ссылка_для_конкретной_страницы%’), и %каноническая_ссылка_для_конкретной_страницы% попадет в canonical, прямо в head страницы : )
Пропишите, пожалуйста, весть путь до редактора шаблона. Спасибо.