Piton Studios
Piton Studios
Назад в блог

Многоязычный сайт: 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 сообщает поисковой системе: «у этой страницы есть аналоги на таких-то языках». При неверной настройке он либо не работает, либо продвигает не тот язык. Достаточно трёх правил:

  1. Взаимность. Если страница A указывает на B, то B должна указывать на A. Односторонние теги игнорируются.
  2. Включение себя. Каждая страница должна перечислять и свой язык.
  3. 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.

Долг перевода: вот где настоящая стоимость

Настоящая проблема многоязычных сайтов не первый перевод, а второй год. Турецкую страницу обновили, английскую нет; добавили услугу, про русскую забыли. Через полгода у вас три разных сайта.

Накопление долга перевода: с контролем и безКоличество отсутствующих или устаревших переводов. Сценарная модель — не измерение, а тенденция, которую мы наблюдаем в проектах со скриптом проверки и без него.
Без автоматической проверкиНехватка перевода ломает сборку
011223344Запуск3-й мес.6-й мес.12-й мес.18-й мес.

Решение несложное: проверка, которая ловит недостающий перевод до публикации. На этом сайте это делает 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

Модель контента: что переводить

Переводить всё не требуется и обычно неправильно.

Приоритет перевода по типам контентаПриоритет по 10-балльной шкале — наша оценка по вкладу в конверсию на корпоративных сайтах.
Страницы услуг10Обязательно на всех языках
Контакты и формы10Включая тексты ошибок
Страницы проектов8Может хватить краткого перевода
Контент блога6Может различаться по языкам
Юридические тексты5По местному законодательству

В блоге важно следующее: статья не обязана иметь аналог на каждом языке, но существующие аналоги должны быть переводами друг друга. Связывание разных материалов одним translationKey дезинформирует hreflang.

Семь частых ошибок

  1. Автоматический редирект по языку. Принудительное перенаправление по языку браузера ломает работу и краулеров, и пользователей. Язык предлагают, а не навязывают.
  2. Флаги вместо языков. Флаг обозначает страну, а не язык. Немецкоязычному австрийцу не должно приходиться жать на флаг Германии.
  3. Перевод только главной. Сайт с непереведёнными внутренними страницами невидим в выдаче на этом языке.
  4. Не обновлённый атрибут lang. <html lang="ru"> должен меняться вместе с языком — на это опираются доступность и скринридеры.
  5. Забытые метаданные. Если title и description остались на турецком, страница на английском всё равно выглядит турецкой в выдаче.
  6. Жёстко зашитые форматы даты, валюты и чисел. 1.500,00 ₺ и €1,500.00 это не одно и то же число; форматирование должно следовать локали.
  7. Переключатель языка, выбрасывающий на главную. Пользователь, меняющий язык на странице услуги, должен попасть на ту же услугу на другом языке.

Седьмое технически требует сопоставления путей — на этом сайте при смене языка на странице услуг вы остаётесь на той же странице.

Измерение: смотрите по языкам

Суммарный трафик на многоязычном сайте вводит в заблуждение. Каждый язык это отдельный рынок и отдельная отчётность.

3Сегмента с отдельной отчётностьюКаждый язык рынок
1Общее определение конверсииСопоставимость
x-defaultКуда попадёт неопознанный посетительВыбирается осознанно

Настройте отдельный фильтр по каждому языку в 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.
Сколько сил отнимает поддержка многоязычного сайта?
Основная нагрузка не перевод, а синхронизация: изменение на одном языке, не дошедшее до остальных, со временем формирует долг перевода. Дешевле всего это предотвращает скрипт проверки, который сообщает о недостающих переводах ошибкой сборки.