Многоязычный сайт: hreflang, архитектура i18n и поддержка контента
Добавить второй язык это архитектурное решение, а не задача перевода. Стратегия URL, настройка hreflang, борьба с долгом перевода и семь ошибок, ломающих многоязычное SEO.
Добавление второго языка обычно начинается как «давайте переведём тексты», а через полгода превращается в два несинхронных сайта. На деле многоязычность это архитектурное решение: если структура URL, маршрутизация, модель контента и процесс публикации не заложены под неё с самого начала, долг перевода накапливается.
В статье разбираем решения, на которых держится трёхъязычный сайт — включая устройство этого сайта.
Кратко
- Многоязычность это решение об архитектуре URL и контента, а не задача перевода.
- Для большинства корпоративных сайтов верная стратегия URL это подкаталог (site.com/ru/).
- hreflang работает по трём правилам: взаимность, включение себя, x-default.
- Указывать язык в hreflang при отсутствии соответствующей страницы это ошибка.
- Единственное, что предотвращает долг перевода, это автоматическая проверка, ломающая сборку.
Сначала решение: какие языки и зачем
Языки не бесплатны. Каждый добавляет перевод, редактуру, синхронизацию обновлений и нагрузку на аналитику. Поэтому список строится по данным, а не по принципу «пусть будет».
| Сигнал | Где смотреть | О чём говорит |
|---|---|---|
| Языковой состав текущего трафика | Аналитика — язык браузера, страна | Аудитория, которая уже приходит и не понимает |
| Объём поиска | Ключевые термины на целевом языке | Есть ли рынок |
| Источник продаж | CRM / входящие обращения | На каком языке приходят деньги |
| Конкуренты | Сколько языков у них | Пробел или обязанность |
| Операционная готовность | Есть ли кому ответить на этом языке | Сможете ли обслужить спрос |
Последняя строка пропускается чаще всего и обходится дороже всего. Если вы открыли русскую страницу, а ответить на русском некому, вы приобрели разочарование.
Стратегия URL: три варианта, один обычный ответ
| Стратегия | Пример | Плюс | Минус |
|---|---|---|---|
| Подкаталог | site.com/ru/services | Авторитет на одном домене, простая настройка | Слабее геотаргетинг |
| Поддомен | ru.site.com/services | Возможен отдельный хостинг | Авторитет дробится, настройка сложнее |
| Отдельный домен | site.ru | Сильный локальный сигнал | Каждый домен набирает авторитет с нуля |
| Параметр | site.com?lang=ru | — | Проблемы со сканированием, не используйте |
Для подавляющего большинства корпоративных сайтов ответ это подкаталог. Отдельный домен оправдан только при своём юрлице, своём прайсе и своей команде в каждой стране.
Переводить ли сегменты пути
Если выбран подкаталог, остаётся ещё одно решение: переводить ли имена путей. На этом сайте
переводятся — /tr/hizmetler, /en/services, /ru/services — потому что для турецкоязычного
пользователя турецкий URL и читаемее, и слабый сигнал релевантности.
// Сопоставление путей в next-intl — переключатель языка ведёт на верный аналог
'/services': { tr: '/hizmetler', en: '/services', ru: '/services' },
'/projects': { tr: '/projeler', en: '/projects', ru: '/projects' },Оговорка: переводить слаги отдельных проектов или услуг обычно избыточное усложнение. Переводится
сегмент (/services), идентификатор записи (/seo-geo) остаётся неизменным.
hreflang: три правила
hreflang сообщает поисковой системе: «у этой страницы есть аналоги на таких-то языках». При неверной настройке он либо не работает, либо продвигает не тот язык. Достаточно трёх правил:
- Взаимность. Если страница A указывает на B, то B должна указывать на A. Односторонние теги игнорируются.
- Включение себя. Каждая страница должна перечислять и свой язык.
- x-default. Нужно указать версию для случая, когда совпадения нет.
<link rel="alternate" hrefLang="tr" href="https://site.com/tr/hizmetler" />
<link rel="alternate" hrefLang="en" href="https://site.com/en/services" />
<link rel="alternate" hrefLang="ru" href="https://site.com/ru/services" />
<link rel="alternate" hrefLang="x-default" href="https://site.com/tr/hizmetler" />На этом сайте статьи блога связаны полем translationKey, и hreflang формируется только для
реально существующих языков. SEO-сторону той же логики мы разобрали в
статье о переходе от SEO к GEO.
Долг перевода: вот где настоящая стоимость
Настоящая проблема многоязычных сайтов не первый перевод, а второй год. Турецкую страницу обновили, английскую нет; добавили услугу, про русскую забыли. Через полгода у вас три разных сайта.
Решение несложное: проверка, которая ловит недостающий перевод до публикации. На этом сайте это
делает pnpm content:check — сравнивает 210 контентных полей на трёх языках и завершается с кодом 1
при любой нехватке. Именно этот скрипт при первом запуске нашёл два отсутствующих перевода.
$ pnpm content:check
tr: works 49/49, stories 6/6, servicesList 15/15 ✓
en: works 49/49, stories 6/6, servicesList 15/15 ✓
ru: works 49/49, stories 6/6, servicesList 15/15 ✓
Всего проверено: 210 — Проблем: 0Модель контента: что переводить
Переводить всё не требуется и обычно неправильно.
В блоге важно следующее: статья не обязана иметь аналог на каждом языке, но существующие аналоги
должны быть переводами друг друга. Связывание разных материалов одним translationKey
дезинформирует hreflang.
Семь частых ошибок
- Автоматический редирект по языку. Принудительное перенаправление по языку браузера ломает работу и краулеров, и пользователей. Язык предлагают, а не навязывают.
- Флаги вместо языков. Флаг обозначает страну, а не язык. Немецкоязычному австрийцу не должно приходиться жать на флаг Германии.
- Перевод только главной. Сайт с непереведёнными внутренними страницами невидим в выдаче на этом языке.
- Не обновлённый атрибут
lang.<html lang="ru">должен меняться вместе с языком — на это опираются доступность и скринридеры. - Забытые метаданные. Если title и description остались на турецком, страница на английском всё равно выглядит турецкой в выдаче.
- Жёстко зашитые форматы даты, валюты и чисел.
1.500,00 ₺и€1,500.00это не одно и то же число; форматирование должно следовать локали. - Переключатель языка, выбрасывающий на главную. Пользователь, меняющий язык на странице услуги, должен попасть на ту же услугу на другом языке.
Седьмое технически требует сопоставления путей — на этом сайте при смене языка на странице услуг вы остаётесь на той же странице.
Измерение: смотрите по языкам
Суммарный трафик на многоязычном сайте вводит в заблуждение. Каждый язык это отдельный рынок и отдельная отчётность.
Настройте отдельный фильтр по каждому языку в Search Console, а в аналитике сделайте язык основным сегментом. Если один язык конвертирует вдвое хуже другого, дело либо в качестве перевода, либо в соответствии предложения этому рынку — в общей сумме это не видно.
Пример
В проекте Nexos Investment многоязычность была не надстройкой, а
частью архитектуры: маршрутизация на next-intl, автоматическая генерация многоязычных предложений
из данных объявления и управление контентом по языкам в одной системе. Та же потребность выходит на
первый план в проектах недвижимости для международной аудитории, таких как
Homes in Mediterranean и
Arslan Estates.
Заключение
Сложность многоязычного сайта не в переводе, а в том, чтобы переводы оставались синхронными. Верная стратегия URL, hreflang по правилам и проверка, ловящая пробелы на сборке — с этими тремя вещами второй и третий язык становятся дополнительным рынком, а не дополнительной нагрузкой.
Хотите обсудить, со скольких языков начать — напишите нам; техническую часть мы закрываем в рамках услуги SEO и GEO.
Часто задаваемые вопросы
- Подкаталог, поддомен или отдельный домен?
- Для большинства корпоративных сайтов правильный выбор это подкаталог (site.com/ru/): авторитет накапливается на одном домене, настройка самая простая, а hreflang работает с наименьшим риском ошибки. Отдельные домены оправданы, только когда в каждой стране своё юридическое лицо, своё ценообразование и своя команда.
- Можно ли использовать машинный перевод?
- Публиковать сырой машинный перевод вредно для видимости на этом языке: и поисковые системы, и языковые модели отличают низкокачественный перевод. Рабочая модель это машинный перевод как черновик с последующей вычиткой носителем языка — заметно дешевле перевода с нуля.
- Обязательно переводить каждую страницу на каждый язык?
- Нет, и чаще всего не нужно. Страницы услуг, референсов и контактов должны быть на всех языках; контент блога может различаться по языкам. Важно другое: не указывать язык в hreflang, если соответствующей страницы нет — тег, ведущий на несуществующий перевод, это ошибка.
- Как понять, что hreflang настроен неверно?
- Три классических признака: ошибки языкового таргетинга в Search Console, выдача страницы не на том языке и каннибализация двух языков. Техническая проверка проста: каждая страница должна перечислять все языки включая себя, теги должны быть взаимными, и должен быть x-default.
- Сколько сил отнимает поддержка многоязычного сайта?
- Основная нагрузка не перевод, а синхронизация: изменение на одном языке, не дошедшее до остальных, со временем формирует долг перевода. Дешевле всего это предотвращает скрипт проверки, который сообщает о недостающих переводах ошибкой сборки.
