hreflang: tag, który psuje się po cichu i taki zostaje
Dlaczego adnotacje językowe muszą być wzajemne, trzy błędy, które czynią je bezużytecznymi, i jak sprawdzić wielojęzyczną witrynę bez otwierania każdej strony.
SEO · Opublikowano: 2 września 2026 · 3 min czytania · Ольга Мирошник
Wielojęzyczna witryna psuje się w charakterystyczny sposób: w każdym języku wszystko wygląda poprawnie, a w każdym kraju rankuje niewłaściwa wersja. Przyczyną prawie zawsze jest hreflang — tag, którego nikt nie widzi, nikt nie testuje i wszyscy kopiują z szablonu.
Do czego służy
hreflang nie decyduje, która strona rankuje. Mówi wyszukiwarce, że kilka stron to ta sama treść w różnych językach, żeby mogła podstawić wersję pasującą do użytkownika. Zrobione dobrze — niemiecki odwiedzający trafia na niemiecką stronę, a nie angielską. Zrobione źle — wyszukiwarka wraca do zgadywania.
Kształt jest nijaki:
<link rel="alternate" hreflang="en" href="https://site.com/page/">
<link rel="alternate" hreflang="pl" href="https://site.com/pl/page/">
<link rel="alternate" hreflang="x-default" href="https://site.com/page/">
Reguła, na której potykają się wszyscy
Adnotacje muszą być wzajemne. Jeśli strona angielska wskazuje polską, polska musi wskazywać z powrotem angielską — i obie muszą wskazywać same siebie. Adnotacja jednostronna jest ignorowana w całości i dlatego witryna potrafi być pełna poprawnie wyglądających tagów, które nie robią nic.
Z tego samego powodu hreflang psuje się przy zwykłej pracy. Ktoś dodaje czwarty język i aktualizuje trzy szablony zamiast czterech. Ktoś usuwa stronę, a dawne rodzeństwo dalej na nią wskazuje. Nic się nie wysypuje, nic nie wygląda inaczej, a zestaw adnotacji po cichu przestaje być poprawny.
Trzy błędy według częstości
Wskazywanie na przekierowania i 404. Celem musi być adres końcowy z odpowiedzią 200. Link do adresu z przekierowaniem marnuje adnotację.
Złe kody. Język to ISO 639-1, opcjonalny region to ISO 3166-1 Alpha-2, a kolejność to język-region: en-GB, nie gb-en. en-UK nie jest kodem kraju. Samo de obejmuje wszystkich niemieckojęzycznych; de-AT ma sens tylko wtedy, gdy treść naprawdę się różni.
Brak x-default. Bez niego wyszukiwarka nie ma instrukcji dla odwiedzających, którzy nie pasują do żadnego z twoich języków. x-default powinien wskazywać na wybór języka albo na wersję najbardziej ogólną.
Weryfikacja bez otwierania każdej strony
Kontrola jest mechaniczna, więc nigdy nie powinna być ręczna:
dla każdej strony:
zbierz jej alternatywy
dla każdej alternatywy:
czy zwraca 200?
czy wskazuje z powrotem na tę stronę?
czy kod jest poprawny?
czy w zestawie jest dokładnie jeden x-default?
Uruchom to na crawlu całej witryny. Przy czterech językach i tysiącu podstron to cztery tysiące relacji — lista, której nikt nie utrzyma ręcznie, i dokładnie ten przypadek, w którym usterka żyje rok, bo nie ma komu tam zajrzeć.
Jeszcze jedna zgodność
Atrybut lang w <html> powinien zgadzać się z hreflang tej strony, a canonical każdej wersji językowej wskazywać na siebie, nie na angielski oryginał. Te dwa błędy razem dają klasyczny objaw: angielska strona rankuje na wszystkich rynkach, a tłumaczenia nie pojawiają się nigdzie.
Przeczytaj także
Sprawdź, ile z tego dotyczy Twojej strony
Darmowe skanowanie pokaże uszkodzone linki, błędy JS i problemy z wydajnością w minutę.