Technical SEO / International 2026-04-25 11 min czytania

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ęzykKodRegion wariant
Polskiplpl-PL (rzadko, bo polski tylko w PL)
Angielskienen-US, en-GB, en-CA, en-AU
Niemieckidede-DE, de-AT, de-CH
Francuskifrfr-FR, fr-CA, fr-BE, fr-CH
Hiszpańskieses-ES, es-MX, es-AR, es-CL
Czeskicscs-CZ
Słowackisksk-SK
Rosyjskiruru-RU, ru-UA
Ukraińskiukuk-UA
Default fallbackx-defaultużywany gdy żadna inna wersja nie pasuje

Powiązane artykuły

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