Налаштування 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 → Coverage → перевірте помилки hreflang. hreflang Tags Testing Tool (Merkle SEO) дозволяє перевірити коректність тегів на сторінці.
Час налаштування: 1–2 дні для багатомовного сайту з кількома доменами.







