302 kontra 307: przekierowania tymczasowe

302 i 307 są tymczasowymi przekierowaniami; kluczowa różnica polega na tym, że 307 gwarantuje zachowanie metody HTTP i treści żądania. Wyjaśniamy, kiedy wybrać każdy kod, jak Google je przetwarza i dlaczego przeglądarka może pokazywać widmowe 307 HSTS.

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

302 i 307 to przekierowania tymczasowe, a Google traktuje je tak samo. 307 ma jednak ścisłą gwarancję zachowania metody żądania i treści, więc POST pozostaje POST-em; 302 historycznie dopuszczał zamianę POST na GET. Użyj 302 przy zwykłych przekierowaniach GET, a 307 przy formularzach, API, webhookach i innych żądaniach, których metoda musi przetrwać. Pamiętaj o idempotencji, danych uwierzytelniających i zachowaniu prawdziwego klienta. Niespodziewany 307 w DevTools może być wewnętrznym podniesieniem HTTP do HTTPS przez HSTS, a nie odpowiedzią serwera. Nie ma przewagi SEO; w kolejności preferuję 307 / 302 / 303, ale wybierz kod dla poprawności technicznej.

TL;DR — 302 i 307 to przekierowania tymczasowe i Google przetwarza je tak samo: dokumentacja mówi, że 307 jest „równoważne 302, a Mueller stwierdził, że „z punktu widzenia SEO nie ma to większego znaczenia”. Żaden kod nie sygnalizuje, że cel powinien stać się kanoniczny, a Google nie opublikowało podziału wartości linków między nimi. Różnica dotyczy zachowania metody: automatyczne podążanie za 307 musi zachować metodę (POST pozostaje POST-em), a 302 pozwala klientowi zmienić POST na GET. Dokładne bajty treści, dane uwierzytelniające i zachowanie między originami nadal zależą od klienta, więc trzeba to sprawdzać. Po 307 sięgaj, gdy utrata metody psuje działanie — przy API, formularzach i przepływach POST/webhook/płatność/logowanie — ale pamiętaj o możliwości powtórzenia nieidempotentnego żądania. Zwykły 302 wystarczy przy przekierowaniach GET, w tym przy testach A/B, do których Google wyraźnie go zaleca. Uważaj też na „widmowe 307” HSTS, kontekstowe zachowanie frameworków (Next.js opisuje 303 dla Server Actions i 307 w innych miejscach) oraz brak osobnej wskazówki Binga dla 302 kontra 307. Moja kolejność dla przekierowań tymczasowych to 307 / 302 / 303, przed odświeżeniem meta/HTTP — ale najpierw sprawdź cache, starszych klientów i idempotencję.

Oba są tymczasowe — od tego trzeba zacząć

Najpierw najważniejsze: 302 i 307 należą do tej samej kategorii. Google grupuje 302 (Found), 303 (See Other) i 307 (Temporary Redirect) jako „przekierowania tymczasowe” i zachowuje się wobec nich tak samo: „Googlebot podąża za przekierowaniem, ale potok indeksowania nie używa go jako sygnału, że cel powinien być kanoniczny.” Innymi słowy, tymczasowe przekierowanie domyślnie zachowuje kanoniczność źródłowego URL-a; nie przekazuje celowi jego sygnałów tak jak 301/308. Evidence for this claim Google Search does not use a 302, 303, or 307 temporary redirect itself as a signal that the target should be canonical, although other signals can still lead to target indexing or selection. Scope: temporary redirects Confidence: high · Verified: Redirects and Google Search

To porównanie poziom niżej względem pary stałej: 301/308 są parą stałą, 302/307 — tymczasową, a logika „wyższy numer zachowuje metodę” działa w obu parach.

Jedyna realna różnica: zachowanie metody i treści

Oto różnica w jednym zdaniu: gdy klient automatycznie podąża za 307, aktualna specyfikacja HTTP (RFC 9110) wymaga zachowania tej samej metody; 302 pozwala klientowi zmienić POST na GET. To gwarancja na poziomie specyfikacji dotycząca metody, a nie obietnica zachowania każdego bajtu treści, danych uwierzytelniających czy zachowania między originami. Te elementy trzeba sprawdzić rzeczywistym żądaniem.

Powód tej niejednoznaczności wynika z historii specyfikacji. W epoce HTTP/1.0 tekst 302 technicznie mówił, że klient nie powinien zmieniać metody, ale wczesne przeglądarki — najpierw Netscape, później praktycznie wszystkie — ignorowały to i po 302 cicho zamieniały metody inne niż GET, zwłaszcza POST, na GET. Niespójne, lecz powszechne zachowanie stało się standardem de facto. HTTP/1.1 (RFC 2616, później ujęty w RFC 7231 i obecnym RFC 9110) sformalizował podział na dwa jawne kody, aby zakończyć to zamieszanie:

  • 303 (See Other) — pobiera cel przekierowania metodą GET albo HEAD (nie po prostu „zawsze GET”; RFC 9110 dopuszcza obie bezpieczne metody). To właściwe zachowanie dla wzorca „POST, a następnie przekierowanie do strony wyniku, którą można bezpiecznie odświeżyć”.
  • 307 (Temporary Redirect) — przy automatycznym podążaniu ściśle zachowuje metodę, zgodnie ze specyfikacją; RFC 9110 nie zmusza jednak każdego klienta do podążania za przekierowaniem.

MDN zwięźle opisuje skutek praktyczny: “The difference between 307 and 302 is that 307 guarantees that the client will not change the request method and body when the redirected request is made. With 302, older clients incorrectly changed the method to GET.” (tłumaczenie) „Różnica między 307 a 302 polega na tym, że 307 gwarantuje, iż klient nie zmieni metody ani treści żądania podczas przekierowania. W przypadku 302 starsze klienty nieprawidłowo zmieniały metodę na GET.” 307 nie dodał więc tyle nowej możliwości, ile usunął niejednoznaczność: jest wersją gwarantowaną przez specyfikację tego, co poprawnie działający 302 miał robić od początku.

Porównanie obok siebie:

Typ żądania302307
Przekierowanie zwykłego GETBez problemu — ponowione jako GETBez problemu — ponowione jako GET
POST z danymi formularzaSpecyfikacja pozwala klientowi zmienić je na GET (RFC 9110 §15.4.3) — zależy od klientaMetoda zachowana przy automatycznym podążaniu — treść zwykle również, ale sprawdź dokładne bajty i dane uwierzytelniające
API / inne niż GET (PUT, DELETE, webhook)Specyfikacja mówi konkretnie o POST — nie zakładaj, że każda metoda inna niż GET zmieni się tak samoMetoda zachowana przez specyfikację; sprawdź treść, dane uwierzytelniające i zachowanie między originami na rzeczywistym kliencie

Dwie uwagi wymagają precyzji. Zezwolenie RFC na zmianę metody przy 302 wymienia POST, a nie każdą metodę — nie uogólniaj tego do “302 always breaks PUT/DELETE (tłumaczenie) „302 zawsze psuje PUT/DELETE” bez sprawdzenia konkretnego klienta. Ponadto żaden z tych kodów nie jest domyślnie buforowany tylko ze względu na status: RFC 9111 nie wymienia 302 ani 307 wśród kodów heurystycznie buforowalnych na podstawie samego statusu. Buforowanie zależy od nagłówków Cache-Control/Expires, nie od wybranego kodu. Evidence for this claim Do not generalize the RFC's 302 POST-to-GET allowance into a claim that PUT, DELETE, or every non-GET method will change; client-specific evidence is required. Scope: 302, 303, and 307 responses Confidence: high · Verified: RFC 9110: HTTP Semantics

Moja definicja z Ahrefs pasuje do części o zachowaniu metody: “A 307 redirect is the same as a 302 redirect, except it retains the HTTP method (POST, GET) of the original request when performing the redirect.” (tłumaczenie) „Przekierowanie 307 jest tym samym co 302, z wyjątkiem zachowania metody HTTP (POST, GET) pierwotnego żądania podczas przekierowania.” Evidence for this claim RFC 9110 defines both 302 and 307 as temporary redirects; 307 forbids changing the request method, while 302 permits POST-to-GET rewriting for historical reasons. Scope: HTTP semantics for 302 and 307 responses. Confidence: high · Verified: IETF: RFC 9110 §§15.4.3, 15.4.8

Czy Google traktuje 302 i 307 różnie w SEO?

Nie — Google jest w tej sprawie wyjątkowo jednoznaczne. To rozstrzygnięty i mało kontrowersyjny temat, podobnie jak 301 kontra 308.

W dokumentacji Google dotyczącej kodów statusu HTTP wiersz 302 mówi, że crawlery Google podążają za przekierowaniem i używają go jako słabego sygnału, aby przetworzyć cel, a wiersz 307 zawiera dosłownie „Equivalent to 302 (tłumaczenie) „Równoważne 302”. Google dodaje uwagę dotyczącą obu par: “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 odpowiedniego dla przekierowania, aby mogli skorzystać inni klienci.”

To odpowiedź dotycząca przetwarzania przez crawlery. Google traktuje oba kody tak samo przy pobieraniu i śledzeniu przekierowania; prosi tylko o wybór semantycznie poprawnego kodu dla innych klientów. Evidence for this claim Google treats 307 as equivalent to 302 for Search while noting that the two status codes are semantically different. Scope: Google Search redirect handling; HTTP clients still need the appropriate status code. Confidence: high · Verified: Google: HTTP status codes and Search

Warto oddzielić to od wyniku indeksowania. Przewodnik Google po przekierowaniach grupuje 302, 303 i 307 jako „przekierowania tymczasowe” i stwierdza, że “the indexing pipeline doesn’t use the redirect as a signal that the redirect target should be canonical.” (tłumaczenie) „potok indeksowania nie używa przekierowania jako sygnału, że jego cel powinien być kanoniczny.” To użyteczna gwarancja, ale nie obiecuje, że źródło zachowa pozycje ani że cel nigdy nie zostanie zindeksowany innymi sygnałami. „302 i 307 są przetwarzane tak samo” oraz „żaden nie jest sygnałem kanonikalizacji celu” to dwa osobne, prawdziwe stwierdzenia — nie twierdzenie o identycznym przekazywaniu PageRanku.

John Mueller mówi to samo. W podcaście Google „Porozmawiajmy o przekierowaniach” Martin Splitt zapytał, dlaczego 307 i 308 istnieją obok 301 i 302. Mueller odpowiedział: “I had to look this up recently. And usually, with a 301 and 302, what is forwarded are GET requests.” (tłumaczenie) „To sprawdziłem niedawno. W typowej sytuacji 301 i 302 przekazują dalej żądania GET.” … “And with 307, 308, it also forwards POST requests.” (tłumaczenie) „A przy 307 i 308 przekazywane są również żądania POST.” Następnie padło rozstrzygnięcie SEO: “I think for SEO, it doesn’t really matter. It’s more like, I don’t know… Does it work for APIs or not? And usually, APIs are not something that you need to have indexed directly in Search.” (tłumaczenie) „Myślę, że dla SEO nie ma to większego znaczenia. Chodzi raczej o to, czy działa to dla API; API zwykle nie trzeba bezpośrednio indeksować w wyszukiwarce.”

Wniosek jest funkcjonalny, nie rankingowy: jedynym powodem wyboru 307 zamiast 302 jest pytanie „czy działa dla API?”. Nie ma wiarygodnego źródła pierwotnego mówiącego o przewadze SEO któregoś kodu.

Czy Bing traktuje 302 i 307 różnie?

Szczerze: Bing tego nie powiedział. Publiczne materiały o przekierowaniach — wpis z 2011 roku o 301, 302 i kanonikalizacji oraz wpis „Website Migration with Bing” z 2020 roku — omawiają tylko podział stałe 301 kontra tymczasowe 302 i w ogóle nie wymieniają 307 ani 308. Nie znalazłem wypowiedzi przedstawiciela Binga konkretnie o 302 kontra 307.

Powiedzmy to więc jasno, zamiast zakładać równoważność: nie ma wypowiedzi Binga, która rozróżniałaby 302 i 307. Warto znać udokumentowane zachowanie Binga w ogólnej dyskusji o przekierowaniach tymczasowych: jeśli Bingbot zobaczy ten sam 302 dostatecznie wiele razy, zacznie traktować go jak 301 i konsolidować sygnały, ale Bing publicznie nie potwierdził, że dotyczy to również powtarzanych 307. To rzeczywista luka w dokumentacji, a nie fakt o 307.

Kiedy 307 jest technicznie właściwym wyborem

Każde przekierowanie, przy którym utrata pierwotnej metody lub treści zepsułaby działanie:

  • API i endpointy webhookówPOST/PUT/DELETE, które muszą dotrzeć pod nowy URL z metodą i danymi.
  • Wysyłanie formularzy (przepływy POST) — jak ujął to Mueller: “if you have a— I’d almost say like a broken setup, that you have a form on one domain and the results are forwarded to a different one, then you would use the 307, 308.” (tłumaczenie) „jeśli masz — prawie powiedziałbym — wadliwą konfigurację, formularz w jednej domenie, a wyniki przekazywane do innej, użyj 307 lub 308”.
  • Przekazania płatności, checkoutu i logowania przez POST — wszędzie tam, gdzie zgubienie treści po cichu psuje transakcję.

Warto podkreślić ryzyko: gwarancja zachowania metody przez 307 działa w obie strony. Jeśli pierwotne żądanie nie jest idempotentne — obciążenie płatności, złożenie zamówienia lub inny skutek uboczny — automatyczne podążanie za 307 powtarza dokładnie to żądanie pod nowym adresem. Zwykle tego chcemy, ale ponowienie klienta albo łańcuch przekierowań może wykonać nieidempotentną operację więcej niż raz. Dodaj klucz idempotencji lub kontrolę duplikatów po stronie celu.

Ważny powód, dla którego programiści spotykają 307 bez świadomego wyboru: niektóre frameworki i platformy edge domyślnie używają kodu zachowującego metodę przy żądaniach innych niż GET. Najlepszym udokumentowanym przykładem jest Next.js — jego funkcja redirect() zwraca 303 w Server Action i 307 w innych obsługiwanych kontekstach. Sprawdź wersję Next.js, zamiast uogólniać zachowanie na inne frameworki, CDN-y i load balancery. Niespodziewany 307 lub 303 często jest celowym działaniem platformy zależnym od metody, ale potwierdź to dla własnego stosu.

Kiedy 302 jest pragmatycznym domyślnym wyborem

Zwykłe tymczasowe przekierowania żądań GET nie mają metody, którą trzeba zachować, więc gwarancja 307 nic tu nie daje:

  • Przekierowania geograficzne i językowe (z typową przestrogą, aby nie blokować całej treści według regionu).
  • Testy A/Bwłasne wytyczne Google dotyczące testów witryny wyraźnie zalecają 302, a nie 301, dla testowych wariantów kierowanych przekierowaniem, ponieważ zmiana jest tymczasowa.
  • Tryb konserwacji / komunikat „wrócimy wkrótce” — tylko gdy istnieje rzeczywisty zasób, do którego można skierować odwiedzających. Jeśli cała witryna jest niedostępna, wytyczne Google wskazują raczej na 503 (Service Unavailable). Gdy przekierowywane jest żądanie inne niż GET, np. checkout albo wywołanie API, 307 powtórzy je pod nowym URL-em, co przy skutkach ubocznych nie jest automatycznie bezpieczne.
  • Przekierowania mobile↔desktop (m-dot) — Mueller podał je jako przykład, w którym 302 jest właściwym kodem: “a 302 redirect would be the right one because next time someone goes there, you don’t really know if they want to go to the mobile version or the desktop version.” (tłumaczenie) „302 byłoby właściwe, bo następnym razem nie wiadomo, czy odwiedzający chce wersję mobilną, czy desktopową.” Cel zależy od odwiedzającego, więc nie jest to stała zmiana.

„Widmowe 307” HSTS — 307, którego serwer nigdy nie wysłał

Ta sekcja dotyczy zupełnie innego problemu niż wybór kodu i jest potrzebna, bo pomieszanie tych zjawisk powoduje prawdziwe zamieszanie przy diagnozowaniu łańcuchów.

Jeśli witryna wysyła przez HTTPS nagłówek HSTS (Strict-Transport-Security), przeglądarka zapamiętuje go i przy późniejszej próbie wejścia na wersję http:// sama zmienia żądanie na https:// — URI zostaje przepisane, zanim żądanie dotknie sieci. Obecne wersje Chrome pokazują to wewnętrzne podniesienie w DevTools jako 307, ale serwer go nie wydał; dokładna etykieta i sposób prezentacji zależą od wersji Chrome, a nie od wymogu specyfikacji HTTP/HSTS. John Mueller opisał to tak: “After seeing the HTTPS URL with the HSTS header (for example, with any redirect from the HTTP version), Chrome will act like it’s seeing a 307 redirect the next time you try to access the HTTP page.” (tłumaczenie) „Po zobaczeniu adresu HTTPS z nagłówkiem HSTS Chrome przy następnej próbie wejścia na stronę HTTP zachowa się tak, jakby widział przekierowanie 307.” Kluczowe doprecyzowanie: “Your server’s not returning a 307, Chrome is just showing it to you as such to explain that it’s doing the redirect for you.” (tłumaczenie) „Twój serwer nie zwraca 307; Chrome tylko tak to pokazuje, aby wyjaśnić, że samo wykonuje przekierowanie.”

W moim tekście o kodach statusu opisałem to podobnie: istnieje odrębne znaczenie “307 HSTS Policy” (tłumaczenie) „polityka HSTS 307” (wymusza HTTPS), różne od “307 Temporary Redirect” (tłumaczenie) „tymczasowe przekierowanie 307”. Niuans SEO jest taki: “When web servers require clients to only use HTTPS connections (HSTS policy), Google won’t see the 307 because it’s cached in the browser.” (tłumaczenie) „Gdy serwery wymagają od klientów wyłącznie połączeń HTTPS (polityka HSTS), Google nie zobaczy 307, bo jest on buforowany w przeglądarce.” Jeśli widzisz w panelu Network 307, którego nie konfigurowałeś, najpierw sprawdź HSTS.

Popularne mity

  • „307 nie przekazuje tyle samo wartości SEO co 302”. Brak podstaw — dokumentacja Google mówi, że 307 jest „Equivalent to 302(tłumaczenie) „równoważne 302” w sposobie przetwarzania, a żaden kod nie jest sygnałem kanonikalizacji celu. Google nie opublikowało jednak wzoru PageRanku ani wartości linków, więc nie twierdź, że transfer jest dokładnie równy lub nierówny. Precyzyjnie można powiedzieć tylko, że Google przetwarza je tak samo.
  • “302 is the safer/recommended choice because it’s clearer how search engines treat it.” (tłumaczenie) „302 jest bezpieczniejszym/zalecanym wyborem, bo sposób obsługi przez wyszukiwarki jest jaśniejszy”. To przesada. Obsługa 307 jest równie dobrze udokumentowana (“Equivalent to 302 (tłumaczenie) „równoważne 302”); daje on gwarancję zachowania metody i treści, której 302 nie daje. Niektóre poradniki zewnętrzne twierdzą inaczej — zobacz uwagę w materiałach.
  • „307 w panelu Network oznacza źle skonfigurowany serwer”. Często nie — przy HSTS to własne podniesienie HTTP→HTTPS przez Chrome, a nie odpowiedź serwera.
  • „302 zawsze zmienia POST na GET, więc nie używaj go przy formularzu”. Przesada w przypadku współczesnych przeglądarek. Zamiana POST→GET była realnym problemem starszych klientów i jest powodem istnienia gwarantowanego 307, ale nie dowodzi, że każdy dzisiejszy 302 gubi dane. 302 jest niejednoznaczny, nie powszechnie zepsuty.
  • „Zamień wszystkie tymczasowe przekierowania na 307 dla lepszych pozycji”. Fałsz i niepotrzebna praca. Jedynym sensownym powodem jest rzeczywista potrzeba zachowania metody i treści albo zabezpieczenie na przyszłość.
  • „303 i 307 to właściwie to samo”. Nie — 303 celowo wymusza GET (wzorzec POST, potem strona wyniku), a 307 zachowuje metodę i treść. To funkcjonalne przeciwieństwa.

Moja rekomendacja

W przypadku przekierowań tymczasowych preferuję kolejność 307 / 302 / 303, przed odświeżeniem meta (0) i HTTP refresh (0). Umieszczam 307 nad 302 nie dlatego, że pomaga SEO — nie pomaga — lecz dlatego, że stałe używanie kodu zachowującego metodę rzadziej wymaga późniejszej zmiany: zwykły GET działa po 307, a gdy później przeniesiesz formularz albo API, jesteś już zabezpieczony. To argument za kompletnością, ale nie jest bezkosztowy: polityka „307 domyślnie” nadal wymaga dyscypliny nagłówków cache, obsługi wspieranych starszych klientów i zabezpieczeń idempotencji dla celu, który nie jest zwykłym GET-em. Mueller ujął tę kompletność tak: “if you always use them, then you’re always safe.” (tłumaczenie) „jeśli zawsze ich używasz, zawsze jesteś bezpieczny”. Zwykły 302 jest jednak całkowicie poprawny, a w przypadku m-dot technicznie właściwszy jest 302.

Gdzie znajduje się ten artykuł

302 i 307 to dwa tymczasowe kody przekierowań 3xx. W tym klastrze mają osobne omówienia obok pary stałej (301, 308), zawsze-GET-owego 303 i porównań rodzeństwa: 301 kontra 308 oraz 301 kontra 302. Uważaj także na łańcuchy i pętle przekierowań. Całą rodzinę odpowiedzi serwera opisuje centrum kodów statusu HTTP; typ przekierowania jest też 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.