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-вкладке показывает базовые значения. Это не ошибка: предпросмотр считает то, что сделает ядро, а ядро о переводе не знает.
Если мета-теги уже ставит код шаблона через словарь — выберите что-то одно. Два механизма перебивают друг друга, и побеждает тот, что выполнился позже. Это неочевидно и ловится долго.
Как это устроено внутри
Как это устроено внутри — хранилище, чтение, очередь и сброс кеша.