Ошибки hreflang на сайтах RU/EN/AR: как найти и исправить
Чаще всего hreflang на сайтах RU/EN/AR ломают неверные коды языков, отсутствие обратных ссылок, canonical на английскую версию и ссылки на страницы с редиректом.
Чаще всего 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 по-прежнему ведёт на старый адрес.
Ещё три варианта этой ошибки:
- Арабскую версию закрыли
noindex, пока доделывают, а hreflang на неё уже стоит. - В ссылках указан
http://, хотя сайт работает наhttps://, и каждая ссылка проходит через редирект. - Адреса относительные (
/ru/uslugi/). Google требует полные адреса с протоколом и доменом.
Ошибка 5. Нет x-default или он указывает не туда
x-default задаёт страницу, которую поисковик покажет человеку, чей язык не совпал ни с одной версией. Например, франкоязычному туристу, который ищет кафе в Дубай Марине. Обычно x-default ведёт на английскую версию или на страницу выбора языка.
Ошибок здесь две. Первая: x-default нет, и поисковик выбирает версию сам. Вторая: x-default указывает на русскую версию, потому что владелец считает её главной. Людей, которые не говорят ни по-русски, ни по-арабски, в ОАЭ лучше всего покрывает английский, поэтому x-default логичнее отдать ему.
Ошибка 6. Автопереадресация по IP или языку браузера
Некоторые сайты сами перебрасывают посетителя на «его» язык: по IP-адресу или по настройкам браузера. Google в документации о страницах, которые меняют язык под посетителя, пишет, что Googlebot сканирует в основном с адресов в США. Если сервер перенаправляет такого бота на английскую версию, русскую и арабскую он может не увидеть вовсе.
Как проверить за две минуты:
- Попросите подрядчика выполнить команду
curl -I -H "Accept-Language: ar" https://ваш-сайт/ru/или выполните её сами в терминале. Если в ответе код 301 или 302 и строкаLocationс другим языком, переадресация есть. - Откройте русскую страницу через VPN с американским адресом. Если вас перебросило на
/en/, бот видит то же самое. - Спросите подрядчика прямо: «Отдаёт ли сайт разное содержимое или разные редиректы в зависимости от 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. Сборка сайта с языковыми версиями с нуля описана на странице услуги по сайтам.
Короткий чек-лист
- Коды только из ISO:
ru,en,ar. Регион, если нужен, пишется двумя буквами после дефиса (ar-AE). - На каждой версии стоит один и тот же блок hreflang, включая ссылку на саму себя.
- Canonical каждой версии ведёт на собственный адрес.
- Все адреса в hreflang полные, на
https://, без редиректов и открыты для индексации. - Есть x-default, обычно на английскую версию.
- Разметка задана одним способом: в head или в sitemap, без смешивания.
- Нет принудительной переадресации по IP и языку браузера. Проверка: curl с
Accept-Languageвозвращает 200. - Арабская версия: есть
lang="ar"иdir="rtl", переведены меню и форма, текст вычитан носителем. - При смене адресов hreflang и sitemap обновляются в тот же день.
- Вопрос подрядчику до старта: «Откуда сборка берёт пары страниц для hreflang и что произойдёт, если я удалю перевод одной из них?» Хороший ответ: пары берутся из одного списка, а при удалении перевода строка сама пропадает со всех версий.
Вопросы и ответы
Нужен ли hreflang, если у сайта только русская и английская версии?
Да, если у страниц есть перевод на другой язык. Без hreflang Google может показать англоязычному человеку русскую страницу или склеить две версии как похожие. Для двух версий блок состоит из трёх строк: ru, en и x-default.
Писать en-AE или просто en?
Большинству бизнесов в ОАЭ хватит кодов без региона: ru, en, ar. Регион добавляют, когда у страницы есть отдельный вариант для другой страны с другими ценами, валютой или условиями.
Можно ли сделать арабскую версию автопереводом и прописать hreflang?
Технически можно, hreflang сработает. Но человек, который откроет такую страницу, увидит машинный текст и уйдёт. Поэтому до публикации отдайте арабскую версию на вычитку носителю.
Как проверить hreflang без программиста?
Откройте исходный код страницы и найдите строки с hreflang. Проверьте, что каждая ссылка открывается без редиректа, а на той странице есть такой же набор ссылок обратно. Для большого сайта используйте краулер, который строит отчёт по hreflang.