Выход на новый языковой рынок часто представляется простым переводом страниц: взяли страницы, прогнали через перевод, добавили переключатель флагов - готово. Через первый квартал эксплуатации выясняется, что ничего не готово: поиск показывает немецкую версию французам, переключатель языков ведёт себя непредсказуемо, а аналитика смешала три разные аудитории в одну кашу. Многоязычный сайт - это отдельная инженерная и контентная дисциплина, где адресация, локализация и структура решают больше, чем сам факт наличия переводов.
Техническая основа многоязычности при этом известна и стабильна годами: у каждой языковой версии свой адрес, своя разметка 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
непереведённые изменения: пометка в календаре, срок вычитки
Автоматический перевод при этом занимает честное место черновика: он ускоряет пакетное обновление, но не заменяет вычитку. Команда определяет допустимую глубину автоматизации по нише: развлекательный блог вычитывает выборочно, медицинские и юридические страницы - всегда, потому что цена ошибки несоизмерима с экономией.
Аналитика многоязычного сайта разделяется по языкам во всех отчётах: конверсия, поведение, поисковый спрос. Смешанные средние прячут самые ценные находки - например, что немецкая версия конвертирует вдвое лучше при половине трафика, и заслуживает инвестиций в контент раньше, чем остальные. Версия с растущим спросом получает новые материалы первой, версия с нулевым интересом - выжидательный режим с минимальной поддержкой. Очевидная логика на практике требует одного - раздельной аналитики с первого дня. Измерение по языкам - единственный честный способ распределять бюджет между версиями.
Чек-лист зрелой многоязычности:
- каждая версия имеет уникальный адрес и симметричные alternates;
- выбор языка запоминается, путь сохраняется при переключении;
- геопредложения не форсируются, роботам редиректы не показываются;
- контент локализован по приоритетам, ключевые слова собраны заново;
- правки ходят пакетами по языкам, дрейф отслеживается календарём;
- автоматический перевод - черновик с вычиткой по матрице ниши;
- аналитика разделяет языки во всех отчётах без смешанных средних.
Многоязычный сайт в итоге строится не переводом, а дисциплиной: адреса, честные alternates, локализованный смысл, синхронные правки и раздельная аналитика. Команды, которые проходят весь этот список до запуска новой языковой версии, получают рынок; команды, которые переводят страницы и добавляют флаги, получают тихий архив неуваженных аудиторий - и разница между двумя этими судьбами видна уже в первом же квартале, когда поиск начинает честно спрашивать: а ты вообще с кем разговариваешь? И ответ на этот вопрос - вся многоязычная стратегия целиком.