Hreflang i link kanoniczny w Next.js dla stron i18n
Błędny hreflang lub link kanoniczny w Next.js wysyła Google sprzeczne sygnały. Zobacz, jak poprawnie wdrożyć je w App Router dla stron wielojęzycznych.
Maciej Sala
Founder StriveLab
5 min czytaniaOpublikowano 10 kwietnia 2026 (Aktualizacja 30 lipca 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
albo dobrać niewłaściwy wariant regionalny. W pełni przetłumaczone strony nie są
z tego powodu automatycznie duplikatami. Google uznaje wersje lokalizowane za
duplikaty wtedy, gdy główna treść pozostaje nieprzetłumaczona. Hreflang pomaga
wyszukiwarce powiązać odpowiedniki i wyświetlić właściwy URL.
(link rel="canonical") wskazuje
preferowany, reprezentatywny adres spośród duplikatów lub bardzo podobnych
wariantów, np. URL-i z parametrami. Jest silnym sygnałem, ale Google może wybrać
inny adres, jeśli pozostałe sygnały są niespójne. Hreflang łączy wersje
językowe, a link kanoniczny wskazuje preferowany URL w obrębie każdej z nich.
Hreflang w Next.js App Router przez Metadata API
Code
// app/[locale]/page.tsximport type { Metadata } from 'next'import { notFound } from 'next/navigation'const locales = ['pl', 'en', 'de'] as consttype Locale = (typeof locales)[number]const baseUrl = 'https://example.com'// Wszystkie języki korzystają z tej samej, jawnej struktury URLconst getLocaleUrl = (locale: Locale, path = '') => `${baseUrl}/${locale}${path}`const isLocale = (value: string): value is Locale => locales.some((locale) => locale === value)export async function generateMetadata({ params,}: { params: Promise<{ locale: string }>}): Promise<Metadata> { const { locale } = await params if (!isLocale(locale)) notFound() return { alternates: { canonical: getLocaleUrl(locale), languages: { pl: `${baseUrl}/pl`, en: `${baseUrl}/en`, de: `${baseUrl}/de`, 'x-default': `${baseUrl}/pl`, }, }, }}
Ten przykład używa prefiksu dla każdego języka, więc trasa app/[locale]/page.tsx
odpowiada adresom /pl, /en i /de. Możesz umieścić język domyślny na rootcie
domeny, ale wtedy / wymaga osobnej trasy albo jawnego rewrite'u. Sam segment
[locale] go nie obsłuży. Kluczowe jest, by link kanoniczny, hreflang,
mapa witryny i linkowanie wewnętrzne konsekwentnie używały 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 musi wskazywać na rzeczywiście
opublikowany odpowiednik. Nie generuj hreflang z fallbackiem do bieżącego sluga,
bo taki adres może zwracać 404 albo zawierać treść w niewłaściwym języku.
Link kanoniczny w Next.js: konsolidacja wariantów URL
Nie dodawaj drugiego redirectu w middleware.ts: Next.js obsługuje tę
normalizację na podstawie trailingSlash. Od Next.js 16 konwencja
middleware.ts jest dodatkowo przestarzała i została zastąpiona przez
proxy.ts. Do prostych przekierowań najpierw używaj konfiguracji frameworka.
Parametry URL a link kanoniczny
Strona /products i /products?sort=price to ta sama treść. Link kanoniczny powinien wskazywać wersję bez parametrów:
Code
// app/layout.tsximport type { Metadata } from 'next'export const metadata: Metadata = { metadataBase: new URL('https://example.com'),}
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 polska wersja strony wskazuje na angielską, to angielska musi bezwzględnie wskazywać z powrotem na polską, ponieważ bez takiego linku zwrotnego Google może całkowicie zignorować tę relację lub zinterpretować ją nieprawidłowo, dlatego każda wersja językowa powinna w sekcji powiązań wymieniać również samą siebie.
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
Strona z noindex nie może być indeksowanym wynikiem docelowym. Nie umieszczaj
więc jej w zestawie hreflang przeznaczonym dla indeksowalnych odpowiedników.
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ę,
Dawny raport International Targeting w Search Console został wycofany. Google
nadal obsługuje hreflang, ale jego kompletność trzeba dziś weryfikować przez
inspekcję URL-i, crawl serwisu i porównanie wzajemnych zestawów alternatyw.
Audyt techniczny i optymalizacja pod kątem SEO i GEO.
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. Możesz użyć podfolderów (/pl/, /en/), subdomen albo osobnych domen. Podfoldery są zwykle najprostsze w utrzymaniu, ale wybór zależy od rynków, architektury i strategii serwisu.
Co jeśli mam tylko jeden język?
Nie potrzebujesz hreflang, jedynie ustaw link kanoniczny na każdej stronie. Pomaga wskazać Google preferowany wariant URL i skonsolidować sygnały wariantów z parametrami czy innym trailing slashem.
O autorze
Maciej Sala
Maciej Sala — konsultant technologiczny produktów cyfrowych i web 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 rozwija własne projekty.
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
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
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.