Редирект по языку в SEO
Многие сайты делают так: заходят на страницу, а сервер смотрит на язык браузера и перекидывает человека на нужную языковую версию. Удобно для людей, но для поискового робота это катастрофа.
Робот приходит из дата-центра без
языковых настроек. Чаще всего он
видит "en-US" или вообще ничего.
И получает редирект не туда, куда
нужно. Или попадает в бесконечный
цикл редиректов и уходит ни с чем.
Давай посмотрим, как это выглядит в коде. Вот типичная серверная логика на псевдокоде:
if (browser_lang == "ru") {
redirect("/ru/")
} else {
redirect("/en/")
}
Робот заходит на /. Язык
браузера у него "en-US".
Его редиректят на /en/.
Русская версия /ru/ вообще
не обходится. В индексе только
английская. Русские пользователи
в поиске не находят сайт.
Хуже, если редирект завязан на
IP-адрес. Робот приходит с
американского IP, а сайт нужен
для России. Робот видит только
"en"-версию и не индексирует
основную.
Запомни правило: поисковый робот должен видеть ту страницу, которую ты хочешь показать в поиске. Никаких автоматических прыжков на основе языка или гео.
Как сделать правильно
Языковые версии должны быть доступны по своим адресам без редиректов. Каждая версия индексируется отдельно.
Вот правильная структура URL:
https://example.com/ru/
https://example.com/en/
https://example.com/de/
На каждой странице вешаем
link с атрибутом
rel="alternate" и
hreflang. Это говорит
роботу: вот та же страница
на другом языке.
<link rel="alternate" hreflang="ru" href="https://example.com/ru/">
<link rel="alternate" hreflang="en" href="https://example.com/en/">
<link rel="alternate" hreflang="de" href="https://example.com/de/">
Плюс ставим x-default для
страницы выбора языка или
основной версии:
<link rel="alternate" hreflang="x-default" href="https://example.com/">
Теперь робот обходит все версии. Никаких редиректов по языку браузера. Человек сам выберет язык через меню.
Что делать, если редирект уже стоит
Первое: убрать автоматический редирект по языку браузера или IP. Полностью.
Второе: проверить, как робот
видит сайт. Запроси страницу
с разными заголовками
Accept-Language.
curl -I -H "Accept-Language: en-US" https://example.com/
curl -I -H "Accept-Language: ru-RU" https://example.com/
Если ответы разные или есть
301 и 302 - редирект
на месте. Убирай.
Третье: настроить
hreflang для всех языковых
версий. И добавить их в
sitemap.xml.
Четвертое: если очень хочется подсказать язык - сделай баннер с предложением перейти на другую версию. Без редиректа. Робот баннер проигнорирует, человек - кликнет.
Вот пример баннера на HTML:
<div class="lang-banner">
<p>
Looks like you prefer English.
<a href="/en/">Go to English version</a>
</p>
</div>
Это безопасно для SEO и удобно для людей.
Практические задачи
Расскажите, почему редирект по языку браузера ломает обход роботом.
Дан код на сервере:
if (browser_lang == "ru") {
redirect("/ru/")
}
Что произойдет, когда робот
с языком "en-US" зайдет
на главную страницу?
Дана верстка:
<head>
<title>Example</title>
</head>
Добавьте теги link
с hreflang для
русской, английской и
немецкой версий.
Сайт уже использует редирект по языку браузера. Опишите по шагам, что нужно сделать, чтобы исправить ситуацию.
Как проверить через
командную строку, что
сервер редиректит по
заголовку Accept-Language?