Настройка hreflang для мультиязычного сайта
hreflang сообщает Google, какая версия страницы предназначена для какого языка и региона. Без правильного hreflang поисковик показывает неверную языковую версию пользователям — русская версия ранжируется в Германии, английская — в России.
Синтаксис тегов
<!-- На каждой языковой версии страницы добавляются ВСЕ альтернативы -->
<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">
x-default — версия по умолчанию для пользователей, чей язык не совпадает ни с одним из указанных, или для страницы выбора языка.
Региональная специфика
Когда нужно разделять по стране, а не только по языку:
<link rel="alternate" hreflang="ru-RU" href="https://example.ru/products/laptop">
<link rel="alternate" hreflang="ru-UA" href="https://example.ua/ru/products/laptop">
<link rel="alternate" hreflang="ru-KZ" href="https://example.kz/products/laptop">
<link rel="alternate" hreflang="en-US" href="https://example.com/products/laptop">
<link rel="alternate" hreflang="en-GB" href="https://example.co.uk/products/laptop">
Реализация в Laravel
// 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'],
];
// В контроллере
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;
}
@foreach ($hreflangs as $lang => $url)
<link rel="alternate" hreflang="{{ $lang }}" href="{{ $url }}">
@endforeach
Hreflang в XML Sitemap
Альтернатива тегам в <head> — указать в sitemap. Удобнее для больших сайтов:
<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 для страны
Проверка
Google Search Console → Покрытие → проверить ошибки hreflang. Инструмент hreflang Tags Testing Tool (Merkle SEO) позволяет проверить правильность тегов на странице.
Срок настройки: 1–2 дня для мультиязычного сайта с несколькими доменами.







