Ошибки hreflang на сайтах RU/EN/AR: как найти и исправить

Чаще всего hreflang на сайтах RU/EN/AR ломают неверные коды языков, отсутствие обратных ссылок, canonical на английскую версию и ссылки на страницы с редиректом.

Опубликовано 9 мин чтения

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

Что hreflang делает и чего не делает

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

Отсюда первое правило: hreflang не исправит страницу с русским заголовком, английским меню и арабским футером. Поисковик сначала смотрит на содержимое и только потом на теги. Сам термин разобран в статье энциклопедии hreflang. Общее устройство сайта EN/AR/RU с hreflang и RTL описано в журнале Savage Media. Эта статья только об ошибках и о том, как их проверить.

Сколько сайтов в Дубае делают три языка

В исследовании Savage Media проверили 537 сайтов ресторанов и заведений Дубая, полностью разобрали 409. Арабская версия нашлась у 82 сайтов (20,0 %), русская у 50 (12,2 %), все три языка у 38 (9,3 %). Полные данные опубликованы в журнале Savage.

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

Масштаб задачи хорошо видно на двуязычных проектах. Сайт Moon Mars собран на EN и RU, в сборке 128 страниц. На Lucent Legal 213 гайдов на русском и 213 на английском. Моя позиция: на таком объёме связки между версиями нельзя поддерживать руками. Их должна генерировать сборка из одного списка соответствий «русская страница — английская страница». Иначе ошибки появятся уже на втором десятке страниц.

Ошибка 1. Неверные коды языка и региона

Код языка берут из стандарта ISO 639-1, код страны из ISO 3166-1 alpha-2. Код страны можно не указывать. Код языка обязателен и всегда стоит первым.

Типичные ошибки на сайтах в ОАЭ:

  • hreflang="ae". Подрядчик хотел указать Эмираты, но в ISO 639-1 «ae» означает авестийский язык. Регион AE пишут только после языка: ar-AE, en-AE.
  • hreflang="ar-UAE". Трёхбуквенный код страны не подходит, нужен двухбуквенный AE.
  • hreflang="en-UK". Великобритания в стандарте обозначена как GB, правильно en-GB.
  • hreflang="ru-RU" на сайте для русскоязычных жителей Дубая. Так вы сообщаете поисковику, что страница предназначена для России. Если аудитория живёт в ОАЭ, Казахстане и Европе, точнее написать просто ru.

Малому бизнесу в ОАЭ почти всегда хватает ru, en, ar без регионов. Регион нужен, когда у одной языковой версии есть варианты для разных стран с разными ценами, валютой или условиями.

Ошибка 2. Нет обратных ссылок и ссылки на себя

Каждая версия должна ссылаться на все остальные и на саму себя. Допустим, русская страница ссылается на английскую, а английская на русскую нет. Тогда Google вправе отбросить эту пару. В документации Google это называется возвратными ссылками (return links).

На всех трёх версиях одной страницы блок выглядит одинаково. Условный пример для сайта example.ae:

<link rel="alternate" hreflang="ru" href="https://example.ae/ru/uslugi/" />
<link rel="alternate" hreflang="en" href="https://example.ae/services/" />
<link rel="alternate" hreflang="ar" href="https://example.ae/ar/services/" />
<link rel="alternate" hreflang="x-default" href="https://example.ae/services/" />

Эти четыре строки должны стоять в коде русской, английской и арабской страницы. Слаги могут различаться (/ru/uslugi/ и /services/). Поисковик проверяет, что версии ссылаются друг на друга, совпадение адресов ему не нужно.

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

Ошибка 3. Canonical на английскую версию

Canonical сообщает, какой адрес считать основным среди дублей. Если плагин перевода или конструктор настроен неверно, он ставит на русской и арабской страницах canonical на английский оригинал. Поисковик получает противоречие. hreflang говорит: «это отдельная русская версия». Canonical говорит: «это копия английской, индексируй английскую».

Каждая языковая версия должна указывать canonical сама на себя: русская страница на русский адрес, арабская на арабский. Если в коде русской страницы canonical ведёт на /services/, русская версия рискует выпасть из выдачи целиком.

Ошибка 4. hreflang ведёт на редирект, 404 или noindex

В hreflang указывают только страницы, которые отвечают кодом 200, открыты для индексации и сами указаны в своём canonical. Чаще всего такие ссылки ломаются после редизайна или смены адресов. Например, старый /ru/menu/ теперь отдаёт редирект на /ru/menyu/, а hreflang по-прежнему ведёт на старый адрес.

Ещё три варианта этой ошибки:

  1. Арабскую версию закрыли noindex, пока доделывают, а hreflang на неё уже стоит.
  2. В ссылках указан http://, хотя сайт работает на https://, и каждая ссылка проходит через редирект.
  3. Адреса относительные (/ru/uslugi/). Google требует полные адреса с протоколом и доменом.

Ошибка 5. Нет x-default или он указывает не туда

x-default задаёт страницу, которую поисковик покажет человеку, чей язык не совпал ни с одной версией. Например, франкоязычному туристу, который ищет кафе в Дубай Марине. Обычно x-default ведёт на английскую версию или на страницу выбора языка.

Ошибок здесь две. Первая: x-default нет, и поисковик выбирает версию сам. Вторая: x-default указывает на русскую версию, потому что владелец считает её главной. Людей, которые не говорят ни по-русски, ни по-арабски, в ОАЭ лучше всего покрывает английский, поэтому x-default логичнее отдать ему.

Ошибка 6. Автопереадресация по IP или языку браузера

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

Как проверить за две минуты:

  1. Попросите подрядчика выполнить команду curl -I -H "Accept-Language: ar" https://ваш-сайт/ru/ или выполните её сами в терминале. Если в ответе код 301 или 302 и строка Location с другим языком, переадресация есть.
  2. Откройте русскую страницу через VPN с американским адресом. Если вас перебросило на /en/, бот видит то же самое.
  3. Спросите подрядчика прямо: «Отдаёт ли сайт разное содержимое или разные редиректы в зависимости от IP и Accept-Language?» Правильный ответ: «нет, у каждого языка свой постоянный адрес».

Вместо переадресации поставьте видимый переключатель языка в шапке. Можно добавить плашку «Эта страница есть на русском» со ссылкой. Тогда человек переходит сам, а адрес страницы для бота не меняется.

Арабская версия: что hreflang не исправит

С арабской версией чаще всего ошибаются вне hreflang, и тег эти проблемы не решает:

  • В теге html нет lang="ar" и dir="rtl". Текст выводится слева направо, знаки препинания уезжают в начало строки.
  • Цены в AED и телефоны в арабском тексте прыгают, потому что их не обернули как фрагменты, которые читаются слева направо.
  • Меню, кнопки и форма остались на английском. Поисковик видит смешанный язык, человек видит недоделанный сайт.
  • Текст переведён машиной без вычитки. Носитель языка видит это сразу, поэтому вычитку закладывают в бюджет до публикации.

Что переводить дословно, а что переписывать под аудиторию, разобрано в статье Версия на RU и EN: что переводить, а что переписывать.

Что не стоит делать

  • Не смешивайте способы разметки. hreflang можно указать в <head>, в HTTP-заголовках или в sitemap.xml. Если в head стоит один набор, а в sitemap другой, поисковик получает два противоречивых сигнала. Выберите один способ.
  • Не добавляйте hreflang ради «полноты» на страницы, у которых нет перевода.
  • Не ставьте на все три версии один общий canonical.
  • Не прячьте переключатель языка в JavaScript-меню, которое открывается только по клику, если в нём единственные ссылки на другие версии.
  • Не публикуйте арабскую версию одновременно с noindex и hreflang.
  • Не меняйте адреса страниц, не обновив в тот же день hreflang и sitemap.

Ошибки и как их найти

Ошибка Как выглядит в коде Как исправить
Неверный код ae, ar-UAE, en-UK ar, ar-AE, en-GB
Нет обратной ссылки на EN нет строки с hreflang="ru" одинаковый блок на всех версиях
Нет ссылки на себя на RU нет строки hreflang="ru" добавить самоссылку
Canonical на чужой язык на /ru/uslugi/ canonical /services/ canonical на себя
Цель не отвечает 200 ссылка ведёт на редирект или 404 указать конечный адрес
Цель в noindex арабская страница закрыта от индексации убрать hreflang или открыть страницу
Относительный адрес href="/ru/uslugi/" href="https://example.ae/ru/uslugi/"
Нет x-default только ru, en, ar добавить x-default на EN
Переадресация по языку 302 на /en/ при Accept-Language: en убрать редирект, оставить переключатель

Сайт на 10–20 страниц можно проверить вручную: откройте «Просмотр кода страницы» и найдите hreflang. Для сайта на сотни страниц нужен краулер с отчётом по hreflang. Отдельного отчёта по hreflang в Google Search Console сейчас нет. Зато в отчёте об индексации страниц есть статусы вроде «Страница является копией, канонический вариант выбран Google иначе», и по ним видно, какие языковые версии Google склеил. Как разложить страницы, чтобы языковые версии не путались, описано в статье Структура сайта для SEO. Сборка сайта с языковыми версиями с нуля описана на странице услуги по сайтам.

Короткий чек-лист

  1. Коды только из ISO: ru, en, ar. Регион, если нужен, пишется двумя буквами после дефиса (ar-AE).
  2. На каждой версии стоит один и тот же блок hreflang, включая ссылку на саму себя.
  3. Canonical каждой версии ведёт на собственный адрес.
  4. Все адреса в hreflang полные, на https://, без редиректов и открыты для индексации.
  5. Есть x-default, обычно на английскую версию.
  6. Разметка задана одним способом: в head или в sitemap, без смешивания.
  7. Нет принудительной переадресации по IP и языку браузера. Проверка: curl с Accept-Language возвращает 200.
  8. Арабская версия: есть lang="ar" и dir="rtl", переведены меню и форма, текст вычитан носителем.
  9. При смене адресов hreflang и sitemap обновляются в тот же день.
  10. Вопрос подрядчику до старта: «Откуда сборка берёт пары страниц для hreflang и что произойдёт, если я удалю перевод одной из них?» Хороший ответ: пары берутся из одного списка, а при удалении перевода строка сама пропадает со всех версий.

Вопросы и ответы

Нужен ли hreflang, если у сайта только русская и английская версии?

Да, если у страниц есть перевод на другой язык. Без hreflang Google может показать англоязычному человеку русскую страницу или склеить две версии как похожие. Для двух версий блок состоит из трёх строк: ru, en и x-default.

Писать en-AE или просто en?

Большинству бизнесов в ОАЭ хватит кодов без региона: ru, en, ar. Регион добавляют, когда у страницы есть отдельный вариант для другой страны с другими ценами, валютой или условиями.

Можно ли сделать арабскую версию автопереводом и прописать hreflang?

Технически можно, hreflang сработает. Но человек, который откроет такую страницу, увидит машинный текст и уйдёт. Поэтому до публикации отдайте арабскую версию на вычитку носителю.

Как проверить hreflang без программиста?

Откройте исходный код страницы и найдите строки с hreflang. Проверьте, что каждая ссылка открывается без редиректа, а на той странице есть такой же набор ссылок обратно. Для большого сайта используйте краулер, который строит отчёт по hreflang.