Hreflang i link kanoniczny w Next.js — SEO wielojęzycznych stron bez duplikacji
Błędny hreflang lub link kanoniczny w Next.js generuje tysiące zduplikowanych stron. Jak uniknąć tego w App Router przy wielojęzycznej strukturze?
Maciej Sala
Founder StriveLab
4 min czytaniaOpublikowano 10 kwietnia 2026 (Aktualizacja 25 maja 2026)
Czym jest hreflang i dlaczego jest krytyczny w SEO wielojęzycznym?
to atrybut HTML, który informuje Google, która wersja językowa strony jest przeznaczona dla danego regionu lub języka. Bez hreflang Google może wyświetlić polską wersję użytkownikowi anglojęzycznemu lub potraktować wersje językowe jako duplikaty (kanibalizacja). Może też indeksować tylko jedną wersję. Krótko mówiąc: bez hreflang czeka nas bałagan, podczas gdy hreflang wprowadza kontrolę i porządek.
(link rel="canonical") wskazuje „źródłową" wersję strony i w ten sposób eliminuje duplikaty wynikające z parametrów URL, trailing slashy, czy wariantów http/https. Oba tagi "współpracują" ze sobą, ponieważ hreflang łączy wersje językowe, link kanoniczny wyznacza kanoniczną wersję w każdym języku.
Hreflang w Next.js App Router przez Metadata API
Code
// app/[locale]/page.tsximport type { Metadata } from 'next'const locales = ['pl', 'en', 'de']const baseUrl = 'https://example.com'// Polska wersja na rootu domeny, pozostałe języki z prefiksemconst getLocaleUrl = (locale: string, path = '') => locale === 'pl' ? `${baseUrl}${path}` : `${baseUrl}/${locale}${path}`export async function generateMetadata({ params,}: { params: Promise<{ locale: string }>}): Promise<Metadata> { const { locale } = await params return { alternates: { canonical: getLocaleUrl(locale), languages: { pl: baseUrl, en: `${baseUrl}/en`, de: `${baseUrl}/de`, 'x-default': baseUrl, }, }, }}
Polska wersja działa na rootu domeny (https://example.com/) bez prefiksu /pl — domena .pl już precyzuje rynek. Pozostałe języki mają własny prefiks (/en, /de). Kluczową zasadą jest by link kanoniczny, hreflang, i linkowanie wewnętrzne były konsekwentnie używane wobec tego samego wariantu URL.
Diagram
Poprawna relacja linku kanonicznego i hreflang dla wersji językowych
Jeśli slugi są tłumaczone (/pl/blog/jak-zbudowac-strone vs /en/blog/how-to-build-website), każda wersja językowa musi wskazywać na poprawny slug w danym języku.
Link kanoniczny w Next.js: eliminacja duplikacji URL-i
Typowe błędy hreflang i linku kanonicznego w Next.js
Brakujący x-default
x-default wskazuje wersję dla użytkowników, których język nie jest obsługiwany. Warto zaznaczyć, że nie jest to obowiązkowe w każdym projekcie, ale zwykle warto go dodać, jeśli masz stronę domyślną albo selektor języka.
Brak wzajemności hreflang, czyli reciprocal links
Jeśli strona PL wskazuje na EN, to EN musi wskazywać z powrotem na PL. W wypadku braku wzajemności = Google ignoruje hreflang.
Link kanoniczny i hreflang wskazują na różne URL-e
Link kanoniczny powinien wskazywać na siebie (w danym języku), nie na inną wersję językową. Każda wersja językowa ma własny link kanoniczny.
Hreflang na stronach z noindex
Jeśli strona ma atrybut noindex, wtedy hreflang jest ignorowany.
Jak weryfikować hreflang i link kanoniczny po wdrożeniu?
Google Search Console → inspekcja konkretnych URL-i i raport indeksowania,
Ahrefs / Screaming Frog — audyt hreflang na dużą skalę,
Nie. Hreflang wskazuje alternatywne wersje językowe lub regionalne, a link kanoniczny wskazuje kanoniczny adres danej wersji. Oba mechanizmy powinny ze sobą współpracować.
Czy każda wersja językowa musi linkować do pozostałych?
Tak, konfiguracja hreflang powinna być wzajemna. Jeśli wersja polska wskazuje angielską, wersja angielska powinna wskazywać polską oraz samą siebie.
Gdzie najlepiej obsłużyć hreflang w Next.js?
Najczęściej w Metadata API oraz w sitemapie, zależnie od struktury routingu. Kluczowe jest, żeby adresy były spójne z linkami kanonicznymi i realnie dostępne.
Czy hreflang wpływa na ranking?
Hreflang nie jest czynnikiem rankingowym i nie ma wpływu na poprawę pozycji, ale poprawia trafność wyświetlanej wersji, co wpływa na CTR i doświadczenie użytkownika. Jeśli miałby jakikolwiek wpływ to pośredni.
Czy muszę mieć osobne domeny dla języków?
Nie, podfoldery (/pl/, /en/) z hreflang to rekomendowane przez Google podejście, a osobne domeny (.pl, .com) to opcja raczej dla dużych marek.
Co jeśli mam tylko jeden język?
Nie potrzebujesz hreflang, jedynie ustaw link kanoniczny na każdej stronie — eliminuje duplikaty z parametrów URL i trailing slashy.
O autorze
Maciej Sala
Maciej Sala — Product Manager i Frontend Developer z bogatym doświadczeniem w marketingu internetowym oraz SEO. Na co dzień pracuje z Reactem, Next.js i TypeScriptem, a ostatnio także z Astro i narzędziami do automatyzacji procesów AI. Sprawnie łączy perspektywę produktową z praktycznym podejściem do kodu. Przez kilka lat był związany z branżą gier wideo jako project manager i game designer. Absolwent historii na Uniwersytecie Jagiellońskim oraz studiów podyplomowych z marketingu internetowego na AGH w Krakowie. Po godzinach trenuje na siłowni, maluje figurki i rozwijam własne projekty.
Najbardziej kosztowne błędy SEO uderzają cicho i niepostrzeżenie. Strona bezproblemowo się ładuje, formularz dalej działa, a użytkownik normalnie z niej korzysta. Jednocześnie Google zaczyna dostawać nieprawidłowy link kanoniczny, brakujący hreflang albo nadany przypadkowo noindex . QA w SEO polega na wyraźnych regułach w kodzie, testach i walidacji danych.
Maciej Sala
Founder StriveLab
Zanim Twoja oferta dotrze do zagranicznych klientów, Twoja strona musi zdać egzamin techniczny. Większość witryn odpada na tym etapie, marnując potencjał nawet najlepszej treści. Sprawdź, jak rygorystycznie skonfigurować wielojęzyczność i hreflang na statycznym Astro, by zasięg globalny szedł w parze z lokalną, błyskawiczną dostawą treści.
Maciej Sala
Founder StriveLab
Parametry w URL mają, jak przysłowiowa moneta ma dwie strony. Z jednej, napędzają filtry, sortowanie, paginację i śledzenie kampanii, a z drugiej, jednocześnie potrafią cicho popsuć widoczność serwisu przez duplikacje treści, marnowany budżet indeksowania i rozwodnione link equity. W aplikacjach React, Next.js i Astro to problem architektoniczny i właśnie dlatego samo użycie rel="canonical" go nie rozwiązuje. W tym przewodniku przechodzę od klasyfikacji parametrów do decyzji o indeksacji, normalizacji URL-i, renderowania, paginacji oraz kontroli nawigacji fasetowej.