SEO-шаблоны на языке

Мета-теги, заголовки страниц, alt и title картинок — всё, что задаётся на SEO-вкладках инфоблока, разделов и элементов.

Три шага, и все обязательны

1. Перевести шаблоны. Экран Перевод, вкладка «Автоперевод», вид перевода «SEO-шаблоны». Или кнопкой на карточке — там есть галочка «Включая SEO-шаблоны», и она включена по умолчанию.

2. Позвать хелпер в шаблоне. Без этого посетитель перевода не увидит:

IblockHelper::substituteStandardFields($arResult);
IblockHelper::substituteSeo($arResult);

Для разделов — substituteSectionSeo($arResult). Порядок важен: SEO читает уже подставленные поля.

3. Сбросить кеш. Значения кешируются вместе с компонентом.

Почему второй шаг нельзя пропустить

Ядро Битрикса считает мета-теги по базовому шаблону и кладёт результат в кеш без привязки к языку. Переведённый шаблон оно не увидит никогда — не потому, что перевод плохой, а потому что ядро о нём не спрашивает.

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

Переводится только своё

Шаблон берётся с того уровня, где он задан: элемент, иначе раздел, иначе инфоблок. Переводится он там же, где задан.

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

Правило одно: уровень с собственным базовым шаблоном побеждает.

Макросы

{=this.name}, {=this.property.CODE}, {=parent.name} и {=iblock.name} подставляют переведённые значения. Название инфоблока при этом берётся из словаря — у инфоблока перевод живёт не в поле ядра.

{=sections.*} остаётся базовым: цепочка разделов у ядра своя, и подменять её — значит повторять её целиком.

Макрос обязан вернуться из перевода целым. Если модель его потеряла или изменила, перевод не записывается, а в журнале появляется отметка. Такой шаблон проще перевести руками.

Правка руками

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

Нужно право на запись в модуле. Права на чтение мало: SEO-шаблон уезжает в мета-теги публичных страниц. Без права W поля переводов на вкладке не появятся.

Унаследованный шаблон заблокирован — правьте там, где он задан.

Перевод, сохранённый руками, очередь машинным не перезапишет, пока не изменится базовый шаблон.

Две вещи, которые выглядят как ошибки

Предпросмотр на SEO-вкладке показывает базовые значения. Это не ошибка: предпросмотр считает то, что сделает ядро, а ядро о переводе не знает.

Если мета-теги уже ставит код шаблона через словарь — выберите что-то одно. Два механизма перебивают друг друга, и побеждает тот, что выполнился позже. Это неочевидно и ловится долго.

Как это устроено внутри

Как это устроено внутри — хранилище, чтение, очередь и сброс кеша.