Przekierowanie 308 Permanent Redirect

Czym jest stałe przekierowanie 308, jak zachowuje metodę HTTP w przeciwieństwie do 301, jak Google przekazuje przez nie sygnały oraz kiedy warto go użyć.

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

308 Permanent Redirect oznacza stałe przeniesienie i działa jak 301, ale rygorystycznie zachowuje metodę żądania pod nowym adresem; zgodny klient ponawia więc również treść, a POST pozostaje POST-em. Google opisuje 308 jako równoważne 301, a Bing traktuje oba kody tak samo, więc nie ma przewagi SEO. Użyj 308 przy API, webhookach, formularzach i logowaniu POST, gdy metoda i dane muszą dotrzeć bez zmian. Przy zwykłej zmianie strony, HTTPS albo domeny 301 pozostaje pragmatycznym wyborem dzięki szerszej obsłudze narzędzi. Sprawdź jednak prawdziwego klienta, cache, dane uwierzytelniające i idempotencję; nie każda wtyczka CMS, warstwa CDN ani starsze proxy potrafi wyemitować 308, a część nadal oferuje tylko 301/302/307.

TL;DR — 308 to stałe przekierowanie, które łączy ten sam sygnał kanonikalizacji co 301 z rygorystycznym zachowaniem metody. Dokumentacja Google mówi “Equivalent to 301 (tłumaczenie) „równoważne 301”, ale klient nie może zmienić metody pod nowym adresem; przy zgodnym kliencie wraz z nią przechodzi treść żądania. Kod powstał, bo HTTP miało tymczasowy, zachowujący metodę 307, ale brakowało stałego odpowiednika — lukę wypełnił RFC 7538 z 2015 roku, a RFC 9110 wskazuje 308 w definicji 301. Dla SEO oba kody są wymienne. Wybierz 308 dla migracji API, webhooków i formularzy POST, ale zweryfikuj metodę oraz treść na własnym kliencie. Przy zwykłej stronie 301 nadal jest domyślnym wyborem dzięki szerszej obsłudze; część wtyczek CMS, interfejsów edge i starszych proxy wciąż oferuje tylko 301/302/307.

Co 308 oznacza mechanicznie

308 Permanent Redirect niesie ten sam komunikat co 301 — zasób jest teraz na stałe pod nowym adresem — oraz dodaje gwarancję, której 301 nie daje: klient nie może zmienić metody żądania w drodze do celu. Ponieważ ponawia to samo żądanie, przy kliencie zgodnym ze specyfikacją razem z nim przechodzi treść. To skutek gwarancji metody, a nie osobna certyfikowana obietnica, więc w ważnych integracjach sprawdź wszystko od początku do końca. MDN opisuje 308 jako kod zachowujący metodę i w praktyce treść, podczas gdy 301 może tego nie robić.

W przewodniku Ahrefs po przekierowaniach ujmuję to tak: “A 308 redirect is the same as a 301 redirect, except it retains the HTTP method of the original request, GET or POST, when performing the redirect.” (tłumaczenie) „Przekierowanie 308 jest tym samym co 301, z wyjątkiem zachowania metody HTTP pierwotnego żądania, GET lub POST.” Krócej, w przewodniku po kodach statusu HTTP: “308 Permanent Redirect – Has the same functionality as a 301 redirect, except you can’t switch between POST and GET.” (tłumaczenie) „308 Permanent Redirect ma tę samą funkcję co 301, ale nie pozwala przełączać POST i GET.” Evidence for this claim RFC 7538 defines 308 Permanent Redirect as a permanent move whose redirect follow-up must not change the request method. Scope: HTTP semantics for 308 responses. Confidence: high · Verified: IETF: RFC 7538 §3 — 308 Permanent Redirect

Zobaczmy różnicę na konkretnym przykładzie. Klient wysyła zamówienie metodą POST do /api/orders z treścią JSON:

POST /api/orders HTTP/1.1
Host: shop.example.com
Content-Type: application/json

{ "sku": "A-100", "qty": 2 }

Jeśli endpoint odpowie kodem 301, a klient zastosuje historyczne zezwolenie na zmianę metody, żądanie może dotrzeć pod nowy adres jako pusty GET — bez treści, a zamówienie przepadnie. Po 308 klient musi ponowić POST pod nowym adresem; zgodny klient przeniesie treść i zamówienie zostanie obsłużone. Sprawdź to jednak w logach własnego klienta i serwera, zamiast zakładać uniwersalne zachowanie. To cała praktyczna różnica: ujawnia się tylko wtedy, gdy pierwotne żądanie nie było zwykłym GET-em.

Dlaczego powstał 308 — historia specyfikacji

To fragment pomijany przez większość objaśnień, a najlepiej pokazuje, skąd wziął się ten kod.

Najpierw był 307. HTTP miało już tymczasowe przekierowanie zachowujące metodę — 307 — na długo przed powstaniem stałego odpowiednika. Główna specyfikacja (RFC 7231) nie definiowała stałego odpowiednika 307. Istniał więc tymczasowy kod „zachowaj metodę” i stały kod „możesz zmienić metodę” (301), ale brakowało stałego „zachowaj metodę”.

RFC 7538 wypełnił lukę. 308 powstał jako brakujący stały 307 — najpierw eksperymentalnie w RFC 7238 (czerwiec 2014), a następnie jako standard w RFC 7538 (kwiecień 2015). To uzupełnienie realnej luki, nie zamiennik 301.

Obecna specyfikacja wskazuje na niego wprost. RFC 9110, czyli aktualna specyfikacja semantyki HTTP, nadal opisuje niejednoznaczność 301 i w jego definicji wskazuje 308 jako rozwiązanie: klient “MAY change the request method from POST to GET for the subsequent request… If this behavior is undesired, the 308 (Permanent Redirect) status code can be used instead.” (tłumaczenie) „MOŻE zmienić metodę żądania z POST na GET w kolejnym żądaniu… Jeśli takie zachowanie jest niepożądane, można użyć kodu 308 (Permanent Redirect).” To jedno zdanie wyjaśnia sens 308. RFC 9110 dodaje w sekcji 308 uczciwe zastrzeżenie: kod “is much younger (June 2014) than its sibling codes and thus might not be recognized everywhere.” (tłumaczenie) „jest znacznie młodszy (z czerwca 2014 r.) od swoich kodów siostrzanych, więc może nie być rozpoznawany wszędzie.”

Zamiana POST na GET przy 301 nie jest błędem — to udokumentowane „z powodów historycznych” zezwolenie zapisane w specyfikacji. 308 jest oficjalnym sposobem, aby z niego zrezygnować.

301 kontra 308 — praktyczna różnica w jednej tabeli

Zwykłe żądanie GETPOST/PUT/DELETE z treścią
301Zachowuje się tak samo jak 308Może zostać zmienione na GET; treść może zniknąć
308Zachowuje się tak samo jak 301Metoda i treść muszą zostać ponowione
Sygnał SEOTaki sam (stały, konsoliduje)Taki sam (stały, konsoliduje)

Wniosek: dla ogromnej większości przekierowań — zwykłych GET-ów — 301 i 308 robią dokładnie to samo. Gwarancja ma znaczenie dopiero wtedy, gdy występuje metoda inna niż GET i treść żądania. Pełne porównanie znajdziesz w osobnym artykule 301 kontra 308.

Czy Google traktuje 308 tak samo jak 301 w SEO?

Tak, jednoznacznie i zgodnie z dokumentacją. Dokumentacja Google dotycząca kodów statusu HTTP opisuje 301 jako przekierowanie, za którym Google podąża i którego używa jako silnego sygnału do przetworzenia celu, a 308 jako “Equivalent to 301.” (tłumaczenie) „równoważne 301”. Dodaje rozsądną uwagę: “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 tak samo, pamiętaj, że różnią się semantycznie. Użyj kodu właściwego dla przekierowania, aby mogli skorzystać inni klienci.” Innymi słowy, Google nie ukarze za wybór „niewłaściwego” kodu, ale inne oprogramowanie polega na tej różnicy. Evidence for this claim Google treats 308 as equivalent to 301 for Search and groups both as permanent redirects. Scope: Google Search processing; the two status codes remain semantically different for HTTP clients. Confidence: high · Verified: Google: HTTP status codes and Search Google: Redirects and Google Search

Przewodnik Google po przekierowaniach umieszcza oba kody w tej samej kategorii: “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.” Wytyczne dotyczące migracji również wymieniają stałe przekierowania HTTP „takie jak 301 i 308”.

Warto wiedzieć, że ta równoważność nie zawsze była zapisana w dokumentacji. Gary Illyes mówił, że Google wewnętrznie scala 308 z 301, a relacja Search Engine Roundtable opisała dodanie tej informacji do oficjalnych dokumentów jako moment, od którego można było powoływać się na nią bez zastrzeżeń. Dokładne cytaty znajdują się w karcie Quotes.

Czy Bing traktuje 308 tak samo jak 301?

Tak. Bing nie ma osobnej strony dokumentacji o 308, ale Fabrice Canel z Microsoftu potwierdził to bezpośrednio na X we wrześniu 2024 roku; relacja Search Engine Roundtable podaje, że Bing traktuje przekierowania 308 tak samo jak 301. To najważniejsze publiczne stanowisko Binga — jego dosłowne brzmienie znajdziesz w karcie Quotes.

Kiedy naprawdę używać 308

Samodzielny argument za 308 dotyczy niemal zawsze żądania innego niż GET.

Migracje endpointów API i wersji. Przeniesienie /v1/ do /v2/ albo zmiana hosta API to podręcznikowy przypadek. Klienci wysyłają do tych endpointów POST/PUT/PATCH/DELETE z rzeczywistą treścią. 308 gwarantuje przejście metody i ładunku; 301 może po cichu je obniżyć i zgubić żądanie.

Migracje witryn z dużą liczbą POST-ów. Checkout, logowanie i adresy formularzy wysyłają dane. Jeśli któryś z tych URL-i zmienia się podczas migracji, 308 zachowa wysłanie, podczas gdy 301 może tego nie zrobić.

Zmiany adresów webhooków. Gdy inna usługa wysyła POST do przenoszonego webhooka, 308 mówi jej klientowi HTTP, aby ponowił POST pod nowym adresem wraz z treścią — dokładnie tego potrzebuje odbiorca webhooka.

Wspólny mianownik jest prosty: użyj 308 wszędzie tam, gdzie utrata treści albo ciche przejście metody na GET zepsułoby działanie, a nie tylko przesunęło sygnały SEO.

Przed włączeniem któregokolwiek z tych przekierowań przetestuj je jak integrację, nie tylko jak kod statusu:

  • Odtwórz prawdziwą metodę i ładunek w testowej kopii nowego endpointu.
  • Sprawdź, czy nagłówki autoryzacji i ciasteczka powinny przejść, i potwierdź, że faktycznie przechodzą.
  • Jeśli pierwotne żądanie nie jest idempotentne (np. POST tworzący zamówienie), obserwuj podwójne skutki uboczne podczas skoku.
  • Potwierdź zachowanie query stringa i nagłówka Content-Type, nie tylko treści.
  • Zweryfikuj, czy prawdziwy klient — nadawca webhooka, SDK API, przeglądarka — automatycznie podąża za 308, zanim wycofasz stary endpoint. Nie każdy klient HTTP robi to domyślnie.

Kiedy 301 nadal jest pragmatycznym domyślnym wyborem

Dla wszystkiego, co jest zwykłym GET-em, 301 pozostaje rozsądnym domyślnym kodem:

  • Zwykłe zmiany adresów stron i przenoszenie treści.
  • Migracje HTTP → HTTPS.
  • Zmiany domeny i standardowe migracje witryny.
  • Ujednolicanie końcowych ukośników oraz wariantów www/bez www.

Żądanie jest tu zwykłym GET-em, więc gwarancja 308 nic nie daje, a 301 wygrywa uniwersalnością. SEO nie ponosi kosztu żadnego wyboru. Nie zmieniaj masowo istniejących 301 na 308 dla rzekomego wzrostu pozycji — takiej korzyści nie ma. W hierarchii preferencji z przewodnika Ahrefs po przekierowaniach 308 i 301 zajmują najwyższą pozycję, przed odświeżeniem meta, JavaScriptem i innymi obejściami; są równorzędne, a nie ustawione w drabince.

Zastrzeżenia dotyczące wdrożenia i obsługi — rzeczywiste ryzyko w 2026 roku

Obsługa przeglądarek nie jest już głównym ryzykiem. Według bieżących danych caniuse 308 ma około 96,5% globalnej obsługi — sprawdź tabelę, bo liczba się zmienia. Luki dotyczą głównie dawno porzuconych przeglądarek: wersji sprzed IE11, dawnych Chrome/Firefox/Safari i starego Android Browser. Jeśli widzisz ostrzeżenie, że IE11 nie działa z 308, dotyczy ono nieaktualnego rynku.

Narzędzia są dziś ważniejszym zastrzeżeniem. Nie każda warstwa udostępnia opcję 308: część wtyczek CMS, interfejsów reguł przekierowań CDN/edge i starszych proxy lub load balancerów nadal pozwala wybrać tylko 301/302/307. Zanim oprzesz się na 308, sprawdź, czy faktyczna warstwa odpowiedzi emituje ten kod, zamiast po cichu go obniżać — karta Scripts zawiera prosty test statusu na przewodzie. Uwaga RFC 9110 o tym, że kod “much younger… might not be recognized everywhere” (tłumaczenie) „jest młodszy i może nie być rozpoznawany wszędzie”, dotyczy ogólnego wdrożenia, a w 2026 roku w praktyce widać ją głównie w narzędziach, nie w popularnych przeglądarkach.

Niestandardowy przypis: „308 Resume Incomplete”

Jeden szczegół pokazuje, jak młody jest ten kod: w praktyce 308 nie służy wyłącznie do przekierowań. API wysyłania plików Google Drive używa go także w innym znaczeniu — „Resume Incomplete” — aby zasygnalizować zatrzymanie wysyłania fragmentu i potrzebę wznowienia przez klienta. John Mueller zwrócił na to uwagę, a MDN dokumentuje to niestandardowe użycie. Nie zmienia to znaczenia 308 jako przekierowania, ale przypomina, że jest to kod młodszy i mniej „oswojony” niż czcigodny 301.

Łańcuchy przekierowań działają tak samo

Nic z powyższego nie zmienia zasad łańcuchów. Crawlery Google domyślnie podążają za maksymalnie 10 skokami, choć to wartość domyślna, a nie uniwersalna stała — konkretne produkty mogą zachowywać się inaczej. Limit jest taki sam dla 301 i 308. Jeśli łączysz kilka przekierowań, stosuj tę samą higienę łańcuchów i pętli; gdy możesz, skróć wszystko do jednego skoku. Szczegóły znajdziesz w osobnym artykule o łańcuchach przekierowań.

Try it live

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

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.