301 kontra 308: przekierowania

301 i 308 to stałe przekierowania; kluczowa różnica polega na tym, że 308 gwarantuje zachowanie metody HTTP i treści żądania. Wyjaśniamy, dlaczego powstał 308, jak Google i Bing traktują go względem 301 oraz kiedy warto go użyć.

Opublikowano po raz pierwszy: 2 lip 2026 · Ostatnia aktualizacja: 8 sie 2026 · Advanced
Języki
1 sygnał dowodowy na tej stronie

301 i 308 to stałe przekierowania, a Google i Bing traktują 308 tak samo jak 301. Na poziomie protokołu 308 gwarantuje ponowienie tej samej metody i treści żądania pod nowym adresem, więc POST pozostaje POST-em; 301 historycznie dopuszczał zamianę POST na GET. Przy zwykłej migracji strony 301 pozostaje pragmatycznym domyślnym wyborem dzięki szerszej obsłudze narzędzi. Po 308 sięgaj wtedy, gdy trzeba zachować żądanie inne niż GET — w API, webhooku lub formularzu — i sprawdź rzeczywistego klienta, bo sam kod nie gwarantuje zachowania danych uwierzytelniających, ciasteczek ani idempotencji. SEO nie daje przewagi żadnemu z tych kodów.

TL;DR — 301 i 308 to przekierowania stałe, a Google i Bing przetwarzają 308 tak samo jak 301: dokumentacja Google mówi “equivalent to 301,” (tłumaczenie) „równoważne z 301”, Illyes mówi “we just merge that with 301,” (tłumaczenie) „po prostu łączymy to z 301”, a Canel potwierdza, że Bing traktuje je tak samo. Na poziomie protokołu kluczowa jest gwarancja zachowania metody: 308 (RFC 7538 z 2015 roku) nakazuje klientowi ponowić tę samą metodę pod nowym adresem, wraz z treścią żądania; 301 pochodzi z epoki HTTP/1.0 i jest niejednoznaczny przede wszystkim w kwestii zamiany POST na GET — RFC nie rozstrzyga analogicznie PUT ani DELETE. 308 powstał jako stały odpowiednik 307: RFC 7231 zdefiniował tymczasowy kod zachowujący metodę, ale nie stały. Dla zwykłych migracji stron, domen i HTTPS domyślnie wybierz 301, bo jest starszy, szerzej rozpoznawany i lepiej obsługiwany przez CDN-y, CMS-y oraz wtyczki. Po 308 sięgaj wtedy, gdy trzeba zachować żądanie inne niż GET — API, webhook, formularz albo logowanie POST — i zawsze sprawdź dane uwierzytelniające, ciasteczka oraz idempotencję na prawdziwym kliencie. Żaden z tych kodów nie jest „lepszy dla SEO” — wyszukiwarki obaliły ten mit.

Najpierw różnica semantyczna

301 i 308 mówią wyszukiwarkom to samo o stałości: zasób został przeniesiony na dobre, a miejsce docelowe powinno stać się kanoniczne. Różnią się wąską, mechaniczną gwarancją dotyczącą tego, jak klient ponawia żądanie.

  • 301 (Moved Permanently) to pierwotny kod stałego przekierowania z epoki HTTP/1.0. Zawsze pozostawiał niejasność, czy metoda żądania musi zostać zachowana. W praktyce przeglądarki i inni klienci historycznie zamieniały POST na GET po 301 — co nie szkodzi zwykłej stronie, ale po cichu psuje wszystko, co zależy od metody lub treści żądania.
  • 308 (Permanent Redirect) to wersja ścisła. Gwarantuje ponowienie pod nowym adresem dokładnie tej samej metody i treści. POST pozostaje POST-em, a dane jadą razem z nim.

Najkrócej ująłbym to tak: 308 to 301 z dodatkową gwarancją, że przeglądarka po cichu nie zamieni POST na GET. Evidence for this claim RFC 9110 defines both 301 and 308 as permanent redirects; 308 forbids changing the request method, while 301 permits POST-to-GET rewriting for historical reasons. Scope: HTTP semantics for 301 and 308 responses. Confidence: high · Verified: IETF: RFC 9110 §§15.4.2, 15.4.9 IETF: RFC 7538 §3 — 308 Permanent Redirect

Dlaczego w ogóle powstał 308: brakujący „stały 307”

Tego fragmentu prawie nikt nie wyjaśnia, a najlepiej pokazuje on sens całego porównania: specyfikacji brakowało jednego pola.

Nowoczesne kody przekierowań układają się w siatkę: tymczasowe lub stałe oraz luźne lub ścisłe.

TymczasoweStałe
Metoda może się zmienić (luźne)302301
Metoda zachowana (ścisłe)307308

RFC 7231 zdefiniował 307 jako przekierowanie tymczasowe, zachowujące metodę — ścisły odpowiednik luźnego, niejednoznacznego 302. Nie zdefiniował jednak stałego odpowiednika zachowującego metodę. RFC 7538 z kwietnia 2015 roku dodał 308, aby wypełnić tę lukę: 308 ma się do 301 tak, jak 307 ma się do 302. Jeśli czytasz porównanie 302 z 307 w tym klastrze, tutaj widzisz tę samą relację poziom wyżej — stałe luźne kontra stałe ścisłe.

301 powstał wcześniej niż cały ten model. Pochodzi z HTTP/1.0, zanim sformalizowano pojęcie zachowania metody — właśnie dlatego jest niejednoznaczny i dlatego trzeba było stworzyć 308, zamiast tylko doprecyzować 301.

Co w praktyce oznacza zachowanie metody i treści

W zdecydowanej większości przekierowań ktoś klika link, przeglądarka wysyła GET, a serwer kieruje ją dalej — praktycznej różnicy nie ma. Współczesne przeglądarki dobrze zachowują GET po 301. Różnica ujawnia się dopiero wtedy, gdy żądanie nie jest zwykłym GET-em:

Typ żądaniaPo 301Po 308
GET (zwykła strona)Dalej jako GET (w praktyce bez problemu)Dalej jako GET
POST (formularz, API)Może po cichu zmienić się na GET, a treść znikniePonowione jako POST z zachowaną treścią
PUT / DELETE (API)RFC tego nie dokumentuje — historyczne zezwolenie dotyczy tylko POST→GET, więc zachowanie zależy od klienta i wymaga weryfikacjiMetoda zachowana (reguła automatycznego podążania 308 nie dotyczy wyłącznie POST)

Ryzyko 301 dotyczy więc przede wszystkim POST i treści żądania — formularzy, API, webhooków i logowania. Stwierdzenie „301 zawsze zepsuje mój formularz” byłoby przesadą; zwykły GET jest bezpieczny. Historyczny wyjątek w specyfikacji 301 dotyczy konkretnie POST→GET, a nie PUT ani DELETE, więc zachowanie tych metod trzeba sprawdzić na realnym kliencie. Specyfikacja jasno gwarantuje w 308, że klient nie zmieni metody, którą ponawia — ale nie obiecuje osobno zachowania nagłówków, ciasteczek, danych uwierzytelniających ani całej transakcji. To zależy od klienta i integracji.

Czy Google traktuje 301 i 308 różnie w SEO? Nie.

To rzadki przypadek, w którym dokumentacja, pracownicy Google i Bing są zgodni — i od lat mówią to samo.

Dokumentacja Google dotycząca kodów statusu HTTP umieszcza 301 i 308 w tej samej grupie. W wierszu 301 czytamy: “Google follows the redirect, and Google systems use the redirect as a strong signal that the redirect target should be processed.” (tłumaczenie) „Google podąża za przekierowaniem, a systemy Google używają go jako silnego sygnału, że cel przekierowania powinien zostać przetworzony.” Wiersz 308 zawiera jedno zdanie: “Equivalent to 301.” (tłumaczenie) „Równoważne z 301”. To najmocniejsza i najłatwiejsza do zacytowania odpowiedź — własna dokumentacja Google zrównuje oba kody. Evidence for this claim Google treats 308 as equivalent to 301 for Search while advising sites to use the semantically appropriate status code. Scope: Google Search processing; client behavior still differs when method preservation matters. Confidence: high · Verified: Google: HTTP status codes and Search

Przewodnik po przekierowaniach potwierdza to już na początku: “The 301 and 308 status codes mean that a page has permanently moved to a new location” (tłumaczenie) „Kody statusu 301 i 308 oznaczają, że strona została trwale przeniesiona pod nowy adres.” Dalej nie rozróżnia ich.

Pracownicy Google mówili to samo nieformalnie przez lata, zanim trafiło to do dokumentacji:

  • Gary Illyes (2021): w dyskusji o tym, czy Google traktuje 308 jak 301, powiedział: “just merge that with 301 so we really don’t care.” (tłumaczenie) „po prostu łączymy to z 301, więc naprawdę nas to nie obchodzi”. Barry Schwartz opisał późniejsze dodanie tej informacji do dokumentacji jako moment formalizacji: “Three years later it was added to the official Google documents that Google treats 308 redirects like 301 redirects — so now it is official.” (tłumaczenie) „Trzy lata później dodano do oficjalnych dokumentów Google informację, że przekierowania 308 są traktowane jak 301 — więc stało się to oficjalne.”
  • John Mueller (2018): trzy lata wcześniej powiedział: “If you use it [a 308 redirect] like a 301 we’ll treat it as such.” (tłumaczenie) „Jeśli użyjesz go [przekierowania 308] jak 301, potraktujemy go właśnie tak.” To stanowisko Google poprzedzało dokumentację.

Jest jednak ważny niuans, będący tezą całego artykułu. Zaraz po zrównaniu kodów Google dodaje: “While Google treats these status codes the same way, keep in mind that they’re semantically different. Use the status code that’s appropriate for the redirect so other clients (for example, e-readers, other search engines) may benefit from it.” (tłumaczenie) „Chociaż Google traktuje te kody statusu tak samo, pamiętaj, że różnią się semantycznie. Użyj kodu odpowiedniego dla przekierowania, aby mogli na tym skorzystać inni klienci, na przykład czytniki e-booków i inne wyszukiwarki.” Innymi słowy: wybieraj kod dla poprawności i interoperacyjności, nie dla SEO.

Czy Bing traktuje 301 i 308 różnie? Również nie.

Większość tekstów na ten temat omawia tylko Google, pomijając ważną lukę. Fabrice Canel z Binga odpowiedział wprost we wrześniu 2024 roku na pytanie, czy Bing traktuje stałe 308 tak samo jak 301: “Bing treats 308 redirects the same as 301 redirects.” (tłumaczenie) „Bing traktuje przekierowania 308 tak samo jak przekierowania 301.” Schwartz zauważył, że zgadza się to z wypowiedzią Google z 2021 roku.

Obie główne wyszukiwarki mają więc jasne stanowisko: dla crawlowania, indeksowania i konsolidacji sygnałów 308 działa funkcjonalnie tak samo jak 301. Żadna nie uznaje 308 za lepszy dla SEO.

Mit do obalenia: „308 jest lepszy dla SEO / zamień wszystkie 301 na 308”

Powiem to wprost, bo słabsze materiały wciąż sugerują coś przeciwnego. Typowe przekierowanie 308 nie daje przewagi SEO nad 301 i nie ma powodu masowo zmieniać istniejących 301 na 308. To nie moja opinia, tylko stanowisko wyszukiwarek:

  • Dokumentacja Google mówi, że 308 jest “equivalent to 301.” (tłumaczenie) „równoważne z 301”.
  • Illyes: “we just merge that with 301.” (tłumaczenie) „po prostu łączymy to z 301”.
  • Canel: Bing “treats 308 redirects the same as 301 redirects.” (tłumaczenie) „traktuje przekierowania 308 tak samo jak 301”.

Masowa zamiana 301→308 nie daje żadnej korzyści rankingowej, a wprowadza ryzyko w starszych narzędziach i warstwach brzegowych, które dobrze rozpoznają tylko 301/302. To czysta praca pozorna.

Warto odróżnić to od naprawdę spornego mitu, że „301 traci lub rozcieńcza PageRank”. Ten zarzut wciąż wraca, ale Google wielokrotnie go obalało. W przypadku równoważności 301 i 308 Google, Bing i dokumentacja od 2018 roku konsekwentnie mówią to samo. To sprawa rozstrzygnięta, a nie dyskusyjna.

Kiedy 308 jest technicznie właściwym wyborem

Wybierz 308, gdy utrata metody żądania albo jego treści zepsułaby działanie, a nie pozycje:

  • Endpointy API, które przenosisz, a klienci wywołują metodami POST/PUT/DELETE.
  • Adresy webhooków — nadawca wysyła POST z danymi, których nie możesz zgubić.
  • Adresy docelowe formularzy — element <form> wysyła dane, które muszą dotrzeć pod nowy URL.
  • Logowanie i uwierzytelnianie przez POST, gdy dane logowania lub tokeny znajdują się w treści.

W przypadku POST 301 może zamienić żądanie na GET i pozostawić treść bez celu; 308 zabrania tej konwersji. Dla PUT i DELETE RFC również nie opisuje zachowania 301 w obie strony, więc nie zgaduj — reguła zachowania metody przez 308 działa niezależnie od wybranej metody.

Przed przełączeniem API, webhooka albo przepływu logowania pamiętaj, że sam kod statusu nie gwarantuje przetrwania wszystkich elementów. Sprawdź to w ramach tej samej zmiany:

  • Dane uwierzytelniające, ciasteczka i nagłówki autoryzacji. Żaden z tych kodów niczego tu nie obiecuje; sprawdź prawdziwego klienta, zamiast zakładać, że wszystko przejdzie dalej.
  • Zachowanie między originami. Przekierowanie między originami może zmienić to, co wyśle przeglądarka albo klient fetch — zweryfikuj je rzeczywistym wywołaniem, nie tylko ręcznym curl.
  • Idempotencja i podwójne skutki uboczne. Jeśli ponowione żądanie nie jest idempotentne (np. webhook tworzący rekord albo płatność POST), ponowienie po przekierowaniu może wykonać operację dwa razy. Dodaj klucz idempotencji lub kontrolę duplikatów.
  • Wdrożenie i wycofanie z uwzględnieniem cache. Odpowiedzi 301 i 308 mogą być heurystycznie buforowane, więc klient lub pośrednik, który zapamiętał poprzednią odpowiedź, może używać jej po zmianie kodu. Sprawdź nowego klienta i klienta, który odwiedził adres przed zmianą, oraz przygotuj plan wycofania.

Dlaczego 301 nadal jest pragmatycznym domyślnym wyborem

Dla wszystkiego, co jest zwykłym GET-em — a to większość przekierowań SEO — rozsądnym domyślnym kodem pozostaje 301:

  • Zwykłe zmiany adresów stron i przenoszenie treści.
  • Zmiany domeny i łączenie witryn.
  • Migracje HTTP → HTTPS.
  • Ujednolicanie wariantów www/bez www oraz adresów z końcowym ukośnikiem.

Dlaczego wybrać starszy kod, skoro 308 jest „bardziej ścisły”? Są trzy praktyczne powody:

  1. Szersze rozpoznawanie. 301 jest starszy od 308 o dwie dekady i rozpoznaje go ogromna większość przeglądarek, proxy, CDN-ów, crawlerów i narzędzi analitycznych. 308 jest dziś szeroko obsługiwany, ale długa lista starszych klientów i narzędzi brzegowych pozostaje mniej pewna.
  2. Rzeczywistość narzędzi. Wiele narzędzi domyślnie używa 301/302 albo udostępnia tylko te opcje. Wtyczki przekierowań WordPressa, kreatory reguł Cloudflare i część platform serverless/CDN mogą zwrócić 302/307 niezależnie od tego, co ustawisz.
  3. Nic nie zyskujesz. Skoro Google i Bing przetwarzają oba kody tak samo pod kątem crawlowania i indeksowania, zwykła strona nie zyskuje nic na mniej uniwersalnym kodzie.

Reguła praktyczna: zwykły GET → 301; zachowywane żądanie inne niż GET → 308.

Jak wdrożyć oba kody

Składnia jest niemal identyczna — zmienia się tylko numer.

Apache (.htaccess)

# 301 — permanent, for a normal page move
Redirect 301 /old-page /new-page

# 308 — permanent + method-preserving, for an API/form endpoint
RewriteEngine On
RewriteRule ^old-api/(.*)$ /new-api/$1 [R=308,L]

nginx

# 301
location = /old-page {
    return 301 /new-page;
}

# 308 — preserves POST body to the API
location = /old-api {
    return 308 /new-api;
}

Dotyczy to obu kodów: niektóre CDN-y, platformy edge i wtyczki CMS nie honorują skonfigurowanego 308 i zamiast niego emitują 301/302/307. Jeśli zachowanie metody ma znaczenie, sprawdź rzeczywistą odpowiedź (wykonaj curl i odczytaj wiersz statusu), zamiast ufać konfiguracji. Składnia dyrektyw zmienia się między wersjami serwerów i frameworków, więc sprawdź bieżącą dokumentację.

Dźwignia ważniejsza niż wybór 301 kontra 308: długość łańcucha

Niezależnie od kodu większy wpływ na wydajność ma krótki łańcuch. Google podąża za około 10 przekierowaniami i po tej granicy może zrezygnować; każdy dodatkowy skok zwiększa opóźnienie i ryzyko rozproszenia sygnałów. Jeden czysty skok do końcowego miejsca docelowego jest lepszy niż łańcuch technicznie poprawnych przekierowań.

Gdzie znajduje się ten artykuł

301 i 308 to dwa kody przekierowania stałego, a każdy ma osobne omówienie w tym klastrze obok odpowiedników tymczasowych (302 i jego ścisłego brata 307) oraz drugiego kodu 3xx, czyli 303. Porównania tworzą siatkę: 301 kontra 302 to stałe kontra tymczasowe, 302 kontra 307 to tymczasowa para luźna kontra ścisła, a ten artykuł — 301 kontra 308 — to para stała luźna kontra ścisła. Uważaj też na łańcuchy i pętle przekierowań. Całą rodzinę odpowiedzi serwera opisuje centrum kodów statusu HTTP, a typ przekierowania jest jednym z sygnałów kanonikalizacji omówionych w kanonikalizacji.

Try it live

These are real endpoints on this site — not a simulation. Hit them from the button, open them in a new tab, or curl -i them from your terminal, and the server answers with the actual status code this article is about.

Open in new tab ↗
Open in new tab ↗

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.