Sitemap i canonical w headless WordPress: jedno źródło prawdy, serwowane z frontu

Sitemap i canonical w headless WordPress: jedno źródło prawdy, serwowane z frontu

Ostatnio zweryfikowano: 22 września 2026
5 min czytania
Przewodnik
500+ projektów WP
Techniczne SEO

#Sitemap i canonical w headless WordPress: jedno źródło prawdy, serwowane z frontu

Dwa z siedmiu wzorców SEO dla headless WordPress zasługują na osobny artykuł, bo psują się jako pierwsze i psują się po cichu. Mapa strony i adres kanoniczny to dwa sygnały, którym Google ufa najbardziej, gdy ustala, czym jest ta witryna i który adres jest właściwy. Wdrożenie headless, które pomyli się w którymkolwiek z nich, traci pozycje, dla których utrzymania przeprowadzono migrację.

Ten artykuł pokazuje wzorzec w praktyce. Zakłada, że decyzja architektoniczna (Astro czy Next.js według macierzy decyzyjnej) już zapadła.

#Na czym polega wzorzec sitemapy i canonical w headless w jednym akapicie?

Sitemapę generuje framework frontendowy, z adresami zgodnymi z rzeczywistą publiczną stroną. Adres kanoniczny renderujesz jako <link rel="canonical"> w head HTML: dane pochodzą z WordPressa (Yoast albo Rank Math), a emituje je front. Sitemapę i canonical originu WordPressa wyłączasz albo przekierowujesz 301. Jedna mapa strony, jeden canonical na stronę, oba renderowane po stronie serwera.

#Dlaczego witryny headless WordPress kończą z dwiema sitemapami?

WordPress 5.5 wprowadził /wp-sitemap.xml jako funkcję rdzenia. Od tamtej pory każda instalacja WordPressa ma ją domyślnie włączoną. Wtyczki SEO (Yoast, Rank Math) generują własne mapy, które zastępują albo uzupełniają tę z rdzenia. Wdrożenie headless, które to ignoruje, kończy z trzema sitemapami na tym samym hoście:

  1. /wp-sitemap.xml z rdzenia WordPressa.
  2. /sitemap_index.xml z Yoasta albo Rank Math.
  3. /sitemap.xml z frameworka frontendowego.

Search Console widzi nakładanie się, czasem zgłasza niespójność, a to, które adresy faktycznie trafią do indeksu, zależy od tego, którą mapę Google przeczyta danego dnia jako pierwszą. Poprawka jest mechaniczna:

  • Framework frontendowy generuje kanoniczną sitemapę pod jedną znaną ścieżką (my używamy /sitemap-index.xml, bo Cloudflare Pages serwuje ją bez problemów).
  • Sitemapa originu WordPressa jest wyłączona (Yoast i Rank Math mają do tego przełącznik) albo przekierowana 301 na sitemapę frontu.
  • Sitemapa z rdzenia pod /wp-sitemap.xml również dostaje przekierowanie 301 na odpowiednik we froncie.

Po przełączeniu tylko jedna mapa strony odpowiada kodem 200 OK. Pozostałe zwracają 301 albo 404.

#Jak zbudować sitemapę frontu w headless WordPress?

Przy froncie na Astro albo Next.js są dwie realne opcje:

Generowanie w czasie builda. Build frontu pobiera z originu WordPressa adresy wszystkich opublikowanych wpisów, stron i termów, sortuje je i emituje XML. Sprawdza się to w witrynach z przewidywalnym rytmem publikacji (czyli w większości). Unieważnianie cache załatwia przebudowa uruchamiana przy publikacji.

Na żądanie na krawędzi. Trasa w Cloudflare Worker generuje sitemapę przy każdym żądaniu, czytając z zapisanej w cache listy adresów, którą origin WordPressa wypycha webhookiem przy publikacji. To rozwiązanie dla witryn publikujących tak często, że czas przebudowy byłby problemem.

Domyślnie wybieramy generowanie w czasie builda. Wzorzec z Workerem zostawiamy dla witryn publikujących częściej niż kilka razy na godzinę.

#Jak renderować adres kanoniczny na froncie headless?

Adres kanoniczny musi być w head HTML, w pierwszej odpowiedzi serwera, zanim wykona się jakikolwiek skrypt po stronie klienta. Wzorzec:

<link rel="canonical" href="https://example.com/headless-wordpress-for-woocommerce/" />

Trzy zasady.

Po pierwsze, renderuj po stronie serwera. Astro renderuje go z frontmattera strony albo z layoutu. Next.js renderuje go z metadata (App Router) albo z <Head> w ścieżkach z getServerSideProps. Unikaj aktualizowania adresu kanonicznego w efekcie po stronie klienta: silniki generatywne i wiele powierzchni AEO parsuje wyłącznie pierwotny HTML.

Po drugie, pobieraj go z WordPressa. Yoast i Rank Math udostępniają adres kanoniczny każdego wpisu przez REST. Front pobiera go w czasie builda (albo przy każdym żądaniu) i renderuje w HTML. WordPress pozostaje źródłem prawdy.

Po trzecie, domyślnie samoodwołujący. Każdy adres deklaruje jako kanoniczny sam siebie, chyba że istnieje wyraźny powód, by wskazać inny (paginowane archiwa, adresy z parametrami filtrów, treści syndykowane). Gdy wskazujesz inny adres, docelowy canonical wskazuje z powrotem na siebie.

#Które przypadki brzegowe sitemapy i canonical psują SEO w headless?

  • Niespójny ukośnik na końcu. Permalinki WordPressa zwykle kończą się /. Framework frontendowy może domyślnie działać bez ukośnika. Wybierz jedną wersję, drugą przekieruj i nigdy nie pozwól, by istniały obie.
  • HTTP a HTTPS, www a domena główna. Zwykle rozwiązywane na CDN, ale adres kanoniczny musi deklarować wybrany wariant. My deklarujemy https:// na domenie głównej; cała reszta dostaje 301 na ten adres.
  • Adresy z filtrami (fasetowe wyszukiwanie w katalogu). Często generują tysiące ubogich wariantów adresu. Ich canonical wskazuje na bazowy adres bez filtrów; mają też noindex, żeby nie trafiały do sitemapy.
  • Paginowane archiwa. Strona 2, strona 3 i kolejne mają canonical na siebie, z rel="prev" i rel="next" dla jasności. Niektóre zespoły kierują canonical na stronę 1; w ten sposób unikalne strony wypadają z indeksu. Nie polecamy tego.
  • Treści tłumaczone. Każda wersja językowa ma canonical na siebie, z <link rel="alternate" hreflang="..."> dla pozostałych wersji. Mapa hreflang jest samoodwołująca i musi być zgodna we wszystkich wersjach językowych.

#Jak sprawdzić sitemapę i canonical przed startem?

Dwie kontrole, które uruchamiamy przy każdym wdrożeniu headless WordPress:

Porównanie sitemap. Wygeneruj nową mapę strony i porównaj zbiór adresów z dotychczasową sitemapą WordPressa. Wszystko, czego brakuje w nowej, to luka w treści. Wszystko, co nowe, to podejrzenie regresji (często wyciekający szkic albo prywatny wpis).

Próbka adresów kanonicznych. Dla 50 stron o największym ruchu pobierz adres z nowego frontu i sprawdź, czy canonical w head HTML jest zgodny z samym adresem (albo z oczekiwanym celem, jeśli canonical celowo wskazuje inną stronę). Jedna niezgodność to błąd; dziesięć niezgodności to wzorzec, który wymaga ponownego sprawdzenia builda frontu.

Obie kontrole działają w CI. Nowy build, który nie przejdzie którejkolwiek z nich, nie trafia na produkcję.

#Powiązane poradniki o SEO w headless WordPress

Artykuł opiera się na liście kontrolnej wzorców SEO dla headless WordPress. Uzupełnia filar usługi headless WordPress oraz macierz decyzyjną Next.js czy Astro, gdzie omawiamy szersze decyzje dotyczące builda.

Następny krok

Przekuj artykuł w realne wdrożenie

Pod tym wpisem dokładam linki, które domykają intencję użytkownika i prowadzą dalej w strukturze serwisu.

Chcesz wdrożyć ten temat na swojej stronie?

Jeśli planujesz architekturę Headless WordPress, decoupling frontendu lub migrację na Astro, przygotuję architekturę, backend WP i superszybki frontend.

Powiązany klaster

Sprawdź inne usługi WordPress i bazę wiedzy

Wzmocnij swój biznes dzięki profesjonalnemu wsparciu technicznemu w kluczowych obszarach ekosystemu WordPress.

Gdzie powinna znajdować się mapa strony w headless WordPress?#
Na domenie frontu, wygenerowana przez framework frontendowy. Adresy w sitemapie muszą odpowiadać rzeczywistym publicznym adresom, które odwiedza użytkownik. Mapa generowana z originu WordPressa zawiera adresy wskazujące na host originu, a nie na publiczną stronę, i Search Console zgłosi tę niezgodność.
Czy sitemapę z originu WordPressa należy usunąć?#
Wyłącz ją albo przekieruj 301 na sitemapę frontu. WordPress 5.5 dodał /wp-sitemap.xml jako funkcję rdzenia, więc nawet bez aktywnej wtyczki SEO jedna mapa już przeszkadza. Albo skieruj ją na sitemapę frontu, albo zablokuj w robots.txt i nagłówkiem noindex.
Czy adres kanoniczny musi być w HTML, czy wystarczy JSON-LD?#
Musi być w HTML, w sekcji head pierwszej odpowiedzi serwera, jako element ``. JSON-LD to dodatek, nie zamiennik. Silniki generatywne i powierzchnie AEO niezawodnie parsują head HTML; część z nich traktuje JSON-LD wyłącznie pomocniczo.
Czy mogę zostawić generowanie canonical wtyczce Yoast SEO i tylko go renderować?#
Tak. Endpointy REST Yoasta udostępniają adres kanoniczny dla każdego wpisu i strony, a front renderuje go w HTML. To samo dotyczy Rank Math. Ten wzorzec trzyma metadane SEO w WordPressie jako jedyne źródło prawdy, a front pozostaje warstwą prezentacji.
A co z paginacją, filtrami i archiwami kategorii?#
Każda strona archiwum renderuje własny canonical wskazujący na samą siebie, plus `rel=prev`/`rel=next`, jeśli łańcuch ma sens. Ryzyko stanowią adresy z filtrami (na przykład fasetowe wyszukiwanie w katalogu), które tworzą tysiące ubogich wariantów. Ustaw w nich canonical na bazowy adres bez filtrów i dodaj noindex.

Potrzebujesz FAQ dopasowanego do branży i rynku? Przygotujemy wersję pod Twoje cele biznesowe.

Porozmawiajmy

Polecane artykuły

Headless WordPress vs monolit: przewodnik TCO 2026

Kompleksowa 4-letnia analiza całkowitego kosztu posiadania (TCO), laboratoryjne i polowe benchmarki Core Web Vitals, architektura Astro 7 GraphQL APQ oraz 10-punktowa matryca decyzyjna dla organizacji enterprise wybierających między headless a monolitem WordPressa.

Ile trwa migracja na headless WordPress w 2026 roku?

Od sześciu do szesnastu tygodni dla typowych projektów, w czterech fazach: rozpoznanie, ustalanie zakresu, budowa i przełączenie, dostrajanie. Zmiennymi są wielkość katalogu, liczba integracji, zachowanie URL-i i gotowość zespołu redakcyjnego, a nie wybór frameworka.