Hreflang co to? Pełny przewodnik 2026 (multilingual SEO)
Hreflang to atrybut HTML/sitemap który mówi Google jakie wersje językowe Twojej strony istnieją. Wprowadzony przez Google w 2011, kluczowy dla multilingual SEO. Bez hreflang Niemiec szukający Twojej DE strony może dostać wersję PL → bounce. Z hreflang dostaje DE → konwersja. Implementacja w 3 metodach: tag <link> w HEAD, HTTP header, sitemap.xml z xhtml:link. Wymaga: bidirectional linking, self-reference, x-default, poprawne kody ISO 639-1 (en-GB nie en-UK!). Wspierane przez Google + Yandex. Bing nie wspiera (używa lang attribute + geolocation).
Komplementarne tematy: Sitemap.xml co to + Canonical URL co to. Razem = international SEO foundation.
Implementacja hreflang w HEAD HTML
<!-- Strona PL --> <link rel="canonical" href="https://example.com/pl/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="de" href="https://example.com/de/produkt"/> <link rel="alternate" hreflang="x-default" href="https://example.com/en/product"/> <!-- Strona EN --> <link rel="canonical" href="https://example.com/en/product"/> <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="de" href="https://example.com/de/produkt"/> <link rel="alternate" hreflang="x-default" href="https://example.com/en/product"/> <!-- Strona DE — analogicznie -->
Najczęstsze błędy hreflang
✗ Błędy
- Brak bidirectional (PL → EN ale EN ↛ PL)
- Brak self-reference (PL ↛ PL)
- Brak x-default
- Zły kod ISO (en-UK zamiast en-GB)
- Underscore zamiast myślnika (en_US)
- Link do redirectu lub 404
- Conflict z canonical (PL canonical → EN)
- Mismatch HTML lang vs hreflang
✓ Poprawnie
- Bidirectional + self-reference
- x-default zawsze obecny
- Kody ISO 639-1 (en, pl, de) + ISO 3166-1 alpha-2 dla regionu (en-GB, en-US)
- Link tylko do live URL z HTTP 200
- Self-canonical na każdej wersji
- HTML lang zgodny z hreflang current page
- Walidacja Screaming Frog przed publikacją
- Walidacja Ahrefs Site Audit po publikacji
Kody ISO — ściągawka
| Język | Kod | Region wariant |
|---|---|---|
| Polski | pl | pl-PL (rzadko, bo polski tylko w PL) |
| Angielski | en | en-US, en-GB, en-CA, en-AU |
| Niemiecki | de | de-DE, de-AT, de-CH |
| Francuski | fr | fr-FR, fr-CA, fr-BE, fr-CH |
| Hiszpański | es | es-ES, es-MX, es-AR, es-CL |
| Czeski | cs | cs-CZ |
| Słowacki | sk | sk-SK |
| Rosyjski | ru | ru-RU, ru-UA |
| Ukraiński | uk | uk-UA |
| Default fallback | x-default | używany gdy żadna inna wersja nie pasuje |
Powiązane artykuły
Sitemap.xml co to
Hreflang w sitemap = preferowana metoda Google.
Canonical URL co to
Self-canonical na każdej wersji językowej.
Technical SEO checklist 2026
Hreflang to 1 z 40 punktów audytu.
Migracja strony WWW
Hreflang re-walidacja po migracji domeny.
SEO co to (pillar)
Klasyczne SEO — hreflang to international SEO sub-discipline.
Headless CMS co to
Sanity/Strapi/Payload + Next.js = native i18n + hreflang.
FAQ — Hreflang
Co to jest hreflang?
Hreflang to atrybut HTML (rel="alternate" hreflang="...") wprowadzony przez Google w 2011 roku, który mówi wyszukiwarkom jakie wersje językowe / regionalne tej samej strony istnieją. Pomaga Google wyświetlić użytkownikowi WŁAŚCIWĄ wersję na podstawie jego języka przeglądarki + lokalizacji geograficznej. Bez hreflang: użytkownik z Niemiec szukający Twojej polskiej strony może zobaczyć PL wersję (mimo że masz DE) → bounce + złe UX. Z hreflang: Google pokazuje DE wersję → konwersja. WSPIERANE PRZEZ: Google, Yandex (od 2014). NIE wspierane: Bing (używa meta language i geolocation jako sygnały zamiennie). Hreflang ZA POMOCĄ 3 metod: (1) tag w HEAD <link rel="alternate" hreflang="..." href="..."/>, (2) HTTP header (dla PDF/non-HTML), (3) sitemap.xml z xhtml:link. Można używać kilku metod jednocześnie (Google preferuje sitemap dla dużych stron).
Hreflang vs lang attribute (HTML lang) — co różni?
TO 2 RÓŻNE THINGS często mylone: (1) HTML LANG ATTRIBUTE — atrybut <html lang="pl"> mówi BROWSEROM/screen readerom w jakim języku jest TA strona. Wpływa na: rendering czcionek (chińskie znaki vs polskie diakrytyki), accessibility (screen reader wybiera lektor lang), spell check w form fields. NIE jest sygnałem dla SEO międzynarodowego. (2) HREFLANG — mówi GOOGLE jakie ALTERNATYWNE wersje językowe istnieją gdzie indziej. NIE wpływa na current page rendering. SEO sygnał międzynarodowy. PRZYKŁAD POPRAWNY: <html lang="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="x-default" href="https://example.com/" />. RAZEM stosujemy oba — różne cele, oba potrzebne dla pełnego multilingual SEO.
Co to x-default i kiedy używać?
x-default to special wartość hreflang (od 2013) wskazująca DOMYŚLNĄ wersję strony używaną gdy żadna inna wersja nie pasuje do języka/lokalizacji użytkownika. NA PRZYKŁAD: użytkownik z Brazylii (PT-BR) na Twoją stronę z wersjami PL, EN, DE — Google nie wie którą pokazać (PT-BR nie pasuje do żadnej). Z x-default = pokazuje wersję, którą TY oznaczyłeś jako default (zwykle EN dla globalnego brand, lub PL dla regionalnego). PRAWIDŁOWE UŻYCIE: jedna wersja językowa MUSI być oznaczona jako x-default + jako jej własny lang. PRZYKŁAD: <link rel="alternate" hreflang="en" href="https://example.com/en/" /> + <link rel="alternate" hreflang="x-default" href="https://example.com/en/" /> (EN jest 2x — raz jako en, raz jako default). DLA GMWEB stron ANPR cluster: x-default = polska wersja (rynek główny). Dla globalnych SaaS: x-default = EN. KRYTYCZNE: brak x-default = strata 5-15% organic traffic z krajów które nie pasują do żadnego konkretnego języka.
Kody ISO 639-1 (język) + ISO 3166-1 (region)
Hreflang używa kombinacji LANGUAGE-COUNTRY w formacie ISO. JĘZYK (ISO 639-1, 2 litery): pl=polski, en=angielski, de=niemiecki, fr=francuski, es=hiszpański, it=włoski, cs=czeski, sk=słowacki, ru=rosyjski, uk=ukraiński, zh=chiński, ja=japoński. KRAJ (ISO 3166-1 alpha-2, 2 litery, opcjonalne): PL=Polska, US=USA, GB=UK (NIE "UK"!), DE=Niemcy, FR=Francja, ES=Hiszpania. POPRAWNE PRZYKŁADY: hreflang="pl" (polski global), hreflang="pl-PL" (polski Polska — niepotrzebne, polski jest tylko w PL), hreflang="en" (angielski global x-default), hreflang="en-US" (angielski US, np. dla US dolar pricing), hreflang="en-GB" (angielski UK, dla GBP), hreflang="es-MX" (hiszpański Meksyk vs hiszpański Hiszpania es-ES). NAJCZĘSTSZE BŁĘDY: (1) "en-UK" zamiast "en-GB" — UK to nieoficjalny kod, GB jest poprawny. (2) Wielkie litery — case-insensitive ale konwencjonalnie język małymi, kraj wielkimi (en-US). (3) Underscore zamiast myślnika (en_US zamiast en-US) — błąd. (4) Kod 3-literowy (eng zamiast en) — błąd. Walidator: ahrefs.com/hreflang-tags-generator.
Najczęstsze błędy hreflang i jak je uniknąć
5 najczęstszych błędów hreflang (audit GMWEB 50+ stron): (1) BRAK BIDIRECTIONAL — strona PL linkuje do EN, ale EN nie linkuje zwrotnie do PL. Google ignoruje hreflang. FIX: każda strona w zestawie MUSI linkować do wszystkich innych + do siebie. (2) BRAK SELF-REFERENCE — PL linkuje do EN i DE ale nie do PL. FIX: dodaj self-reference. (3) BRAK X-DEFAULT — żadna z wersji nie ma x-default. FIX: oznacz jedną (zwykle EN dla globalnych, PL dla regionalnych). (4) ZŁY KOD ISO — "en-UK" (poprawnie en-GB), "ch" (Szwajcaria? język czeski to "cs"), "br" (Brazylia? brytyjski? — używaj en-GB dla brytyjskiego, pt-BR dla brazylijskiego). (5) LINK DO REDIRECTU LUB 404 — hreflang wskazuje URL który redirectuje do innej wersji lub nie istnieje. WALIDACJA: Screaming Frog SEO Spider (free do 500 URL) → Reports → Hreflang. Pokazuje wszystkie 5 błędów + sugeruje fixes. Albo Ahrefs Site Audit. PRZED PUBLIKACJĄ ZAWSZE walidator!
Hreflang w Next.js — implementacja
NEXT.JS 13+ APP ROUTER ma natywne wsparcie hreflang przez Metadata.alternates.languages. PRZYKŁAD: w app/[lang]/page.tsx export const metadata = { alternates: { canonical: "https://example.com/en/", languages: { en: "https://example.com/en/", pl: "https://example.com/pl/", de: "https://example.com/de/", "x-default": "https://example.com/en/" } } }. Next.js automatycznie generuje <link rel="alternate" hreflang="..." href="..."/> w HEAD. PER-PAGE: dla każdej strony powtórz pattern z innym canonical (self) ale tym samym languages object. CHALLENGES: dla dużej strony manualne hardcoded URL dla każdej wersji = ryzyko niezgodności. ROZWIĄZANIE: stwórz helper buildLocalizedAlternates(slug) który zwraca object dla wszystkich wersji. SITEMAP HREFLANG: Next.js sitemap() function wspiera alternates field per route — auto-generuje hreflang w sitemap.xml. EKSAMPLE GMWEB: 6 triad ANPR PL/EN/DE w cluster mają hreflang full triad implementację (kamera-onvif, cena/cost, software/oprogramowanie, hotels, residential, shopping centers).
Hreflang w WordPress — wtyczki
WORDPRESS NIE ma natywnego hreflang — wymaga wtyczki: (1) WPML (najpopularniejszy, $99/rok podstawowy plan, $199 multilingual CMS) — pełna translacja contentu + admin + automatyczny hreflang per parę językową. Najlepszy dla 2-15 języków. (2) POLYLANG (free + pro $99/rok) — alternatywa free. Manualna translacja, hreflang automatyczny. (3) TRANSPOSH — open-source, machine translation (Google Translate API), hreflang basic. (4) MULTISITE WORDPRESS — każdy język = osobny site, hreflang generowany przez Yoast/RankMath. Zaawansowane setup. (5) YOAST SEO + MANUAL — można manualnie wstawić <link rel="alternate"> w functions.php — ryzykowne dla non-tech. REKOMENDACJA: WPML dla biznesu (płatne ale stabilne), Polylang dla DIY/freelancer. UNIKAJ machine translation dla SEO content (Google rozpoznaje, obniża ranking). DLA SMB CONSIDER: zamiast multilingual WordPress, rebuild na Next.js + headless CMS (Sanity/Strapi) — natywne hreflang + lepszy performance + niższe TCO długoterminowo.
Hreflang vs canonical — jak współdziałają
HREFLANG i CANONICAL to RÓŻNE koncepty często mylone: (1) CANONICAL — mówi Google "ta strona to KANONICZNA wersja, ignore duplicate". Używane do duplicate content prevention (np. /produkt vs /produkt?utm_source=fb). (2) HREFLANG — mówi Google "te strony to RÓŻNE wersje językowe TEJ SAMEJ treści". POPRAWNE WSPÓŁDZIAŁANIE: każda wersja językowa MUSI mieć: (a) CANONICAL wskazujący na SIEBIE (self-canonical), (b) HREFLANG wskazujący na wszystkie wersje (bidirectional + x-default). PRZYKŁAD POPRAWNY dla strony PL: <link rel="canonical" href="https://example.com/pl/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/en/product"/>. BŁĄD CZĘSTY: strona PL ma canonical wskazujący na EN — Google ignoruje PL wersję, traktuje jako duplicate EN. KRYTYCZNE: zawsze SELF-CANONICAL. Hreflang nie zastępuje canonical. NEXT.JS 13+ Metadata.alternates.canonical = self URL + languages object dla hreflang.
Audyt hreflang + multilingual SEO
Sprawdzimy hreflang Twojej strony (bidirectional, x-default, kody ISO, conflict z canonical), dostarczamy mapę błędów + fix priorytetyzacja w 5 dni roboczych. Od 1 800 zł.
Zamów audyt hreflang