Многоязычный сайт на MODX: типичные ошибки и решения
В MODX многоязычность ломается не из-за перевода страниц, а из-за рассинхрона контекстов, URL, кеша и связанных ресурсов. Разбираем ошибки Babel и архитектуры сайта, которые дорого исправлять после запуска.

Многоязычный сайт на MODX чаще всего начинает ломаться в четырех местах: языковые контексты настроены по-разному, переводы не связаны между собой, URL ведут на неправильные страницы, а кеш продолжает отдавать старую версию. На небольшом проекте это выглядит как пара битых ссылок. После индексации поисковиками проблема превращается в дубли, потерю трафика и ручную сверку сотен ресурсов.
Сначала выберите архитектуру, а не переводчик
Для MODX Revolution 2.8.x и совместимых с ним сборок обычно используют один из трех подходов. Самый распространенный — отдельный контекст на каждый язык и связка ресурсов через Babel. Но это не единственный вариант, и он не всегда оправдан.
| Подход | Когда подходит | Цена и риск |
|---|---|---|
| Контексты и Babel | У сайта одинаковая структура, но разные тексты, URL и SEO-настройки | Нужно поддерживать пары переводов, настройки контекстов и кеш |
| Отдельные сайты в одной установке | Языковые версии сильно отличаются по структуре, товарам или правам доступа | Меньше неявных связей, но больше дублирования шаблонов, настроек и обновлений |
| Один ресурс с полями нескольких языков | Небольшой закрытый проект или интерфейс без самостоятельного SEO | Сложнее маршрутизация, метатеги и редактирование; для публичного сайта подход быстро становится тесным |
Если языковые версии должны иметь отдельные адреса, метатеги и индексацию, не прячьте переводы в одном поле ресурса. Выбирайте отдельные ресурсы в отдельных контекстах и заранее определяйте, какие из них образуют пару.
Главная единица многоязычного сайта в MODX — не слово и не шаблон, а связанный набор ресурсов, контекстов, URL и SEO-данных.
* Контекст — изолированное окружение MODX с собственными настройками, доменом или языком. Через контексты обычно разделяют русскую, английскую и другие версии сайта.
Ошибка 1. Контексты отличаются только названием
Создать контексты web_ru и web_en недостаточно. MODX использует настройки контекста при генерации ссылок, определении корня сайта, выборе культуры и работе с кешем. Если одна переменная осталась от русской версии, английский сайт может открываться по правильному домену, но генерировать неправильные ссылки.
Что проверить в каждом контексте
- адрес сайта и базовый путь, включая завершающий слеш, если он нужен вашей схеме;
- ключ культуры и локаль, которые используются в шаблонах, датах и системных сообщениях;
- корневой ресурс контекста и страницу ошибки 404;
- режим работы с дружественными URL и правила веб-сервера;
- настройки кеширования и домен, на котором сайт должен считать себя основным.
Проверка простая: откройте главную страницу каждого языка, затем одну вложенную страницу и страницу 404. В исходящих ссылках не должно появляться домена другого языка, двойных слешей или возврата в корень неверного контекста.
Ошибка 2. Перевод создают копированием, но не связывают
Копия ресурса не становится переводом автоматически. Если английскую страницу просто дублируют в дереве, MODX и Babel не получают надежной информации о том, какая русская страница ей соответствует. Переключатель языка тогда ведет на главную, сохраняет текущий URL или открывает случайный ресурс.
Для каждой индексируемой страницы заведите явную пару или группу переводов. Связывайте не только главные страницы, но и карточки товаров, статьи, категории, страницы контактов и системные документы. Отдельно решите, что делать с ресурсом без перевода: скрывать переключатель, вести на родительскую страницу или оставлять язык по умолчанию.
- Создайте исходный ресурс и его перевод в нужных контекстах.
- Свяжите ресурсы средствами выбранного решения, а не ссылкой на соседний ID.
- Проверьте переключатель на странице с вложенным URL, а не только на главной.
- Измените заголовок исходной страницы и убедитесь, что перевод не поменялся самопроизвольно.
- Проверьте вариант, где перевод отсутствует: результат должен соответствовать вашей политике fallback.
Если связь хранится в дополнении, не удаляйте ресурс и не создавайте его заново без повторной проверки связки. При миграциях ID могут измениться, а старые связи останутся указывать на несуществующие страницы.
Ошибка 3. Язык переключают жесткой ссылкой
Ссылка вида /en/about/ работает только до первого изменения URL. Стоит переименовать alias, добавить локализованный сегмент или создать вложенный ресурс — переключатель начинает вести не на перевод текущей страницы, а на старый адрес.
Ссылка на другой язык должна строиться через связь переводов и штатную генерацию URL MODX или Babel. Не зашивайте в шаблон ID конкретной страницы и не рассчитывайте, что одинаковая структура деревьев сохранится навсегда.
Что проверить в шаблоне
- переключатель получает перевод текущего ресурса, а не только ссылку на главную;
- для отсутствующего перевода задан понятный fallback;
- текущий язык помечается как активный без создания второй ссылки на тот же URL;
- URL не собирается конкатенацией домена, языка и alias вручную;
- после очистки кеша ссылка остается корректной.
Отдельная тема — корректная генерация hreflang для поисковиков. Она связана с переключателем, но не сводится к нему: поисковая разметка должна учитывать все доступные переводы и канонический URL.
Ошибка 4. Локализуют текст, но забывают метаданные
Перевести заголовок страницы недостаточно. В выдаче поисковика и в социальных сетях могут остаться русские title, description, Open Graph-поля и подписи изображений. Пользователь видит английский URL, но русное описание — это сигнал плохо собранной версии.
Для каждой языковой копии проверьте:
- заголовок страницы и метатег description;
- alias и заголовки меню;
- канонический URL и альтернативные языки;
- Open Graph title, description и изображение;
- тексты в чанках, шаблонах, формах и письмах;
- подписи изображений и атрибуты, которые видят скринридеры.
Не смешивайте контент ресурса и системные фразы. Название кнопки «Отправить», сообщение об ошибке формы и подпись «Войти» обычно удобнее хранить через лексиконы или механизм локализации дополнения. Описание товара, статьи и услуги должно оставаться в ресурсах перевода.
Ошибка 5. TV-поля остаются на языке оригинала
У MODX текст может находиться не только в поле ресурса. Часто в TV хранятся подзаголовок, телефон, баннер, преимущества или ссылка на файл. При копировании ресурса редактор меняет заголовок и описание, но забывает TV. В итоге страница выглядит переведенной лишь частично.
Составьте список TV и разделите их на три группы: переводимые, общие для всех языков и зависящие от контекста. Для переводимого поля у каждой языковой версии должно быть собственное значение. Для общего — единый источник, иначе редакторы начнут менять одинаковые данные в нескольких местах.
Особенно внимательно проверьте TV с изображениями и ссылками. Файл может иметь русское имя, а ссылка — вести в русский контекст. После публикации откройте страницу в режиме инкогнито и проверьте не только текст, но и форму, меню, баннеры и письма.
Ошибка 6. После изменений проверяют только браузер
MODX кеширует результат генерации ресурсов. Поэтому редактор может уже видеть новый перевод, а посетитель — старую страницу. Обратная ситуация тоже возможна: кеш очищен для одного контекста, но второй язык продолжает отдавать прежние ссылки и меню.
После изменения структуры или связей проверьте сайт в трех режимах:
- авторизованный пользователь в панели MODX;
- анонимный посетитель без cookies;
- запрос с отключенным кешем или после очистки кеша в затронутых контекстах.
Если перед MODX стоит CDN или reverse proxy, очистка кеша в админке не удаляет копию на внешнем слое. Это нужно учитывать отдельно. Иначе исправленная ссылка будет видна только части пользователей, пока не истечет внешний TTL.
Когда Babel, а когда отдельные контексты
Babel удобен, когда языковые версии повторяют друг друга по структуре и отличаются в основном контентом. Он снижает число ручных ссылок и помогает поддерживать связи переводов. Но дополнение не отменяет проверку доменов, TV-полей, SEO и кеша.
Разделяйте сайты сильнее, если у языков разные каталоги, разные права редакторов, разные правила публикации или большая часть страниц не имеет пары. В такой схеме будет больше повторяющейся настройки, зато меньше скрытой логики. Ошибка в одном языке не обязательно затронет остальные.
Что ломается первым
- Переключатель ведет на главную. Обычно нет связи у вложенного ресурса или задан неправильный fallback.
- Английская страница возвращает 404. Проверьте alias, корень контекста и правила веб-сервера для дружественных URL.
- Меню показывает русские пункты. Проверьте источник меню, контекст вызова и кеш, а не только названия ресурсов.
- В переводе остался русский баннер. Значение хранится в TV или чанке, который не локализуется автоматически.
- После публикации видна старая версия. Очистите кеш MODX и проверьте CDN или прокси перед сервером.
Что сделать дальше
Перед запуском составьте таблицу ресурсов: URL каждого языка, связанный перевод, шаблон, TV, канонический адрес и статус публикации. Затем автоматически или вручную проверьте три сценария: переход по переключателю с вложенной страницы, открытие URL без перевода и отправка формы на каждом языке.
Для проекта на MODX Revolution 2.8.x зафиксируйте версии ядра, дополнений и PHP в документации команды. Babel и другие extras развиваются независимо от ядра, поэтому совместимость конкретного релиза нужно сверять с его официальной документацией и журналом изменений. После запуска следите за 404, редиректами, долей страниц с неправильным языком и расхождением кешированных ответов.
Локализатор видео: Перевод и озвучка видео на другой язык с укладкой в исходный тайминг. Глоссарий терминов, отметки проблемных реплик.
Спросить за 250 ₽Источники: MODX Documentation: Contexts, Babel — multilingual extra for MODX Revolution
Частые вопросы
Можно ли сделать многоязычность в одном контексте MODX?
Нужно ли создавать перевод для каждой страницы?
Почему Babel не переключает вложенную страницу на перевод?
Что делать, если после изменения URL сайт показывает старые ссылки?
Нужно ли переводить TV-поля и чанки отдельно?
Что делать, если у меня другая версия MODX или Babel?
Может ли многоязычный сайт потерять позиции из-за неправильной настройки?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.