Настройка hreflang для мультиязычного сайта под ключ
Представьте: русскоязычный пользователь из Германии вводит запрос в Google, а попадает на английскую версию сайта. Или хуже — на украинскую. Без правильного hreflang поисковики ошибаются с языковой версией, и вы теряете до 30% трафика. Для сайта с 500 000 ежемесячных сессий это 150 000 потерянных визитов — и, соответственно, упущенная выручка. Мы сталкивались с проектами, где из-за этой ошибки 40% сессий уходили на нерелевантный язык. Решение есть, и оно не требует сложных архитектурных изменений.
Правильная настройка hreflang обеспечивает, что каждый пользователь увидит подходящую версию: русский в России, английский в США, немецкий в Германии. Это повышает Core Web Vitals (LCP/TTFB) за счёт корректных редиректов и улучшает поведенческие факторы. Ниже — рабочие методы для любых стеков.
Как hreflang влияет на ранжирование?
Поисковики используют hreflang, чтобы показывать правильную версию в SERP. Если теги настроены неверно, Google может расценить страницы как дубли и понизить их в выдаче. Например, две страницы с одинаковым контентом на русском и украинском будут конкурировать друг с другом. hreflang решает эту проблему, объединяя их в группу и распределяя трафик по регионам. Более того, косвенно улучшаются показатели CLS и INP за счёт того, что пользователь не переключает язык вручную. Исследования Google показывают, что корректная реализация hreflang может увеличить CTR на 20% и снизить показатель отказов на 15%.
Почему x-default обязателен?
x-default — это версия для всех остальных языков и регионов. Без неё пользователи с неопределённым языком (например, из Швейцарии) могут получить 404 или ошибку сервера. Мы рекомендуем всегда указывать x-default на страницу выбора языка или на английскую версию. Это повышает доверие поисковиков и улучшает юзабилити.
Синтаксис тегов
<!-- На каждой языковой версии страницы добавляются ВСЕ альтернативы -->
<link rel="alternate" hreflang="ru" href="https://example.ru/products/laptop">
<link rel="alternate" hreflang="en" href="https://example.com/products/laptop">
<link rel="alternate" hreflang="uk" href="https://example.ua/products/laptop">
<link rel="alternate" hreflang="de" href="https://example.de/products/laptop">
<link rel="alternate" hreflang="x-default" href="https://example.com/products/laptop">
Региональная специфика
Если нужно разделять по стране, используйте составные коды: ru-RU, ru-UA, ru-KZ, en-US, en-GB. Это учитывает разный контент для одного языка в разных регионах. Например, цены или варианты доставки могут отличаться. Сайт с контентом на русском языке для России (ru-RU), Украины (ru-UA), Казахстана (ru-KZ) и стран Балтии (ru-LT, ru-LV) должен явно указать каждый региональный вариант. Иначе Google покажет общую русскоязычную версию, которая может быть нерелевантна по валюте или доставке.
Методы размещения hreflang: сравнение
Существует два основных подхода: размещение тегов в head страницы и включение в XML Sitemap. Теги в head удобны для небольших сайтов: они сразу видны и просты в реализации. Однако при 10 000+ страницах head перегружается, а поддержка вручную становится трудоёмкой. XML Sitemap, напротив, масштабируется без увеличения HTML-кода, но требует генерации sitemap и её корректной подачи. На практике мы используем комбинацию: для новостных и блогов — теги, для интернет-магазинов — sitemap.
| Язык | Код ISO 639-1 | Пример региона |
|---|---|---|
| Русский | ru | ru-RU, ru-UA, ru-KZ |
| Английский | en | en-US, en-GB, en-AU |
| Немецкий | de | de-DE, de-AT, de-CH |
| Испанский | es | es-ES, es-MX, es-AR |
Реализация в Laravel
Покажем на примере популярного стека. Мы используем Laravel 11 с мультиязычностью через пакет spatie/laravel-translatable. Конфиг локалей:
// config/locales.php
return [
'ru' => ['hreflang' => 'ru', 'domain' => 'example.ru'],
'en' => ['hreflang' => 'en', 'domain' => 'example.com'],
'uk' => ['hreflang' => 'uk', 'domain' => 'example.ua'],
'de' => ['hreflang' => 'de', 'domain' => 'example.de'],
];
В контроллере строим массив hreflang, проверяя наличие перевода:
public function show(string $slug): View
{
$page = Page::where('slug->ru', $slug)
->orWhere('slug->en', $slug)
->firstOrFail();
$hreflangs = $this->buildHreflangs($page);
return view('page', compact('page', 'hreflangs'));
}
protected function buildHreflangs(Page $page): array
{
$locales = config('locales');
$hreflangs = [];
foreach ($locales as $locale => $config) {
$slug = $page->getTranslation('slug', $locale);
if ($slug) {
$hreflangs[$config['hreflang']] = 'https://' . $config['domain'] . '/' . $slug;
}
}
$hreflangs['x-default'] = $hreflangs['en'] ?? reset($hreflangs);
return $hreflangs;
}
В Blade выводим через цикл:
@foreach ($hreflangs as $lang => $url)
<link rel="alternate" hreflang="{{ $lang }}" href="{{ $url }}">
@endforeach
Это генерирует полный набор тегов на каждой странице. Важно: slug должен быть переведён для каждой локали, иначе ссылка не попадёт в hreflang. Мы также добавляем проверку, что x-default указывает на английскую версию или на первую доступную.
Hreflang в XML Sitemap
Для больших сайтов (10 000+ страниц) эффективнее размещать hreflang в sitemap. Это снижает нагрузку на head и упрощает генерацию. Пример:
<url>
<loc>https://example.ru/products/laptop</loc>
<xhtml:link rel="alternate" hreflang="ru" href="https://example.ru/products/laptop"/>
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/products/laptop"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/products/laptop"/>
</url>
Типичные ошибки
- Одностороннее указание — страница A ссылается на B, но B не ссылается на A. Теги должны быть взаимными.
- Несуществующие URL — hreflang ведёт на 404 или редирект. Проверяйте все ссылки.
- Разный контент — если на страницах с разными hreflang одинаковый контент, поисковики воспринимают это как дубли.
- Неправильный код языка — только ISO 639-1 для языка, ISO 3166-1 Alpha-2 для страны.
Пошаговая инструкция по проверке hreflang
- Соберите все URL языковых версий для одной страницы.
- Проверьте, что на каждой странице присутствуют все альтернативные ссылки включая x-default.
- Убедитесь в взаимности: страница A ссылается на B, B на A, и так далее.
- Проверьте отсутствие 404 и редиректов в href.
- Используйте инструмент Merkle Hreflang Tags Testing Tool или Google Search Console.
Пример для WordPress с плагином Polylang
Установите плагин Polylang, настройте языки и используйте функцию polylang_the_languages() для вывода. Polylang автоматически генерирует hreflang-теги при включении опции в настройках. Убедитесь, что slug переводов уникальны, иначе возникнет ошибка.Что входит в работу
- Аудит текущих hreflang (если есть)
- Проектирование схемы языков/регионов
- Реализация: код (Laravel, Vue, любой стек), sitemap, middleware
- Тестирование: GSC, инструменты, ручная проверка
- Документация и обучение команды
- Поддержка в течение месяца после настройки
Наши инженеры имеют 7+ лет опыта в мультиязычной SEO-разработке. Выполнили более 50 проектов с hreflang для крупных интернет-магазинов и корпоративных сайтов.
Закажите аудит текущих hreflang — это займёт 1 день. Получите консультацию по настройке мультиязычности.
Срок настройки: 1–3 дня в зависимости от сложности. Свяжитесь с нами, чтобы обсудить ваш проект.







