Выход на новый языковой рынок часто представляется простым переводом страниц: взяли страницы, прогнали через перевод, добавили переключатель флагов - готово. Через первый квартал эксплуатации выясняется, что ничего не готово: поиск показывает немецкую версию французам, переключатель языков ведёт себя непредсказуемо, а аналитика смешала три разные аудитории в одну кашу. Многоязычный сайт - это отдельная инженерная и контентная дисциплина, где адресация, локализация и структура решают больше, чем сам факт наличия переводов.

Техническая основа многоязычности при этом известна и стабильна годами: у каждой языковой версии свой адрес, своя разметка alternates, свои правила выбора по географии и настройкам браузера. Ниже разобраны все рабочие слои - адресация, структура, контент и эксплуатация - в том порядке, в котором они строятся на живом многоязычном проекте.

Адресация языковых версий решает всё остальное

У каждой языковой версии обязан быть собственный уникальный адрес: поддомен, подпапка или отдельный домен - выбор определяется инфраструктурой и амбициями, но сам принцип уникальности не обсуждается. Поисковая система сопоставляет языки по адресам, и языковая версия без собственного адреса не существует для выдачи. Взаимные связи объявляются разметкой alternates, которая честно перечисляет все языковые варианты страницы, включая региональные различия:

<link rel="alternate" hreflang="ru" href="https://site.example/ru/">
<link rel="alternate" hreflang="de" href="https://site.example/de/">
<link rel="alternate" hreflang="x-default" href="https://site.example/en/">

Разметка при этом симметрична: каждая версия ссылается на все остальные, включая обратную ссылку на себя, и обязательный элемент по умолчанию закрывает вопрос, что показывать тем, чей язык остался не угадан. Ошибки разметки alternates - хлеб ежедневных ошибок всех многоязычных сайтов: ссылки на редиректы, несимметричные наборы, устаревшие адреса после переезда.

Редирект по географии при этом проектируется осмотрительно: автоматический переезд человека на угаданный язык без права отказа читается как враждебность. Зрелая схема предлагает, а не заставляет: вежливый баннер с предложением перейти на язык браузера, запоминающий осознанный выбор навсегда. Поисковым роботам редиректы по географии запрещены сами по себе - роботы приходят с разных адресов, и геопривязанный переезд прячет от выдачи целые версии.

Отдельная карта сайта для каждой версии упрощает жизнь и роботу, и команде: карты не смешиваются, ошибки читаются по языкам, и добавление новой версии начинается с её собственной карты.

Выбор схемы адресов определяется амбициями и инфраструктурой

Три стандартные схемы - подпапки, поддомены, отдельные домены - различаются не техническими мелочами, а тем, как поиск и люди воспринимают версии. Подпапки держат всё под одним авторитетным домином и дешевы в обслуживании: одна инфраструктура, один сертификат, наследование ссылочного веса между языками без переливов. Поддомены дают версиям автономию - собственные хостинги, скорости и даже команды, - но требуют отдельного накопления доверия в поиске. Отдельные домены - максимальная локализация под рынки: национальные зоны читаются аудиторией как местные, и сам домен работает как сигнал доверия:

site.example/de/  - простая эксплуатация, общий вес
nde.site.example  - автономия версий, вес собирается отдельно
site.de  - максимальная местность, полная отдельность

Выбор честно сводится к вопросам: будет ли у версии своя команда, нужен ли местный домен как сигнал доверия, готова ли инфраструктура к нескольким зонам. Ошибки выбора редки, зато дорого лечатся: переезд между схемами - миграция адресов со всеми рисками, и лучше один раз посидеть с таблицей, чем потом переезжать с потерями.

Техническая разница между схемами при этом стирается современными сетями доставки: подпапки раскладываются по миру так же равномерно, как поддомены, и скорость перестала быть аргументом. Аргументы остались организационными, и их не закрывает ни одна технология. Гибридные схемы при этом легальны: магазин держит подпапки для языков и отдельный домен для стратегического рынка, а alternates перечисляют всё без пропусков.

Локализация отличается от перевода как кухня от словаря

Перевод передаёт слова, локализация передаёт смысл. Разница ощущается в деталях, которые решают конверсию: форматы дат и чисел, единицы измерения, направления письма, обращения - и глубже: примеры, кейсы, ассоциации. Сайт, где немец читает про американские кварталы и чаевые, понимает, что его не переводили, а обрабатывали. Локализованная страница использует реалии аудитории и её форматы: даты, единицы, обращения. Кнопки и подписи пишутся носителем языка, потому что автоматический перевод микрокопии выдаёт канцелярит, который убивает конверсию точнее любого бага. Вычитка микрокопии стоит часы и окупается первыми визитами.

оригинал: "доставка как в Нью-Йорке"
локализация для Германии: "доставка как в Берлине"

Контент при этом локализуется по приоритетам: страницы конверсии и первый экран в полном объёме, глубинная документация - по спросу. Частичный перевод честнее скрывать: страница-заглушка "этот материал пока только на английском" не вводит в заблуждение и не портит впечатления, а автоматический перевод без вычитки - портит, потому что читатель судит о компании по её языку.

Терминология при этом фиксируется глоссарием по каждому языку: одинаковое явление обязано называться одинаково во всех разделах, и глоссарий обновляется пакетно вместе с контентом. Без глоссария многоязычный сайт через год разговаривает тремя диалектами сам с собой - глоссарий самый недооценённый файл многоязычного проекта.

Поисковая ценность локализации самостоятельна: запросы идут на языке аудитории, и страница, написанная живым языком с местными формулировками, собирает длинные запросы, до которых кальке не дотянуться. Ключевые слова при этом собираются заново для каждого языка: дословный перенос семантики не работает, потому что люди в разных языках называют одно и то же по-разному и ищут с разной структурой запроса.

Длинный хвост каждого языка при этом собирает собственную семантику: объём запросов одной страны может превышать оригинал, и многоязычные проекты регулярно обнаруживают, что переведённая версия обгоняет исходную по трафику, потому что конкуренция там ниже, а спрос живой и малообслуженный.

Переключение языков и поведение версий проектируются как единый путь

Переключатель языков - самый заметный элемент многоязычного сайта и чаще всего его слабейшее звено. Хороший переключатель запоминает выбор, показывает полный список доступных языков и ведёт на ту же страницу на другом языке, а не на главную. Плохой - прячет языки в выпадающую бездну, сбрасывает корзину и возвращает на первую ступень, и человек воспринимает такое поведение как нежелание с ним работать:

function switchTo(lang) {
  const alt = document.querySelector('link[rel="alternate"][hreflang="' + lang + '"]');
  if (alt) {
    localStorage.setItem("lang", lang);
    location.assign(alt.href);
  }
}

Состояние пользователя переживает переключение: корзина, авторизация, заполненные формы остаются на месте, и путь "читал по-немецки, переключился на английский" не превращается в приключение. Выбранный язык уважается при следующих визитах, но предложение остаться в силе: аудитория многоязычных стран переключается намеренно, и интерфейс не решает за людей.

Переключатель при этом находится в предсказуемом месте на всех страницах, а не мигает по макетам разделов. Предсказуемость расположения - мелочь, которая экономит секунды на каждом визите и раздражения на каждом переключении.

Роботы при этом видят все версии одинаково свободно: без куки, без геопривязок, без заглушек по IP. Каждая версия отвечает полным содержанием, канонизация внутри языка не путается с alternates между языками, и у каждой страницы один канонический адрес внутри своей языковой области. Смешение этих двух механизмов - классика аварий, когда страницы начинают канонизировать друг на друга через языки и выпадают из индекса пачками.

Региональные варианты при этом размечаются отдельными метками язык плюс страна: язык и регион - не синонимы, и португальский Португалии отличается от бразильского так же, как немецкий Германии от швейцарского. Разметка с регионами честно разделяет аудитории, если контент действительно различается. Формат дат входит в ту же дисциплину: 03.04 и 04.03 различаются в разных культурах, и путаница здесь стоит дороже любой опечатки.

Карта соответствий hreflang живёт по правилу взаимности: каждая языковая версия перечисляет все остальные, включая саму себя, и разметка без самоссылки или с односторонними связями читается как ошибка. Страница на русском перечисляет английскую и немецкую версии, а те, в свою очередь, указывают обратно на русскую; битая эта связь или односторонняя - сигнал для робота, что карта соответствий собрана наспех, и доверять такой разметке при выборе версии для показа система не спешит. Отдельную роль играет аннотация x-default: она подсказывает роботу, какую версию показывать посетителю, чей язык не совпал ни с одной из заявленных, и без неё такой гость получает произвольный выбор вместо осмысленного маршрута.

Эксплуатация многоязычности строится на правках без дрейфа

Главная организационная болезнь зрелых многоязычных сайтов - дрейф версий: русская страница обновилась, немецкая осталась в прошлом квартале, и аудитория читает разные продукты. Лечение организационное: изменение контента выполняется пакетом по всем живым языкам, устаревшие версии помечаются в редакционном календаре, и приоритет обновлений синхронизируется так же, как релизы кода:

правка каталога: одновременно ru + de + en
непереведённые изменения: пометка в календаре, срок вычитки

Автоматический перевод при этом занимает честное место черновика: он ускоряет пакетное обновление, но не заменяет вычитку. Команда определяет допустимую глубину автоматизации по нише: развлекательный блог вычитывает выборочно, медицинские и юридические страницы - всегда, потому что цена ошибки несоизмерима с экономией.

Аналитика многоязычного сайта разделяется по языкам во всех отчётах: конверсия, поведение, поисковый спрос. Смешанные средние прячут самые ценные находки - например, что немецкая версия конвертирует вдвое лучше при половине трафика, и заслуживает инвестиций в контент раньше, чем остальные. Версия с растущим спросом получает новые материалы первой, версия с нулевым интересом - выжидательный режим с минимальной поддержкой. Очевидная логика на практике требует одного - раздельной аналитики с первого дня. Измерение по языкам - единственный честный способ распределять бюджет между версиями.

Чек-лист зрелой многоязычности:

  1. каждая версия имеет уникальный адрес и симметричные alternates;
  2. выбор языка запоминается, путь сохраняется при переключении;
  3. геопредложения не форсируются, роботам редиректы не показываются;
  4. контент локализован по приоритетам, ключевые слова собраны заново;
  5. правки ходят пакетами по языкам, дрейф отслеживается календарём;
  6. автоматический перевод - черновик с вычиткой по матрице ниши;
  7. аналитика разделяет языки во всех отчётах без смешанных средних.

Многоязычный сайт в итоге строится не переводом, а дисциплиной: адреса, честные alternates, локализованный смысл, синхронные правки и раздельная аналитика. Команды, которые проходят весь этот список до запуска новой языковой версии, получают рынок; команды, которые переводят страницы и добавляют флаги, получают тихий архив неуваженных аудиторий - и разница между двумя этими судьбами видна уже в первом же квартале, когда поиск начинает честно спрашивать: а ты вообще с кем разговариваешь? И ответ на этот вопрос - вся многоязычная стратегия целиком.