Hreflang Validator
Sprawdź poprawność oznaczeń hreflang i wzajemnych linków między wersjami językowymi.
Hreflang Validator — kontrola alternate i reciprocal
Sprawdź hreflang na stronach wielojęzycznych: format kodów, x-default, duplikaty i wzajemne linki alternate.
Jak korzystać
- Wprowadź URL strony, która powinna należeć do klastra hreflang
- Uruchom walidację i przeanalizuj błędy kodów, x-default oraz self-reference
- W razie potrzeby włącz kontrolę reciprocal i popraw niespójne locale
FAQ
Sprawdzanie hreflang: co testuje walidator i jak czytać raport
Walidator pobiera stronę, wyszukuje w HTML wszystkie znaczniki <link rel="alternate" hreflang="…" href="…"> i sprawdza klaster wersji językowych. Na górze są trzy liczby: znalezione linki alternate, unikalne kody i wykryte problemy. Niżej — lista problemów i tabela z kodem, docelowym URL, statusem HTTP i kolumną Reciprocal.
Co jest zgłaszane jako problem:
- Brak linków hreflang — znaczników nie ma w HTML albo dodaje je skrypt po załadowaniu (narzędzie nie wykonuje JavaScriptu).
- Niepoprawny kod — nie ma postaci „język” lub „język-region” (
pl,en-gb,de-at) i nie jest tox-default. - Duplikat kodu — ten sam kod wskazuje różne adresy.
- Brak x-default — zalecenie, nie błąd.
- Brak self-reference — wśród alternate nie ma odnośnika do sprawdzanej strony. Wielkość liter w domenie i końcowy ukośnik są pomijane, ale
http/httpsorazwwwjuż nie.
Bez przełącznika reciprocal narzędzie pobiera nagłówki każdego adresu alternate i pokazuje końcowy kod odpowiedzi. Po włączeniu pobiera w całości osiem pierwszych wersji i szuka na każdej linku zwrotnego do Twojej strony. Pozostałe wersje mają w tabeli „—”.
Składnia hreflang
<link rel="alternate" hreflang="pl" href="https://example.com/oferta/" /> <link rel="alternate" hreflang="de" href="https://example.com/de/angebot/" /> <link rel="alternate" hreflang="en" href="https://example.com/en/offer/" /> <link rel="alternate" hreflang="uk" href="https://example.com/uk/propozytsiia/" /> <link rel="alternate" hreflang="x-default" href="https://example.com/en/offer/" />
- Język — dwuliterowy kod ISO 639-1:
pl,de,en,uk. - Region (opcjonalnie) — ISO 3166-1 alpha-2 po myślniku:
de-at,en-gb. Sam region nie działa:hreflang="gb"to błąd. - Wielkość liter nie ma znaczenia:
en-GBien-gbto to samo. - Adresy muszą być bezwzględne, z protokołem. Narzędzie uzupełnia adresy względne, żeby je sprawdzić, ale w znacznikach wpisuj pełny URL.
Pułapki w kodach
Walidator sprawdza postać kodu, a nie to, czy taki kod istnieje, więc przejrzyj tabelę samodzielnie:
ua— kod kraju, nie języka. Wersja ukraińska touklubuk-ua; dla Ukraińców w Polsce wystarczyukalbouk-pl.en-uk— błąd: Wielka Brytania togb, aukoznacza język ukraiński. Poprawnieen-gb.zh-Hant,zh-Hansies-419Google akceptuje, ale ścisła kontrola formatu oznaczy je jako niepoprawne — to fałszywy alarm.
x-default: kiedy i dokąd
x-default to wersja dla wszystkich, do których nie pasuje żaden kod — zwykle strona wyboru języka albo główna wersja międzynarodowa. Nie jest obowiązkowa, ale przy przekierowaniach geograficznych z katalogu głównego to najprostszy sposób, by pokazać Google, że strona bez prefiksu nie jest kolejną wersją językową. Nie przekierowuj x-default automatycznie po IP: Googlebot skanuje głównie z adresów w USA i może nie zobaczyć pozostałych wersji.
Język czy język-region
Kod regionu jest potrzebny tylko wtedy, gdy wersje naprawdę się różnią: ceny i waluta, dostawa, warunki prawne, lokalne słownictwo. Jeśli wersja niemiecka jest jedna dla Niemiec, Austrii i Szwajcarii, wystarczy de. Prawie identyczne de-de i de-at z hreflang to normalna praktyka: Google nie traktuje ich jak duplikatów, tylko pokazuje każdemu krajowi właściwą.
Wzajemność i self-reference
Hreflang działa tylko w parach. Jeśli polska strona wskazuje niemiecką, a niemiecka nie wskazuje polskiej, Google ignoruje to powiązanie. Każda wersja musi wymieniać wszystkie wersje klastra, łącznie z sobą. Dlatego znaczniki generuje się z jednego źródła (wspólnej mapy tłumaczeń), a nie wpisuje ręcznie. W WordPressie robią to WPML i Polylang.
Najczęstsze błędy hreflang
| Błąd | Skutek | Jak wykryć |
|---|---|---|
| Alternate prowadzi do przekierowania | Google oczekuje adresu docelowego; łańcuch osłabia sygnał | Walidator pokazuje status po przekierowaniu, więc sprawdź adresy w teście przekierowań |
| Alternate z kodem 404 lub noindex | Wersja wypada z klastra | Kolumna statusu; noindex — w analizie meta tagów |
| Canonical wskazuje inną wersję językową | Google scala wersje i pokazuje jedną | Każda wersja powinna być kanoniczna sama dla siebie |
| Brak linku zwrotnego | Powiązanie ignorowane | Tryb reciprocal |
| Różne formy adresu (ukośnik, www, parametry) | Self-reference i linki zwrotne się nie zgadzają | Porównaj kolumnę URL z canonical |
Test hreflang krok po kroku
- Sprawdź stronę główną i po jednej stronie z każdego szablonu (kategoria, produkt, artykuł) bez trybu reciprocal: czy znaczniki w ogóle są w HTML, czy kody są poprawne, czy jest x-default i self-reference.
- Włącz reciprocal dla tych samych stron. Każde „Nie” to wersja bez linku zwrotnego — zwykle tłumaczenie opublikowane po jednej stronie, ale jeszcze niepodlinkowane po drugiej.
- Otwórz każdą wersję z tabeli i sprawdź także ją. Wszystkie wersje powinny mieć identyczny zestaw linków; pięć alternate na jednej i cztery na drugiej oznacza rozjechany klaster.
- Porównaj canonical każdej wersji z jej adresem w hreflang — muszą zgadzać się co do znaku.
- Po poprawkach poproś o ponowne zaindeksowanie kluczowych stron w „Sprawdzeniu adresu URL”. Google odbudowuje klastry stopniowo, w miarę ponownego skanowania wszystkich wersji.
Gdzie najczęściej się psuje
W WordPressie hreflang generuje wtyczka wielojęzyczności (WPML, Polylang), a canonical — wtyczka SEO. Kłopot pojawia się, gdy strona nie jest powiązana z tłumaczeniem w ustawieniach wtyczki: wtedy hreflang po prostu się nie wyświetla. W autorskich CMS-ach znaczniki buduje się zwykle w szablonie nagłówka. Klasyczny błąd to pobieranie bieżącego adresu z żądania razem z parametrami UTM i sortowania — wtedy self-reference nigdy nie zgadza się z canonical.
Trzy sposoby wdrożenia, w tym hreflang w sitemap
Hreflang można podać w <head>, w nagłówku HTTP Link (jedyna opcja dla PDF) lub w mapie witryny XML. Wybierz jeden sposób — mieszanie jest dozwolone, ale sprzeczne źródła utrudniają diagnozę. Walidator czyta wyłącznie znaczniki w HTML.
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://example.com/oferta/</loc>
<xhtml:link rel="alternate" hreflang="pl" href="https://example.com/oferta/"/>
<xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/angebot/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/en/offer/"/>
</url>
<!-- analogiczny pełny blok <url> dla /de/angebot/ -->
</urlset>
Mapa witryny sprawdza się w dużych serwisach, bo nie obciąża HTML każdej podstrony, ale każda wersja potrzebuje osobnego wpisu <url> z kompletem linków. Mapę przeanalizujesz w analizie sitemap.xml.
Raport „Kierowanie międzynarodowe” Google usunął z Search Console. Błędy hreflang wychodzą więc tylko w zewnętrznych testach i w „Sprawdzeniu adresu URL”, które pokazuje stronę kanoniczną wybraną przez Google. Oficjalne zasady opisuje dokumentacja Google.
Popraw pozycje w wyszukiwarce
Problemy SEO mogą kosztować Cię ruch. Kaskadowy link building poprawi widoczność strony w wyszukiwarce.