Przejdź do głównej treści
Fundament SEO wielojęzycznego

Tagi hreflang - kompletny przewodnik

Hreflang (rel="alternate" hreflang="xx") to atrybut HTML informujący wyszukiwarki o istnieniu alternatywnych wersji językowych lub regionalnych strony. Pozwala Google wyświetlać właściwą wersję użytkownikom w zależności od ich języka i lokalizacji.

Prawidłowa implementacja hreflang to fundament każdego projektu SEO wielojęzycznego. Bez niej wersje językowe konkurują ze sobą w wynikach, a użytkownicy trafiają na strony w niewłaściwym języku.

Przykład poprawnego hreflang:

<link rel="alternate"
  hreflang="pl"
  href="https://example.com/pl/" />
<link rel="alternate"
  hreflang="de"
  href="https://example.com/de/" />
<link rel="alternate"
  hreflang="en"
  href="https://example.com/en/" />
<link rel="alternate"
  hreflang="x-default"
  href="https://example.com/" />

Każda strona zawiera link do siebie i do wszystkich alternatyw, plus x-default.

Czym jest hreflang?

Hreflang to atrybut HTML (rel="alternate" hreflang="xx") stosowany w SEO wielojęzycznym, który informuje wyszukiwarki (Google, Yandex) o istnieniu alternatywnych wersji językowych lub regionalnych danej strony. Dzięki hreflang wyszukiwarka wie, którą wersję strony wyświetlić użytkownikowi z danego kraju lub posługującemu się danym językiem.

Google

Pełne wsparcie hreflang

Yandex

Pełne wsparcie hreflang

Bing

Preferuje content-language

Trzy metody implementacji hreflang

Google obsługuje trzy sposoby deklarowania hreflang. Wybierz jedną metodę i stosuj ją konsekwentnie. Nie mieszaj metod, chyba że zapewnisz pełną spójność.

HTML <head> tag

Rekomendowane dla: Małe i średnie serwisy

Tagi <link> umieszczone w sekcji <head> każdej strony. Najpopularniejsza i najłatwiejsza metoda. Każda strona musi zawierać linki do siebie i do wszystkich alternatyw.

Kod

<!-- Na stronie /pl/ -->
<link rel="alternate" hreflang="pl" href="https://example.com/pl/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />

Zalety

  • Prosta implementacja
  • Łatwe debugowanie w widoku źródła
  • Obsługiwana przez wszystkie CMS-y

Ograniczenia

  • Zwiększa rozmiar HTML przy wielu językach
  • Trzeba aktualizować na każdej stronie

HTTP header

Rekomendowane dla: Pliki PDF, dokumenty

Hreflang przekazywany w nagłówku HTTP Link. Jedyna metoda dla plików nie-HTML (PDF, dokumenty). Wymaga dostępu do konfiguracji serwera.

Kod

Link: <https://example.com/pl/dokument.pdf>; rel="alternate"; hreflang="pl",
      <https://example.com/en/document.pdf>; rel="alternate"; hreflang="en",
      <https://example.com/de/dokument.pdf>; rel="alternate"; hreflang="de",
      <https://example.com/document.pdf>; rel="alternate"; hreflang="x-default"

Zalety

  • Jedyna opcja dla nie-HTML
  • Nie zwiększa rozmiaru strony
  • Obsługiwana przez CDN

Ograniczenia

  • Wymaga dostępu do serwera
  • Trudniejsze debugowanie
  • Nie wszystkie CMS-y wspierają

XML sitemap

Rekomendowane dla: Duże serwisy (1000+ stron)

Hreflang zdefiniowany w pliku sitemap.xml za pomocą znaczników xhtml:link. Google rekomenduje tę metodę dla dużych serwisów. Łatwiejsze zarządzanie i aktualizacja.

Kod

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:xhtml="http://www.w3.org/1999/xhtml">
  <url>
    <loc>https://example.com/pl/produkt</loc>
    <xhtml:link rel="alternate" hreflang="pl"
                href="https://example.com/pl/produkt"/>
    <xhtml:link rel="alternate" hreflang="en"
                href="https://example.com/en/product"/>
    <xhtml:link rel="alternate" hreflang="de"
                href="https://example.com/de/produkt"/>
    <xhtml:link rel="alternate" hreflang="x-default"
                href="https://example.com/product"/>
  </url>
</urlset>

Zalety

  • Skalowalne dla dużych serwisów
  • Centralne zarządzanie
  • Nie obciąża HTML

Ograniczenia

  • Wolniejsze przetwarzanie przez Google
  • Wymaga aktualizacji sitemap
  • Debugowanie wymaga crawla

Kody języków i regionów

Hreflang używa kodów ISO 639-1 (język) i opcjonalnie ISO 3166-1 Alpha-2 (region). Kod regionu dopisz po myślniku, gdy ta sama treść docelowa różni się w zależności od kraju.

Kod hreflangJęzykRegionPrzykład
plpolski---hreflang="pl"
enangielski---hreflang="en"
deniemiecki---hreflang="de"
frfrancuski---hreflang="fr"
eshiszpański---hreflang="es"
itwłoski---hreflang="it"
pt-BRportugalskiBrazyliahreflang="pt-BR"
pt-PTportugalskiPortugaliahreflang="pt-PT"
en-GBangielskiWielka Brytaniahreflang="en-GB"
en-USangielskiUSAhreflang="en-US"
zh-Hanschińskiuproszczonyhreflang="zh-Hans"
zh-Hantchińskitradycyjnyhreflang="zh-Hant"
nlniderlandzki---hreflang="nl"
csczeski---hreflang="cs"
svszwedzki---hreflang="sv"
ukukraiński---hreflang="uk"

Typowe pomyłki z kodami

  • uk to ukraiński, nie angielski brytyjski (użyj en-GB)
  • jp nie istnieje, prawidłowo: ja (japoński)
  • cz nie istnieje, prawidłowo: cs (czeski)
  • • Nie można użyć samego kodu regionu (np. BR) bez kodu języka

Co to jest x-default?

Specjalna wartość hreflang wskazująca wersję strony dla użytkowników, których język lub region nie jest pokryty przez pozostałe tagi hreflang.

Kiedy używać x-default?

  • Masz stronę z wyborem języka (language selector page)
  • Chcesz wskazać wersję fallback (np. angielską) dla nieobsługiwanych języków
  • Masz automatyczne przekierowanie na podstawie geolokalizacji
  • Zawsze, gdy masz więcej niż jedną wersję językową

Składnia x-default

<!-- Kompletny zestaw hreflang -->
<link rel="alternate" hreflang="pl"
  href="https://example.com/pl/" />
<link rel="alternate" hreflang="en"
  href="https://example.com/en/" />
<link rel="alternate" hreflang="de"
  href="https://example.com/de/" />
<link rel="alternate"
  hreflang="x-default"
  href="https://example.com/" />

x-default może wskazywać na stronę wyboru języka lub na wersję angielską jako fallback.

Linki zwrotne (reciprocal links)

Hreflang wymaga wzajemności. Jeśli strona A deklaruje B jako alternatywę, strona B musi deklarować A. Brak wzajemności to najczęstsza przyczyna ignorowania hreflang przez Google.

Poprawnie: wzajemne linki

Strona /pl/ zawiera:

<link rel="alternate" hreflang="pl"
  href="https://example.com/pl/" />
<link rel="alternate" hreflang="en"
  href="https://example.com/en/" />

Strona /en/ zawiera:

<link rel="alternate" hreflang="pl"
  href="https://example.com/pl/" />
<link rel="alternate" hreflang="en"
  href="https://example.com/en/" />

Niepoprawnie: brak wzajemności

Strona /pl/ zawiera:

<link rel="alternate" hreflang="pl"
  href="https://example.com/pl/" />
<link rel="alternate" hreflang="en"
  href="https://example.com/en/" />

Strona /en/ zawiera:

<!-- BRAK hreflang! -->
<!-- Google ignoruje deklarację
     ze strony /pl/ -->

Zasada: Każda strona w zestawie hreflang musi zawierać identyczny zestaw tagów hreflang, w tym link do siebie samej (self-referencing). Wystarczy, że jeden tag brakuje na jednej stronie, a Google może zignorować cały zestaw.

8 najczęstszych błędów hreflang

Na podstawie audytów setek stron wielojęzycznych. Każdy z tych błędów może spowodować, że Google zignoruje Twoje tagi hreflang.

1

Brak linków zwrotnych (reciprocal links)

Krytyczny

Strona /pl/ wskazuje na /en/, ale /en/ nie wskazuje z powrotem na /pl/. Google ignoruje jednokierunkowe deklaracje hreflang. To najczęstsza przyczyna nieprawidłowego działania hreflang.

Upewnij się, że każda para stron wskazuje na siebie nawzajem. Użyj Screaming Frog do walidacji wzajemności.

2

Brak self-referencing hreflang

Krytyczny

Strona nie zawiera hreflang wskazującego na siebie samą. Google wymaga, aby każda strona miała link hreflang do własnego URL. Bez tego cały zestaw hreflang może zostać zignorowany.

Każda strona musi zawierać tag hreflang z własnym URL i kodem języka.

3

Nieprawidłowe kody języków

Krytyczny

Użycie nieprawidłowych kodów, np. 'uk' oznacza ukraiński (nie angielski brytyjski), 'jp' nie istnieje (prawidłowo: 'ja'), 'cz' nie istnieje (prawidłowo: 'cs'). Google ignoruje nieprawidłowe kody.

Używaj wyłącznie kodów ISO 639-1 dla języka i ISO 3166-1 Alpha-2 dla regionu.

4

Hreflang wskazujący na redirect lub 4xx

Wysoki

Tag hreflang prowadzi do strony zwracającej kod 301, 302, 404 lub 500. Google nie podąża za przekierowaniami w kontekście hreflang i ignoruje taki tag.

Wszystkie URL w hreflang muszą zwracać status 200. Regularnie waliduj linki.

5

Konflikt hreflang z canonical

Wysoki

Canonical strony /de/produkt wskazuje na /en/product (cross-language canonical), podczas gdy hreflang deklaruje /de/produkt jako wersję niemiecką. Google otrzymuje sprzeczne sygnały.

Canonical musi być self-referencing. Canonical i hreflang muszą być ze sobą spójne.

6

Brak x-default

Wysoki

Zestaw hreflang nie zawiera wartości x-default. Użytkownicy z nieobsługiwanym językiem mogą nie zobaczyć żadnej wersji strony w wynikach lub zobaczyć losową wersję.

Dodaj x-default wskazujący na wersję fallback lub stronę wyboru języka.

7

Mieszanie metod implementacji

Średni

Hreflang zdefiniowany jednocześnie w HTML head i XML sitemap z różnymi wartościami. Google może otrzymać niespójne sygnały i wybrać nieprzewidywalnie.

Wybierz jedną metodę implementacji i stosuj ją konsekwentnie. Jeśli używasz obu, zapewnij pełną spójność.

8

Hreflang bez pełnego URL

Średni

Użycie URL relatywnych (np. /pl/produkt) zamiast absolutnych (https://example.com/pl/produkt). Google wymaga pełnych, absolutnych URL w tagach hreflang.

Zawsze używaj pełnych URL z protokołem (https://) w atrybucie href.

Hreflang w popularnych CMS-ach

Każda platforma obsługuje hreflang inaczej. Sprawdź, co oferuje Twój CMS i co wymaga dodatkowej konfiguracji.

WordPress + WPML

Automatyczne
Więcej

WPML generuje tagi hreflang automatycznie w sekcji head. Obsługuje x-default, self-referencing i warianty regionalne. Integracja z Yoast SEO i Rank Math. Sprawdź ustawienia w WPML > Języki > Opcje SEO.

WordPress + Polylang

Automatyczne (Pro zalecane)
Więcej

Polylang Free generuje podstawowe hreflang. Polylang Pro dodaje wsparcie x-default i zaawansowane opcje regionalne. Integracja z Yoast SEO przez Polylang for Yoast SEO (addon).

Shopify Markets

Automatyczne z ograniczeniami
Więcej

Shopify Markets generuje hreflang automatycznie dla skonfigurowanych rynków. Problemy: aplikacje tłumaczeniowe (Weglot, Langify) mogą generować duplikaty. Zweryfikuj za pomocą Screaming Frog po każdej zmianie konfiguracji.

WooCommerce + WPML

Automatyczne przez WPML
Więcej

WPML WooCommerce Multilingual obsługuje hreflang dla produktów, kategorii i stron sklepowych. Uwaga na produkty z wariantami i paginację. Sprawdź, czy hreflang pojawia się na stronach koszyka i realizacji zamówienia.

Magento / Adobe Commerce

Natywne wsparcie
Więcej

Magento obsługuje hreflang przez Store Views. Wymaga konfiguracji w Stores > Configuration > General > Web. Rozszerzenie Hreflang Tags by Amasty daje pełną kontrolę nad tagami.

Headless CMS (Next.js, Nuxt, Gatsby)

Ręczna implementacja
Więcej

W Next.js: metadata API z alternates.languages. W Nuxt: useHead() z hreflang w link array. Hreflang musi być renderowany server-side (SSR/SSG). Client-side injection nie jest indeksowany przez Google.

Narzędzia do audytu hreflang

Waliduj implementację hreflang regularnie, szczególnie po zmianach w strukturze serwisu lub dodaniu nowych języków.

Google Search Console

Raport International Targeting pokazuje błędy hreflang. URL Inspection weryfikuje indeksację poszczególnych stron.

Screaming Frog SEO Spider

Zakładka Hreflang: pełna walidacja wzajemności linków, brakujące tagi, nieprawidłowe kody. Najlepsze narzędzie do audytu.

Ahrefs Site Audit

Automatyczne wykrywanie błędów hreflang na dużą skalę. Raporty missing return links i inconsistent hreflang.

hreflang.org

Darmowy walidator online. Wklej URL i sprawdź poprawność tagów hreflang na pojedynczej stronie.

Merkle hreflang tag generator

Generuje poprawne tagi hreflang na podstawie listy URL i kodów języków. Idealne przy ręcznej implementacji.

Sitebulb

Wizualizacja relacji hreflang jako grafów. Łatwe wykrywanie brakujących połączeń i niespójności.

Jak wdrażamy hreflang

6-etapowy proces implementacji hreflang na stronach wielojęzycznych.

1

Inwentaryzacja wersji językowych

Mapujemy wszystkie wersje językowe i regionalne serwisu. Identyfikujemy pary stron, strony bez odpowiedników, i ustalamy wersję x-default.

2

Wybór metody implementacji

Na podstawie rozmiaru serwisu, CMS-a i architektury wybieramy optymalną metodę: HTML head, HTTP header lub XML sitemap.

3

Generowanie tagów hreflang

Przygotowujemy kompletny zestaw tagów dla każdej strony: self-referencing, alternatywy językowe i x-default. Walidujemy kody ISO.

4

Wdrożenie i konfiguracja CMS

Implementujemy hreflang w wybranej metodzie. Konfigurujemy plugin/moduł CMS lub wdrażamy ręcznie w szablonach. Testujemy na próbce stron.

5

Walidacja wzajemności linków

Crawlujemy cały serwis Screaming Frog. Weryfikujemy, że każda para stron ma wzajemne linki hreflang, canonical jest spójny, a wszystkie URL zwracają 200.

6

Monitoring i raportowanie

Sprawdzamy GSC International Targeting i URL Inspection. Monitorujemy indeksację wersji językowych przez 4-6 tygodni. Raportujemy wyniki.

Hreflang, canonical i sitemap

Te trzy elementy muszą ze sobą współgrać. Niespójność między nimi to częsta przyczyna problemów z indeksacją wersji językowych.

Hreflang

Mówi: "ta strona istnieje w tych wersjach językowych". Wymaga wzajemności linków i self-referencing.

rel="alternate" hreflang="xx"

Canonical

Mówi: "to jest preferowana wersja tego URL". Musi być self-referencing na stronach wielojęzycznych. Nie wskazuj canonical na inny język.

rel="canonical"

Sitemap

Może zawierać hreflang (xhtml:link) i URL kanoniczne. URL w sitemap muszą być identyczne z URL w hreflang i canonical.

xhtml:link rel="alternate"

Poprawny zestaw na jednej stronie (/de/produkt):

<!-- Canonical: self-referencing -->
<link rel="canonical" href="https://example.com/de/produkt" />

<!-- Hreflang: self + alternatywy + x-default -->
<link rel="alternate" hreflang="de" href="https://example.com/de/produkt" />
<link rel="alternate" hreflang="pl" href="https://example.com/pl/produkt" />
<link rel="alternate" hreflang="en" href="https://example.com/en/product" />
<link rel="alternate" hreflang="x-default" href="https://example.com/product" />

Canonical wskazuje na siebie, hreflang zawiera siebie i wszystkie alternatywy, URL kanoniczny i URL w hreflang de są identyczne.

Potrzebujesz wdrożenia hreflang?

Wyślij link do strony wielojęzycznej. Sprawdzimy konfigurację hreflang, wzajemność linków i spójność z canonical. Bezpłatna wstępna analiza.