Перейти к содержимому

Заголовок и метатеги не те - разбор причин

На странице выводится не тот заголовок или чужое описание. Разбираем причины по убыванию частоты, начиная с того, что реально попало в свойства страницы.

С чего начать

Смотрим, что лежит в свойствах страницы к моменту вывода:

// в подвале шаблона сайта, когда всё уже отработало
printf("<!-- title=%s description=%s -->",
$APPLICATION->GetTitle(false),
$APPLICATION->GetProperty('description'));
// пусто - значение никто не задал, а не «не подставилось»

Заголовок и метатеги - это свойства страницы, которые кто-то устанавливает. Пустое значение в подвале означает, что установщика не было вовсе, и искать надо не место вывода, а место установки.

Проверяем порядок вызовов в шаблоне:

// header.php: заголовок выводится здесь
$APPLICATION->ShowTitle(); // без аргумента подставит свойство title
$APPLICATION->ShowMeta('description');
// компонент задаёт заголовок позже, поэтому вывод берёт значение из буфера

Заголовок выводится в шапке, а устанавливается компонентом ниже по странице. Работает это благодаря буферизации, и любая правка, ломающая буфер, ломает и заголовок.

Смотрим значения у самого элемента:

$res = CIBlockElement::GetList([], ['ID' => $elementId], false, false,
['ID', 'IPROPERTY_VALUES']);
print_r($res->GetNext()['IPROPERTY_VALUES'] ?? []);
// заполненные значения у элемента перекрывают шаблоны раздела и инфоблока
// значения по шаблону вычисляются при сохранении элемента, а не при выводе

Значения у элемента сильнее шаблонов. Один заполненный руками заголовок объясняет случай «у всех товаров правильно, а у этого своё», и правится он там же, где заполнен.

Ищем повторные установки заголовка:

Окно терминала
grep -rn 'SetTitle\|SetPageProperty' /home/bitrix/www/local/templates/ | head
# побеждает последний вызов, а не первый
# установка в конце шаблона затирает значение, заданное компонентом

Установок заголовка на странице обычно больше одной. Побеждает та, что выполнилась последней, поэтому строка в конце шаблона сайта незаметно отменяет всю работу компонента.

Причины

  1. Значение задано у самого элемента примерно 30% случаев

    ПризнакШаблон работает на всём разделе, кроме нескольких элементов.

    ПроверкаСмотрим значения свойств для поиска у конкретного элемента и раздела.

    Что делатьЧистим значения у элемента, если нужен общий шаблон: заполненное поле сильнее шаблона.

  2. Шаблон задан не на том уровне примерно 25% случаев

    ПризнакВ разделе заголовки правильные, во вложенных разделах - нет, или наоборот.

    ПроверкаСмотрим шаблоны на уровне инфоблока, раздела и вложенных разделов по цепочке.

    Что делатьЗадаём шаблон на нужном уровне и полагаемся на наследование, а не дублируем его везде.

  3. Заголовок перетирается кодом страницы примерно 20% случаев

    ПризнакЗаголовок совпадает с названием страницы, а не с тем, что задал компонент.

    ПроверкаИщем установку заголовка после подключения компонента и в конце шаблона.

    Что делатьОставляем одно место установки заголовка: последний вызов побеждает предыдущие.

  4. Страница отдаётся из кэша примерно 15% случаев

    ПризнакШаблоны изменены, но на страницах остались старые заголовки.

    ПроверкаСбрасываем кэш компонента и проверяем страницу ещё раз.

    Что делатьСбрасываем кэш после правки шаблонов: заголовок собирается вместе с данными компонента.

  5. Вывод заголовка настроен иначе примерно 10% случаев

    ПризнакСвойство страницы заполнено правильно, а в браузере другой заголовок.

    ПроверкаСмотрим вызов вывода заголовка в шаблоне сайта и его аргументы.

    Что делатьПриводим вывод в порядок: вызов без аргумента берёт свойство страницы, а не название.

Частые вопросы

Чем заголовок страницы отличается от заголовка окна?

Заголовок окна - это метатег для браузера и поиска, заголовок страницы - обычно текст в вёрстке. Платформа хранит их как разные свойства, и задавать их можно по отдельности.

Почему шаблон не применился к старым элементам?

Значения по шаблону вычисляются и сохраняются при записи элемента. Старым элементам их пересчитывают повторным сохранением или отдельным скриптом.

Где задавать шаблоны заголовков?

В настройках инфоблока на вкладке поисковой оптимизации, отдельно для разделов и элементов. Оттуда они наследуются вниз по цепочке разделов.

Можно ли задать заголовок из кода компонента?

Да, установкой свойства страницы в файле результата или в эпилоге компонента. Важно делать это в одном месте, иначе значения перетирают друг друга.

Почему в заголовке остались подстановки?

В шаблоне указано поле, которого у элемента нет. Незаполненная подстановка остаётся в тексте как есть и выдаёт себя сразу.

Смежное

Первоисточник