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.
Języki
1 sygnał dowodowy na tej stronie
- Powiązane działające narzędzieHTTP Status & Redirect Checker
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”: kierują odwiedzających gdzie indziej na pewien czas, a pierwotny URL pozostaje domyślnie kanoniczny. Google przetwarza je tak samo, więc różnica SEO nie ma praktycznego znaczenia. Różnica techniczna jest jedna: 307 musi zachować typ żądania (wysłanie formularza pozostaje wysłaniem formularza), podczas gdy 302 historycznie pozwalał zamienić POST na zwykłe pobranie strony. Używaj 302 przy zwykłych przekierowaniach, a 307, gdy przenosisz formularz lub API wysyłające dane — pamiętając, że domyślne używanie 307 wszędzie nie jest całkowicie bezkosztowe.
Co naprawdę oznaczają 302 i 307
302 i 307 to przekierowania: prosisz o jeden adres URL, a trafiasz pod inny. Liczba jest kodem statusu HTTP wysyłanym przez serwer i niesie komunikat dla przeglądarek oraz wyszukiwarek.
- 302 — „Found” (znaleziono, tymczasowo). Oryginalne przekierowanie tymczasowe. Mówi: „na razie idź tutaj, ale stary adres nadal jest właściwy — wrócę”.
- 307 — „Temporary Redirect” (tymczasowe przekierowanie). Ten sam komunikat — tymczasowo, stary URL nadal obowiązuje — z dodatkową obietnicą: przeglądarka musi ponowić dokładnie to samo żądanie, z metodą GET albo POST i jego danymi.
To kody siostrzane. Przydatne ujęcie brzmi: 307 to 302 z gwarancją, że przeglądarka po cichu nie zamieni wysłania formularza na zwykłe pobranie strony.
Czy ma to znaczenie dla SEO?
Nie w sposób, który zwykle martwi właścicieli witryn. Dokumentacja Google opisuje 307 jako „równoważne 302” w sposobie, w jaki crawlery przetwarzają i śledzą przekierowanie. Oba kody są sygnałami tymczasowymi, więc Google domyślnie nie uznaje celu za stronę kanoniczną tylko dlatego, że do niego przekierowano. Dokumentacja nie rozstrzyga, czy 302 i 307 przekazują identyczną ilość wartości linków; jasno mówi natomiast, że żaden z nich nie przekazuje celowi sygnałów źródła tak jak stałe przekierowanie. Jeśli ktoś twierdzi, że 307 „przekazuje mniej wartości” niż 302, poproś o źródło — Google takiego nie opublikowało. 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
Kiedy używać którego kodu?
- Zwykłego 302 używaj do codziennych przekierowań tymczasowych — sezonowej strony promocyjnej, testu A/B, strony konserwacji albo kierowania do strony głównej właściwej dla kraju.
- 307 wybierz, gdy przekierowywany zasób wysyła dane — przy wysłaniu formularza, wywołaniu API albo logowaniu czy płatności przez POST. Gwarancja 307 (zachowanie metody i danych) ma wtedy znaczenie, bo zwykły 302 może pozwolić starszej przeglądarce zamienić POST na GET i zgubić dane.
Jeden szczegół, który często myli
Czasem w narzędziach deweloperskich zobaczysz 307, którego nie konfigurowałeś. Zwykle nie jest to prawdziwe przekierowanie serwera — przeglądarka sama podnosi link z http:// do https:// dzięki funkcji bezpieczeństwa HSTS i pokazuje ten wewnętrzny krok jako 307. Serwer go nie wysłał. Więcej informacji znajdziesz w karcie Advanced.
Chcesz poznać pełny obraz — historię specyfikacji, dokładne wypowiedzi Google i Muellera, „widmowe 307” HSTS oraz zaskakujące domyślne ustawienia frameworków? Przejdź do karty Advanced.
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 opisuje303dla Server Actions i307w 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ą
GETalboHEAD(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 żądania | 302 | 307 |
|---|---|---|
Przekierowanie zwykłego GET | Bez problemu — ponowione jako GET | Bez problemu — ponowione jako GET |
POST z danymi formularza | Specyfikacja pozwala klientowi zmienić je na GET (RFC 9110 §15.4.3) — zależy od klienta | Metoda 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 samo | Metoda 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ów —
POST/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/B — wł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.
Podsumowanie AI
Skrócona wersja wariantu Advanced:
- Oba kody są tymczasowymi przekierowaniami.
302i 307 domyślnie zachowują kanoniczność źródłowego URL-a — żaden nie przekazuje celowi sygnałów źródła tak jak 301/308. - Google przetwarza je tak samo. Dokumentacja mówi, że 307 jest „equivalent to
302” (tłumaczenie) „równoważne 302”, a Mueller: “for SEO, it doesn’t really matter.” (tłumaczenie) „dla SEO nie ma to większego znaczenia”. To twierdzenie o przetwarzaniu przez crawlery, nie opublikowany wzór PageRanku; nie deklaruj dokładnego równego ani nierównego transferu. - Jedyna realna różnica to zachowanie metody. Automatyczne 307 zachowuje metodę (POST pozostaje POST-em), a 302 pozwala klientowi zmienić POST na GET. 307 dodano w HTTP/1.1 właśnie po to, aby usunąć niejednoznaczność; dokładne bajty treści, dane uwierzytelniające i zachowanie między originami nadal zależą od klienta.
- Używaj 307 przy API, formularzach i przepływach POST/webhook/płatność/logowanie, ale pilnuj powtórzeń nieidempotentnych operacji. Używaj 302 przy zwykłych przekierowaniach GET, testach A/B, geolokalizacji i wariantach mobile↔desktop. Przy pełnej awarii witryny często lepszy jest 503.
- Domyślne zachowanie frameworków zależy od wersji i kontekstu. Next.js opisuje
303dla Server Actions i307w innych miejscach; sprawdź własną wersję. - „Widmowe 307” HSTS: Chrome może sam podnieść HTTP do HTTPS i pokazać 307, choć serwer nie odpowiedział tym kodem. Mueller: “Your server’s not returning a 307, Chrome is just showing it to you as such.” (tłumaczenie) „Twój serwer nie zwraca 307; Chrome tylko tak to pokazuje.”
- Bing: nie ma osobnych wytycznych dla 302 kontra 307; nie zakładaj równoważności ani tego, że powtarzany 302 oznacza to samo co powtarzany 307.
- Żaden kod nie jest domyślnie buforowalny tylko przez status (RFC 9111); potrzebne są nagłówki
Cache-Control/Expires. - Moja kolejność: 307 / 302 / 303 przed odświeżeniem meta/HTTP, ale sprawdź cache, starsze klienty i idempotencję.
Dokumentacja oficjalna
Dokumentacja źródłowa i specyfikacje:
- Kody statusu HTTP, błędy sieci i DNS oraz Google Search — wiersz 302 „słaby sygnał”, wiersz 307 „Equivalent to
302” oraz uwaga o semantycznej różnicy. - Przekierowania i Google Search — grupuje 302, 303 i 307 jako „przekierowania tymczasowe”.
- Podcast Google, odcinek 51 — „Porozmawiajmy o przekierowaniach” (John Mueller i Martin Splitt) — rozmowa o tym, po co istnieją 307/308.
- John Mueller — A search-engine guide to 301, 302, 307, & other redirects — zachowanie indeksowania 302.
- John Mueller — 307s — wyjaśnienie „widmowego 307” HSTS.
Bing / Microsoft
- Zarządzanie przekierowaniami — 301, 302 i kanonikalizacja (październik 2011) — podział Binga na 301 stałe i 302 tymczasowe, bez wzmianki o 307.
- Migracja witryny z Bingiem (grudzień 2020) — ogólne wskazówki migracji, także bez osobnego stwierdzenia o 307.
Specyfikacje
- MDN — 307 Temporary Redirect — definicja zachowania metody i treści oraz historyczna uwaga o zmianie metody na GET przez starszych klientów.
- RFC 9110 — HTTP Semantics — §15.4.8 „307 Temporary Redirect” i §15.4.3 „302 Found”, czyli aktualny tekst specyfikacji.
Cytaty ze źródła
Udokumentowane wypowiedzi Google i specyfikacji. Tam, gdzie pozwala na to strona źródłowa, każdy link prowadzi bezpośrednio do cytowanego fragmentu.
Dokumentacja Google — 307 jest równoważne 302
- “Equivalent to
302.” (tłumaczenie) „Równoważne 302.” (wiersz 307) — Google Search Central. Przejdź do cytatu - “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) „Google traktuje te kody tak samo, ale podkreśla, że ich semantyka się różni. Wybierz kod odpowiedni dla danego przekierowania, aby mogli na tym skorzystać inni klienci.” Przejdź do cytatu
- “Googlebot follows the redirect, but the indexing pipeline doesn’t use the redirect as a signal that the redirect target should be canonical.” (tłumaczenie) „Googlebot podąża za przekierowaniem, ale potok indeksowania nie używa przekierowania jako sygnału, że jego cel powinien być kanoniczny.” (przekierowania tymczasowe, w tym 302/303/307) Przejdź do cytatu
John Mueller, Google (podcast Google, odcinek 51 — „Porozmawiajmy o przekierowaniach”; oficjalny PDF z transkryptem, bez strony HTML z pasującym tekstem kotwicy, więc nie można utworzyć głębokiego linku #:~:text=)
- “I had to look this up recently. And usually, with a 301 and 302, what is forwarded are GET requests.” (tłumaczenie) „Niedawno musiałem to sprawdzić. Zwykle przy 301 i 302 przekazywane są żądania GET.” … “And with 307, 308, it also forwards POST requests.” (tłumaczenie) „A przy 307 i 308 przekazywane są również żądania POST.”
- “If you have some kind of an API that uses POST requests, or 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 API używające POST albo wadliwą konfigurację z formularzem w jednej domenie i wynikami w drugiej, użyj 307 lub 308.”
- “I guess from a completeness point of view, if you always use them, then you’re always safe. But that’s the difference there. 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) „Jeśli patrzeć na kompletność, konsekwentne używanie tych kodów daje bezpieczny wariant. Z perspektywy SEO różnica nie jest istotna; chodzi przede wszystkim o to, czy API działa, a API zwykle nie musi być bezpośrednio indeksowane.”
- “And for that kind of redirect [mobile/desktop], from a technical point of view, 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) „Przy takim przekierowaniu mobilny/desktopowy 302 jest technicznie właściwy, bo nie wiesz, którą wersję odwiedzający wybierze następnym razem.” Transkrypt PDF
John Mueller, Google (johnmu.com — „widmowe 307” HSTS)
- “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.”
- “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.” Przeczytaj wpis
MDN — różnica w zachowaniu metody
- “The difference between
307and302is that307guarantees that the client will not change the request method and body when the redirected request is made. With302, older clients incorrectly changed the method toGET.” (tłumaczenie) „Różnica między 307 a 302 polega na tym, że 307 gwarantuje zachowanie metody i treści żądania podczas przekierowania, a starsze klienty nieprawidłowo zmieniały przy 302 metodę na GET.” Przejdź do cytatu
#:~:text=, bo nie istnieje strona HTML z pasującym zakotwiczeniem. Zachowanie Binga dotyczące powtarzanych 302, przywołane w karcie Advanced, pochodzi z wpisu Binga z 2011 roku, który omawia 301/302 i nic nie mówi o 307 — traktuj Bing jako pozbawiony osobnej wypowiedzi o 302 kontra 307. Które przekierowanie tymczasowe: 302 czy 307?
Ponieważ oba są tymczasowe i równoważne dla SEO, cała decyzja sprowadza się do jednego pytania: czy żądanie niesie metodę lub treść, którą trzeba zachować?
302 or 307 — which temporary redirect should I use?
Ścieżka „nie jestem pewien”: Google przetwarza 307 tak samo jak 302, a zwykłe przekierowania GET działają z nim poprawnie, więc domyślne użycie nie jest błędem — ale nie jest też bezkosztowe. Potwierdź nagłówki cache, obsługę przez starszych klientów i zabezpieczenia idempotencji, jeśli przekierowane żądanie ma skutki uboczne.
Błędy, których należy unikać przy przekierowaniach tymczasowych
Wybór 302, bo 307 rzekomo przekazuje mniej wartości
Google dokumentuje 307 jako równoważne 302 w wyszukiwaniu. Wybierz kod ze względu na zachowanie żądania, nie na rankingi.
Założenie, że 302 jest bezpieczniejszy, bo jest starszy
Starsze klienty pozostawiały niejednoznaczność metody przy 302. Jeśli POST, PUT, DELETE, webhook albo treść API musi przetrwać, użyj 307 i jego jawnej gwarancji zachowania.
Traktowanie każdego 307 w DevTools jako reguły serwera
Chrome może pokazać wewnętrzne podniesienie HSTS jako 307, choć serwer nigdy go nie zwrócił. Odtwórz żądanie narzędziem serwerowym albo curl, zanim zmienisz konfigurację przekierowań.
Twierdzenie, że każdy 302 zamienia POST na GET
Historyczne zachowanie jest dopuszczone i niejednoznaczne, ale nie występuje gwarantowanie w każdym nowoczesnym kliencie. Gdy potrzebujesz pewności, użyj 307; nie opisuj wszystkich implementacji 302 jako zepsutych.
Zamiana wszystkich 302 na 307 dla lepszego SEO
Nie ma korzyści rankingowej. Zmieniaj kod tylko wtedy, gdy zachowanie metody i treści poprawia poprawność albo gdy bezpieczniejszy domyślny wybór frameworka tego wymaga.
Mylenie 303 z 307
To funkcjonalne przeciwieństwa w obsłudze metody: 303 celowo zmienia kolejne żądanie na GET, a 307 zachowuje pierwotną metodę i treść.
Diagnozowanie nieoczekiwanego 307 lub zepsutego przepływu 302
DevTools pokazuje niewyjaśnione Internal Redirect / 307
Objaw: Nawigacja do http:// pojawia się w Chrome jako 307, choć nie istnieje żadna reguła przekierowania.
Prawdopodobna przyczyna: HSTS podniosło żądanie wewnątrz przeglądarki, zanim dotarło ono do serwera.
Naprawa: Sprawdź inicjator i nagłówki wpisu, a następnie wyślij żądanie, które nie podąża automatycznie za przekierowaniami, bezpośrednio do adresu HTTP za pomocą narzędzia serwerowego — nie przeglądarki, bo nawet świeże okno Incognito może stosować preładowany stan HSTS. Nie traktuj też curl jako całkowicie neutralnej bazy: może mieć własny magazyn HSTS skonfigurowany przez opcję HSTS. Jeśli surowa odpowiedź serwera różni się od DevTools, nie „naprawiaj” widmowego 307; zbadaj osobno rzeczywiste przekierowanie HTTP→HTTPS i wykonaj kontrolowany test żądania innego niż GET.
POST traci treść po tymczasowym przekierowaniu
Objaw: Formularz, webhook, logowanie albo wywołanie API dociera do celu jako GET lub bez ładunku.
Prawdopodobna przyczyna: Źródło użyło 302, pozwalając klientowi zmienić metodę, albo pośrednik przepisał odpowiedź.
Naprawa: Użyj 307 dla zmiany tymczasowej, odtwórz bezpieczne żądanie testowe i potwierdź w logach celu, że dotarły metoda, typ treści i dane.
Platforma emituje 307, choć wybrano ogólne przekierowanie
Objaw: Framework albo platforma edge zwraca 307 zamiast oczekiwanego 302.
Prawdopodobna przyczyna: Platforma wybrała tymczasowy kod zachowujący metodę, często dla żądania innego niż GET.
Naprawa: Sprawdź, czy zmiana jest rzeczywiście tymczasowa i czy zachowanie żądania jest właściwe. Jeśli tak, pozostaw kod — Google traktuje je tak samo. Zmieniaj go tylko wtedy, gdy wymagają tego semantyka aplikacji albo zgodność z klientem.
302 kontra 307 w skrócie
| Pytanie | 302 Found | 307 Temporary Redirect |
|---|---|---|
| Stałość | Tymczasowe | Tymczasowe |
| Traktowanie SEO przez Google | Sygnał słaby/tymczasowy | Równoważne 302 |
| Metoda | Klient może zmienić POST na GET (RFC na to pozwala) | Musi zostać zachowana przy automatycznym podążaniu |
| Zwykły GET | W porządku | W porządku |
| POST/API/webhook | Ryzyko zmiany metody; sprawdź klienta | Metoda zachowana przez specyfikację — przy nieidempotentnych żądaniach sprawdź treść i dane uwierzytelniające |
| Częsta niespodzianka | Długotrwały 302 może preferować cel | HSTS w przeglądarce może pokazać widmowe 307 (etykieta zależna od wersji UI) |
| Podział wartości linków | Google go nie określiło | Google go nie określiło |
Reguła praktyczna: zwykła tymczasowa strona GET → oba kody działają; tymczasowe żądanie inne niż GET, które musi dotrzeć bez zmian → 307.
Narzędzia do rozpoznania rzeczywistego przekierowania
Bezpłatne narzędzie Patricka
- Bulk HTTP Status Code Checker — wysyłaj żądania serwerowe dla maksymalnie 500 URL-i i przeglądaj rzeczywiste kody oraz łańcuchy. Narzędzie pomaga odróżnić odpowiedzi serwera od wewnętrznego widoku
307HSTS w Chrome.
Sprawdź zachowanie żądania
- Redirect Checker — prześledź jeden adres przez każdy skok i sprawdź, czy serwer zaczyna od
302czy307. - Panel Network w DevTools — sprawdź inicjator i to, czy Chrome oznacza wpis jako przekierowanie wewnętrzne; sama etykieta nie dowodzi odpowiedzi serwera.
curloraz logi aplikacji — wyślij bezpieczny POST do środowiska testowego i potwierdź, że cel otrzymał tę samą metodę i treść. Jeślicurlma własny magazyn HSTS (opcja--hsts), uwzględnij to w interpretacji. Narzędzia pokazujące tylko status nie dowodzą dotarcia ładunku.
Sprawdź się: 302 kontra 307
Pięć pytań o dwa tymczasowe przekierowania i rzeczywistą różnicę między nimi. Wybierz odpowiedź przy każdym, a potem sprawdź wynik.
Materiały warte uwagi
Moje powiązane teksty
- 11 typów przekierowań i ich wpływ na SEO (Ahrefs, z Joshuą Hardwickiem) — pełny przegląd typów przekierowań. Kolejność wdrożeniowa to 307 / 302 / 303 > meta refresh 0 / HTTP refresh 0, a wniosek SEO brzmi: “For SEO, it’s the same, but if you have data being sent through forms that redirect, then you don’t want to be swapping between GET and POST.” (tłumaczenie) „Dla SEO są takie same, ale gdy formularze wysyłają dane w przekierowaniu, nie chcesz przełączać GET i POST”.
- Kody statusu HTTP i ich wpływ na SEO (Ahrefs) — źródło o obu znaczeniach 307 (Temporary Redirect i HSTS Policy 307) oraz uwaga, że przy HSTS “Google won’t see the 307 because it’s cached in the browser.” (tłumaczenie) „Google nie zobaczy 307, bo jest buforowany w przeglądarce”.
- The Beginner’s Guide to Technical SEO — miejsce przekierowań w szerszym obrazie.
Moje wystąpienia
- Patrick Stox on SlideShare i Speaker Deck — moje prelekcje o technicznym SEO, z których kilka omawia przekierowania i kanonikalizację. Obowiązuje zastrzeżenie: “This is my understanding of systems… not going to be 100% complete or accurate.” (tłumaczenie) „To moje rozumienie systemów… nie będzie w 100% kompletne ani dokładne.”
Oficjalne
- Google — kody statusu HTTP, błędy sieci i DNS — wiersz „Equivalent to
302” oraz uwaga „semantycznie różne, używaj właściwego kodu”. - Google — Przekierowania i Google Search — grupuje 302/303/307 jako przekierowania tymczasowe.
- Podcast Google — „Porozmawiajmy o przekierowaniach” (Google Search Relations, odcinek 51) — dyskusja Muellera i Splitta, z której pochodzą powyższe cytaty.
Z branży
- John Mueller — 307s — najjaśniejsze wyjaśnienie „widmowego 307”.
- MDN — 307 Temporary Redirect — definicja zachowania metody i treści oraz historia starszych klientów.
- An SEO’s guide to redirects (Search Engine Land) — przegląd rodziny przekierowań.
- URL Redirects For SEO: A Technical Guide (Search Engine Journal) — kolejne omówienie techniczne.
- Mit do skorygowania: strona Conductor „302 vs 307” zaleca 302 zamiast 307, bo „wyszukiwarki jasno go obsługują”. To sprzeczne z dokumentacją Google, która wprost określa 307 jako „Equivalent to
302” (tłumaczenie) „równoważne 302”. Nie traktuj tezy “302 is the safer SEO choice” (tłumaczenie) „302 to bezpieczniejszy wybór SEO” jako autorytatywnej; jedynym realnym czynnikiem jest potrzeba zachowania metody i treści. - r/TechSEO — społeczność debugująca przekierowania i kanonikalizację.
Dziennik zmian
Zaktualizowano 8 sie 2026.
Podsumowanie redakcyjne i zapisane szczegóły zmian.Szczegóły zmian
-
Szczegółowe uwagi dotyczące zmian są obecnie dostępne po angielsku.
Pełne porównanie jest niedostępne — dla tej wersji nie zarchiwizowano wcześniejszej migawki.
Zaktualizowano 17 lip 2026.
Podsumowanie redakcyjne i zapisane szczegóły zmian.Szczegóły zmian
-
Szczegółowe uwagi dotyczące zmian są obecnie dostępne po angielsku.
Pełne porównanie jest niedostępne — dla tej wersji nie zarchiwizowano wcześniejszej migawki.
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.