
Исходное описание сообщает, что рекомендации ведут на английские версии при заполненных локализованных адресах. Причина не установлена. Ниже разобрана учебная модель ссылок для двух языков и двух типов страниц: модели и конфигуратора. Клиентские домены, названия товаров и реальные таблицы локализации не используются.
Разделить выбор рекомендации и выбор её адреса
Алгоритм может правильно выбрать похожую модель и ошибиться только при построении ссылки. Это разные этапы. Сначала система определяет, какой товар рекомендовать, затем получает его представление в нужном языке. Если смешать оба решения, отсутствие перевода способно неожиданно изменить состав рекомендаций или отправить посетителя на случайную страницу.
Устойчивый ключ модели должен связывать языковые версии. Название не подходит для такой связи: переводы различаются, редактор может изменить формулировку, а разные модели иметь похожие подписи. В учебной схеме модель А имеет отдельные URL для языков X и Y. Блок получает ключ А и текущий язык, а не пытается найти страницу по тексту заголовка.
Проверьте, где именно хранится локализованный адрес. Это может быть отдельное поле, связанная запись или правило маршрута. Нельзя выбирать первый непустой URL из объекта без знания назначения. Порядок полей в ответе не должен определять язык посетителя. Контракт данных должен называть язык и тип страницы явно.
Определять язык из контекста сайта
Язык текущей страницы должен поступать из согласованного механизма маршрутизации или конфигурации. Случайное значение браузера не всегда совпадает с открытой версией. Посетитель может сознательно читать другой язык, а автоматический выбор по предпочтению устройства вернёт его обратно. Для ссылки рекомендации обычно важен текущий выбранный контекст, а не предположение о человеке.
Проверьте прямое открытие вложенной страницы, переход из меню и смену языка. Если контекст определяется только при первом входе на главную, блок на прямом URL может получить значение по умолчанию. Это объясняет часть плавающих ошибок, но причина должна быть подтверждена наблюдением. Сохраните безопасные признаки: тип страницы, выбранный язык и источник адреса.
Документация Google о многоязычных сайтах рассматривает отдельные языковые версии и понятные способы перехода. Для этого разбора важен практический принцип: посетителю должно быть ясно, куда ведёт ссылка. Рекомендация не должна незаметно менять язык из-за технического запасного значения. Поисковые аннотации языковых версий проверяются отдельно и не заменяют исправление самой ссылки.
Различать страницу модели и конфигуратор
У одной модели могут быть обзорная карточка и отдельный экран настройки. В данных иногда хранятся несколько локализованных адресов. Блок рекомендаций должен знать, какой тип назначения ему нужен. Если взять локализованный URL конфигуратора вместо страницы модели, язык может оказаться правильным, а действие посетителя всё равно будет другим.
Составьте таблицу «модель × язык × тип страницы». Пустая ячейка имеет смысл и должна обрабатываться явно. Нельзя заполнять её соседним адресом только ради отсутствия ошибки. Например, обзорная страница доступна, а конфигуратор ещё не переведён. Рекомендация может вести на обзор по согласованному правилу, но это не следует считать существованием локализованного конфигуратора.
Проверьте подпись действия. Если ссылка открывает настройку, текст должен это отражать. Кнопка «Подробнее» и кнопка «Собрать» могут вести к разным назначениям. Правильный URL неотделим от понятного обещания интерфейса. В учебной приёмке сравнивают название модели, язык, тип страницы и подпись как один результат.
| Модель | Язык | Обзор | Конфигуратор |
|---|---|---|---|
| А | X | Есть | Есть |
| А | Y | Есть | Нет |
| Б | X | Есть | Есть |
| Б | Y | Нет | Нет |
Явно выбрать запасное поведение
Если нужного перевода нет, проект должен решить, что показывать. Скрытие рекомендации сохраняет языковую однородность, но уменьшает выбор. Ссылка на другой язык может быть полезной, если это обозначено. Переход на локализованный обзор вместо конфигуратора меняет действие. Ни один вариант нельзя объявить универсально правильным без назначения сайта и ожиданий аудитории.
Запасное правило должно быть одинаковым в серверном и клиентском рендере. Иначе сначала появится ссылка на один язык, а после загрузки данных она сменится. Посетитель может успеть нажать промежуточный адрес. Если данные ещё неизвестны, лучше понятное ожидание или отсутствие активной ссылки, чем временное обещание заведомо неподходящего назначения.
Отсутствие URL отличается от недоступности страницы. Поле может быть заполнено, но вести к 404, перенаправлению на другой язык или скрытому материалу. Проверяйте актуальную доступность по предусмотренным правилам, не превращая каждый показ блока в массовый внешний обход. Для публикации контента полезна отдельная валидация связей и разрешённая выборочная приёмка.
Проверить порядок приоритетов в коде
Типичная ошибка возникает, когда общий URL выбирается раньше локализованного. Разработчик добавляет новое поле, но существующий оператор запасного значения продолжает брать старую английскую ссылку. Найдите точку окончательного выбора адреса и проследите все условия. Наличие правильного поля в базе не доказывает, что компонент использует его.
Проверьте преобразования между API и компонентом. Поле может теряться при сериализации, переименовываться или не входить в список выбираемых данных. Тогда интерфейс видит только общий адрес и честно применяет запасное правило. Исправление должно восстанавливать контракт через все затронутые слои, а не подставлять локализованную строку вручную в одном шаблоне.
Не определяйте язык по наличию знакомого сегмента в произвольной строке, если система уже хранит контекст. Такой поиск плохо работает с доменами, вложенными путями и изменением структуры. Генератор ссылки должен получать проверенные данные, а не угадывать их по тексту. Точный способ зависит от архитектуры и проверяется до реализации.
Учитывать кэш рекомендаций
Если список рекомендаций общий, его сущности можно переиспользовать, но отображаемые названия и адреса зависят от языка. Проверьте ключи и границы кэша. Прогрев страницы языка X не должен закреплять ссылки X для посетителя Y. Внешне это выглядит как непостоянная ошибка: после очистки всё правильно, а затем снова появляются чужие адреса.
Учебный тест открывает один и тот же тип материала в двух языках в разном порядке. Сравнивают итоговый HTML, ссылки и подписи до и после клиентского обновления. Затем повторяют с прогретым кэшем. Если есть несколько сайтов, контекст витрины проверяют вместе с языком: одинаковая локаль не означает одинаковый домен и набор материалов.
Не очищайте весь кэш при каждом показе блока ради исправления смешивания. Это убирает пользу сохранения и не объясняет правило. Нужно включить существенный контекст в нужный слой либо хранить общие сущности отдельно от локализованного представления. Решение должно быть минимальным и соответствовать существующей системе, без новой универсальной архитектуры на будущее.
Согласовать подписи и изображения
Ссылка на правильный язык может соседствовать с названием на другом. Проверьте все локализуемые части карточки: название, краткое описание, кнопку, подпись характеристики и доступное описание изображения. Не переводите технический код модели, если он является общим обозначением. Локализация должна сохранять точную идентичность товара.
Изображение может быть общим, но содержать встроенный текст. Если он относится к языку или рынку, нужно отдельное правило. Не подменяйте картинку автоматически по наличию перевода названия. Для публичной статьи достаточно нейтрального учебного объекта. Реальные фотографии и оформление клиента могут сделать его узнаваемым даже без домена, поэтому здесь они не используются.
Проверьте длинные переводы на узком экране. Они не должны скрывать подпись действия или создавать наложение на соседнюю карточку. Это локальная проверка блока, а не полный редизайн сайта. Сохраните общую структуру и дайте тексту разумное пространство. Механическое уменьшение шрифта ради одинаковой высоты может ухудшить читаемость.
Проверить прямой переход
Нажмите рекомендацию и проверьте конечный ответ, а не только href в исходной карточке. Сервер может перенаправить локализованный путь на язык по умолчанию из-за другого правила. В таком случае исправление компонента необходимо, но недостаточно. Сопоставьте маршрут назначения, язык содержания и доступность нужного типа страницы.
Проверьте открытие в новой вкладке и копирование ссылки. Они не должны зависеть от предварительного клиентского переключения состояния. Если переход работает только после выполнения скрипта на исходной странице, это ограничение нужно устранить или явно учитывать. Обычная ссылка должна описывать самостоятельный адрес назначения в выбранном контексте.
Возврат назад и смена языка не должны оставлять старый блок. После обновления контекста рекомендации получают актуальное представление. Если запросы идут асинхронно, поздний ответ прежнего языка не должен перезаписать текущий. Свяжите ответ с актуальным контекстом, сохраняя выбранную модель рекомендаций отдельно от её языка.
Относительный адрес проверьте с вложенной страницы. Значение без ведущего слеша может разрешиться относительно текущего каталога и добавить лишний сегмент. Само локализованное поле при этом выглядит правильным, но конечный URL отличается. Выберите согласованный формат хранения и валидируйте его при сохранении, чтобы блок не пытался угадывать смысл строки.
На странице назначения сравните выбранный основной URL с языковой принадлежностью материала. Если локализованный маршрут всегда объявляет основным английский адрес независимо от содержания, это отдельное несогласованное правило. Зафиксируйте его для соответствующей проверки, не скрывая перенаправлением все языковые различия только ради работы одного блока.
Подготовить матрицу локализаций
| Сценарий | Что проверить |
|---|---|
| Все переводы заполнены | Выбран URL текущего языка |
| Нет перевода конфигуратора | Применено явное запасное правило |
| Нет никакой локальной страницы | Нет незаметной случайной подстановки |
| Прогрев другим языком | Ссылки не смешиваются |
| Быстрая смена языка | Поздний ответ не возвращает старый блок |
| Прямое открытие рекомендации | Конечная страница соответствует обещанию |
Для каждой поддерживаемой локали выберите модель с полным набором адресов и модель с пропуском. Это проверяет основной и запасной путь. Не нужно заполнять реальные данные ради теста: синтетические записи позволяют безопасно показать структуру. Если учебная CMS недоступна, отметьте требуемую поверхность и используйте схему выбора адреса.
Полезно проверить скрытый перевод и удалённую модель. Сохранённый URL не должен считаться разрешённой рекомендацией только потому, что поле непустое. Правила публичности должны совпадать с доступностью каталога. Иначе исправленная локализация приведёт посетителя на материал, который редактор уже снял с показа.
Оставить правило сопровождения
В редакторской инструкции укажите, где заполняются адреса модели и конфигуратора, какие поля обязательны и что происходит при отсутствии перевода. Разработчику оставьте приоритет выбора, контекст кэша и набор регрессионных примеров. Это помогает добавлять язык без ручных замен в нескольких шаблонах рекомендаций.
Не обещайте автоматическую правильность всех многоязычных страниц по одной доработке блока. Здесь проверяется конкретный путь от рекомендации к нужному материалу. Языковые аннотации, карта сайта и общая стратегия локализации имеют собственные проверки. Сохранение границы делает результат понятным и не раздувает небольшую исправляемую ошибку до недоказанного аудита всего сайта.
Блок готов, когда каждая рекомендация сохраняет идентичность модели, текущий язык и нужный тип назначения, а отсутствие перевода обрабатывается явно. Заполненные поля в административной части сами по себе этого не подтверждают. Нужны конечный переход, проверка кэша и повтор сценария после смены контекста.
Связанный разбор: Регламент обновления сайта: кто отвечает за контент, формы, аналитику и безопасность.
Документация и источники
- Google: многоязычные и региональные сайты: Отдельные языковые версии и понятные переходы между ними