Обсудить проект

8 мин чтения

Сайт на нескольких языках: как сделать и не потерять в поиске

У каждой языковой версии — свои адреса, например папка /en/, связь через hreflang и свои заголовки, а язык посетитель выбирает сам, без переадресации по IP.

Чтобы сайт на нескольких языках находили в поиске, у каждой языковой версии должны быть свои адреса — например, английская живёт в папке /en/, — а не одна страница, где текст меняется по кнопке. Версии связывают разметкой hreflang, у каждой свои заголовки и описания, а язык посетитель выбирает сам, без автоматической переадресации. Разберём структуру адресов, разметку, переключатель и перевод.

Почему каждому языку нужны свои адреса

Поисковик индексирует страницы по адресам. Если по одному адресу показывается то русский, то английский текст — в зависимости от кнопки, cookie или настроек браузера, — робот увидит одну версию, обычно язык по умолчанию. Второго языка для поиска просто не существует. Google прямо рекомендует давать каждой языковой версии свой адрес, а не менять язык через cookie или настройки браузера.

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

Так устроен и наш сайт: русская версия — в корне, английская — в папке /en/. Даже там, где переключатель в шапке меняет текст без перезагрузки, вместе с текстом меняется и адрес страницы.

Папки, поддомены или отдельные домены

Разделить версии можно тремя способами. Есть и четвёртый — параметр в адресе вроде ?lang=en, — но его Google не рекомендует.

Вариант Пример Плюсы Минусы Когда подходит
Папки brand.ru/en/ Проще всего настроить и поддерживать: один сайт, одна система управления, одна аналитика Все версии живут на одном сервере и одной платформе Сайт компании, услуги, портфолио — большинство случаев
Поддомены en.brand.ru Версии можно держать на разных серверах и платформах Больше настроек: в сервисах для вебмастеров и в аналитике поддомен часто добавляют как отдельный сайт Версии ведут разные команды или они устроены по-разному
Отдельные домены brand.de Сразу понятно, для какой страны сайт; версии полностью независимы Дороже: несколько доменов и сайтов; у национальных зон бывают свои требования к владельцу У каждой страны свой ассортимент, цены и юрлицо

Для языковой версии сайта компании почти всегда хватает папки. Если версия нужна не для языка, а для страны — с другими ценами и условиями доставки, — это уже региональная версия: ей указывают и язык, и регион, например en-GB для Великобритании. О выборе самого адреса — в статье как выбрать домен.

Как связать версии: hreflang и x-default

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

В <head> каждой версии перечисляют все версии страницы, включая её саму, — строками вида <link rel="alternate" hreflang="en" href="полный адрес английской версии">. Правила такие:

  • Ссылки взаимные. Если русская страница указывает на английскую, английская должна указывать на русскую, иначе Google может проигнорировать разметку.
  • Коды — по стандартам. Язык — по ISO 639-1: ru, en, de. Регион добавляют через дефис по ISO 3166-1: en-GB, en-US. Код страны вместо кода языка — частая ошибка.
  • Адреса — полные и канонические. В hreflang ставят тот же адрес, что в canonical этой версии, а canonical каждой версии ведёт на неё саму. Если английская страница назовёт основной русскую, поисковик может счесть её дублем.
  • Только существующие переводы. Нет перевода — нет и hreflang. У нас так и сделано: статья без перевода не получает этой разметки, а переключатель с неё ведёт в раздел статей на другом языке.

x-default — адрес для всех, чей язык не нашёлся среди версий: обычно основная версия или страница выбора языка. Яндекс советует помечать так и страницу, которая определяет язык автоматически — по IP или настройкам браузера. На нашем сайте x-default ведёт на русскую версию.

Google понимает hreflang в HTML, в HTTP-заголовках и в карте сайта. Яндекс языковые версии в файле Sitemap больше не поддерживает и рекомендует разметку в коде страниц, так что надёжнее всего — теги <link> в HTML.

Атрибут lang у тега <html> Google для определения языка не использует — он смотрит на видимый текст страницы. Но атрибут всё равно нужен: по нему браузер предлагает перевод, а программы экранного доступа читают текст с правильным произношением.

Переключатель языка без переадресации по IP

Соблазнительно определить страну по IP-адресу и сразу отправить посетителя на «его» язык. Google советует так не делать: автоматическая переадресация может помешать и людям, и роботам увидеть другие версии. К тому же большая часть обходов Google идёт с адресов в США, и робот, которого перебрасывают по IP, рискует видеть только английскую версию.

Да и язык IP-адрес угадывает плохо: русскоязычный человек может жить за границей, иностранец — приехать в командировку, а VPN меняет страну одним нажатием. Удобнее так:

  • Переключатель на видном месте — обычно в шапке, на каждой странице.
  • Названия языков — на самих языках: «Русский», «English» или коротко RU / EN. Флаги — плохая замена: флаг обозначает страну, а на одном языке говорят в разных странах.
  • Ссылка ведёт на ту же страницу на другом языке, а не на главную. Если перевода нет — в ближайший раздел, но не на ошибку 404.
  • Подсказка вместо переадресации. Если язык браузера не совпадает с языком страницы, можно показать плашку «This page is available in English», которую легко закрыть, — и больше не показывать её тому, кто уже выбрал язык.

Перевод и локализация: что меняется, кроме слов

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

  • Даты. По-русски 03.04 — это 3 апреля, а в США запись 03/04 прочитают как 4 марта. Надёжнее писать месяц словом.
  • Числа и цены. В русском тексте дробную часть отделяют запятой, в английском — точкой, а запятой там разделяют разряды. Цены — в валюте, в которой клиент платит.
  • Единицы. Метры и килограммы понятны почти везде, но в США привычнее дюймы и фунты.
  • Формы. Телефон — с выбором кода страны, а не с маской, рассчитанной только на +7. Поле «Отчество» иностранцу заполнить нечем, а у адреса в других странах свои поля.
  • Вёрстка. Перевод бывает длиннее оригинала: заголовки, кнопки и меню проверяют на каждом языке, особенно на телефоне.
  • Мелкие тексты — подсказки, сообщения об ошибках, письма после заявки, подписи и alt у картинок. Их забывают чаще всего.
  • Документы. Политика обработки персональных данных и согласие нужны на каждом языке; для зарубежной аудитории могут действовать свои требования — сверьтесь с юристом.

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

Заголовки, описания и карта сайта для каждой версии

Каждая языковая версия — полноценная страница для поиска:

  • свои title и description на языке версии, с запросами, по которым ищут на этом языке;
  • свой h1 и тексты, без русских заголовков над английским текстом;
  • адреса, понятные на языке версии: /en/services/, а не /en/uslugi/;
  • Open Graph — заголовок, описание и картинка для превью ссылки на нужном языке;
  • микроразметка — название, описание и контакты на языке страницы.

В карту сайта sitemap.xml включают все языковые версии. Google может прочитать связи hreflang и из неё, но для Яндекса этого мало — разметка в HTML нужна в любом случае. Остальная база — robots.txt, canonical, перенаправления — та же, что у любого сайта; её удобно сверить с SEO-чек-листом перед запуском.

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

Частые ошибки

  • Один адрес на все языки: язык хранится в cookie или меняется кнопкой без смены адреса.
  • Автоматическая переадресация по IP или языку браузера.
  • hreflang без обратных ссылок или с ошибкой в коде: en-UK вместо en-GB, jp вместо ja.
  • Canonical всех версий ведёт на русскую.
  • Машинный перевод без вычитки, непереведённые кнопки, ошибки форм и письма.
  • Флаги вместо названий языков.
  • Переключатель ведёт на главную, а не на ту же страницу.
  • hreflang на страницы, которых нет или которые закрыты от индексации.

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

(Вопросы)

Частые вопросы

Что лучше для языковых версий: папки, поддомены или отдельные домены?

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

Учитывает ли Яндекс атрибут hreflang?

Да, Яндекс учитывает hreflang в коде страниц и поддерживает значение x-default. А языковые версии в файле Sitemap он больше не поддерживает, поэтому связи версий надёжнее указывать в HTML.

Можно ли перевести сайт машинным переводом?

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

Нужно ли автоматически перенаправлять посетителя на его язык?

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

Нужно ли переводить весь сайт сразу?

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

(Читать дальше)

Ещё статьи

Все статьи →
  1. Форма заявки на сайте: как сделать, чтобы её заполняли

    Форму заполняют, когда в ней мало полей, понятная кнопка и ясно, что будет дальше. Заявки не теряются, если идут в два канала, а форму регулярно проверяют.

    Разработка
  2. Как выбрать домен для сайта

    Хороший домен короткий, пишется так, как слышится, и легко диктуется по телефону. Разбираем зоны .ru, .рф и .com, проверку истории и продление.

    Разработка
  3. Техническое задание на сайт: что в нём писать

    ТЗ описывает, что и как работает на сайте: страницы, сценарии, формы, интеграции, требования и критерии приёмки. Разбираем состав и когда хватит брифа.

    Разработка