Сайт на нескольких языках: как сделать и не потерять в поиске
У каждой языковой версии — свои адреса, например папка /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 и ссылку переключателя на перевод, которого ещё нет.