302 vs. 307 Redirect

302 and 307 are both temporary redirects — the difference is that 307 guarantees the HTTP method isn't changed. Why Google treats them the same, when 307 is the right choice, and the HSTS "phantom 307."

First published: Jul 2, 2026 · Last updated: Jul 17, 2026 · Advanced
demand #10 in Redirects#26 in HTTP Status Codes#212 in Technical SEO#290 on the site
1 evidence signal on this page

302 and 307 are both temporary redirects, and Google processes them the same way — its docs call 307 'equivalent to 302,' and Mueller has said 'for SEO, it doesn't really matter' between the temporary and permanent pairs; neither code is a signal that the destination should become canonical, though Google hasn't published a PageRank/link-value formula for either. The real difference is method preservation: an automatic 307 follow must keep the same request method (a POST stays a POST), while a 302 lets a client convert POST to GET — the body and credentials still depend on the specific client, so verify rather than assume. Use 307 when losing the method matters — APIs, forms, POST/webhook/checkout flows — but watch for non-idempotent replay (a payment or order call can resubmit on redirect); use a plain 302 for ordinary GET redirects (geo/language, Google's own recommended choice for A/B tests, mobile↔desktop) and treat maintenance redirects as resource-dependent rather than automatic. Two gotchas: a 307 in your browser's Network tab is often the HSTS 'phantom 307' your server never sent (a Chrome UI label, not a protocol guarantee), and Bing has issued no distinct 302-vs-307 guidance. My own preferred order for temporary redirects is 307 / 302 / 303 over meta/HTTP refresh — though defaulting to 307 isn't free of tradeoffs, so check cache headers, legacy-client support, and idempotency before doing it everywhere.

TL;DR — 302 and 307 are both temporary redirectsA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't., and Google processes them the same way — its docs say 307 is “equivalent to 302,” and Mueller has said “for SEO, it doesn’t really matter” between the temporary and permanent pairs; neither code is a signal that the destination should become canonical, and Google hasn’t published a stated PageRankPageRank is Google's original recursive link-graph algorithm: a page's score depends on the scores of the pages linking to it, and in the published model each page's score is split across its outbound links (the simplified version: links are weighted votes). Google says it's evolved since launch but still part of its core ranking systems./link-value split between them. The real difference is method preservation: an automatic 307 follow must keep the same request method (a POST stays a POST), while a 302 lets a client convert POST to GET — exact body bytes, credentials, and cross-origin behavior still depend on the client, so verify rather than assume. Reach for 307 when losing the method breaks things — APIs, forms, POST/webhook/checkout/auth flows — but watch for non-idempotent replay (a redirected payment or order call can resubmit). A plain 302 is fine for ordinary GET redirects, including Google’s own explicit recommendation for A/B tests. Watch for the HSTSHSTS (HTTP Strict Transport Security) is a response header that tells browsers to always connect to your site over HTTPS — even when a user types or clicks an http:// link — closing the insecure-first-request gap that a plain 301 redirect leaves open. “phantom 307” (a Chrome UI label, not a protocol guarantee), framework specifics (Next.js documents 303 for Server Actions and 307 elsewhere — check your version rather than generalizing to other platforms), and note that Bing has no distinct 302-vs-307 guidance. My own preferred order for temporary redirectsA 302 (\"Found\") is a temporary redirect: it forwards users to a new URL while telling search engines the original URL should stay in the index. It's a weak canonicalization signal, not the zero-equity dead end of SEO folklore. is 307 / 302 / 303 over meta/HTTP refresh — though defaulting to 307 isn’t cost-free, so check cache headers, legacy-client support, and idempotency safeguards first.

Both are temporary — that’s the starting point

Before anything else: 302 and 307 are in the same category. Google groups 302 (Found), 303 (See Other), and 307 (Temporary Redirect) together as “temporary redirects,” and its behavior for all of them is the same — GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. follows the redirect, but the indexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. pipeline doesn’t use the redirect as a signal that the redirect target should be canonical.” In plain terms, a temporary redirect keeps the source URL as the canonical by default; it doesn’t hand the destination the source’s signals the way a permanent redirectA 301 redirect is the HTTP status code for a permanent move: it tells browsers and search engines a URL has moved for good, and it's the strongest signal for consolidating a page's ranking signals onto the new URL. Google says permanent redirects don't cause a loss in PageRank. (301/308) does.

This is exactly the permanent-tier comparison one tier down: 301/308 are the permanent pair, 302/307 are the temporary pair, and the “the higher-numbered one preserves the method” logic is identical in both.

The one real difference: method and body preservation

Here’s the distinction that actually matters, in one sentence: when a client automatically follows a 307, the current HTTP spec (RFC 9110) requires it to keep the same request method; a 302 leaves the client free to change a POST to a GET. That’s a spec-level guarantee about the method — it isn’t a blanket guarantee about every byte of the body, credentials, or cross-origin handling, which still depend on the specific client implementing the redirect. Verify those with a real request rather than assuming a 307 replays everything identically in every case.

Why the ambiguity existed is a spec-history story worth telling, because most write-ups assert the fact without explaining why. In the HTTP/1.0 era, the 302 spec text technically said clients shouldn’t change the request method when following the redirect — but early browsers (Netscape, then everyone) ignored that and silently converted non-GET methods, especially POST, into GET on a 302. That inconsistent-but-universal behavior became the de facto standard. HTTP/1.1 (RFC 2616, 1999, later folded into RFC 7231 and today’s RFC 9110) formalized the split into two explicit codes to end the confusion:

  • 303 (See OtherA 303 See Other is a temporary HTTP redirect that tells the client to fetch a different URL with a GET or HEAD request, no matter what method the original request used. It's the mechanism behind the Post/Redirect/Get pattern, and search engines treat it as a weak signal like a 302 or 307.) — retrieves the redirect target with GET or HEAD (not simply “always GET” — RFC 9110 allows either safe method), the intended behavior for “POST, then redirect to a result page you can safely reload.”
  • 307 (Temporary Redirect) — method strictly preserved on an automatic follow, by spec; RFC 9110 doesn’t force every client to follow the redirect at all.

MDN puts the practical upshot cleanly: “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.” So 307 didn’t add a new capability so much as remove an ambiguity — it’s the spec-guaranteed version of what a well-behaved 302 was supposed to do all along. Modern browsers are far more consistent than the Netscape-era chaos, but 307 removes the ambiguity by specification rather than by convention.

Side by side:

Request type302307
Plain GET page redirectFine — repeated as GETFine — repeated as GET
POST + form dataSpec allows the client to change it to GET (RFC 9110 §15.4.3) — behavior varies by clientMethod preserved on automatic follow — body normally comes along too, but verify exact bytes/credentials for your client
API / non-GET (PUT, DELETE, webhook)The spec addresses POST specifically — don’t assume every non-GET method converts the same wayMethod preserved by spec; confirm body/credential/cross-origin behavior for the client actually making the call

Two precision notes worth keeping straight: the RFC’s allowance to convert on a 302 names POST, not every method — don’t generalize it into “302 always breaks PUT/DELETE” without checking your specific client. And neither code is cacheable by default just because of its status: RFC 9111 doesn’t list 302 or 307 among the status codes that are heuristically cacheable from the status alone — cachingCaching stores a copy of a page or resource — in a browser, a CDN edge node, or a search crawler's own cache — so it can be served again without regenerating or re-downloading it. It isn't a direct ranking factor, but it feeds page speed and crawl efficiency. still depends on explicit Cache-Control/Expires headers, not which redirect code you chose.

My own Ahrefs definition lines up with the method-preservation piece: “A 307 redirect is the same as a 302 redirectA 302 (\"Found\") is a temporary redirect: it forwards users to a new URL while telling search engines the original URL should stay in the index. It's a weak canonicalization signal, not the zero-equity dead end of SEO folklore., except it retains the HTTP method (POST, GET) of the original request when performing the redirect.”

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

Does Google treat 302 and 307 differently for SEO?

No — and Google is unusually explicit about it. This is a settled, low-controversy topic, the same way 301-vs-308 is.

In Google’s HTTP status codes documentation, the 302 row says Google’s crawlersA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. follow the redirect and use it as a weak signal that the target should be processed, and the 307 row says, verbatim, “Equivalent to 302.” Google then adds the caveat that applies equally to the 302/307 and 301/308 pairs: “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.”

That’s the crawlerA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index.-processing answer. Google treats them the same way for how GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. fetches and follows the redirect, and only asks that you pick the semantically correct code so non-Google clients behave well. 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

One nuance worth being precise about, because it’s a real gap in a lot of other coverage: crawler-processing equivalence is a separate claim from indexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. outcome. Google’s Redirects and Google Search doc groups 302, 303, and 307 together as “temporary redirects” and states that “the indexing pipeline doesn’t use the redirect as a signal that the redirect target should be canonical.” That’s a real, useful guarantee — but it isn’t a promise that your source URL keeps ranking, or that the destination can never get indexed through other signals. Treat “302 and 307 are processed the same way” and “neither is a canonical signal to the target” as two separate, both-true statements — not as a claim that the two codes pass identical PageRankPageRank is Google's original recursive link-graph algorithm: a page's score depends on the scores of the pages linking to it, and in the published model each page's score is split across its outbound links (the simplified version: links are weighted votes). Google says it's evolved since launch but still part of its core ranking systems. or link value, which isn’t something Google’s docs state either way.

John Mueller says the same thing in his own words. On the Search Off the Record “Let’s talk redirects” episode, Martin Splitt asked directly why 307 and 308 even exist alongside 301 and 302. Mueller: “I had to look this up recently. And usually, with a 301 and 302, what is forwarded are GET requests.”“And with 307, 308, it also forwards POST requests.” Then the pull-quote that settles the SEO question: “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.”

Note the framing there: the entire reason to reach for 307 over 302 is a functionality question (“does it work for APIs?”), not a rankings question. There is no credible primary source claiming an SEO advantage either way.

Does Bing treat 302 and 307 differently?

Honestly: Bing hasn’t said. Its public redirect guidance (the 2011 “Managing redirects – 301s, 302s and canonicals” post and the 2020 “Website Migration with Bing” post) only discusses the 301-vs-302 permanent-vs-temporary split and never mentions 307 or 308 by name. Unlike the 301-vs-308 topic — where Fabrice Canel gave a direct statement — I couldn’t find any Bing rep statement specifically on 302 vs. 307.

So I’ll say it plainly rather than assume parity: no Bing statement specifically differentiates 302 and 307. There’s a documented Bing behavior worth knowing for the temporary-redirect discussion generally — if BingbotBingbot is Microsoft Bing's primary web crawler — the bot that discovers, fetches, and renders pages to build the Bing index. That index also powers Yahoo, DuckDuckGo, Ecosia, and Microsoft Copilot, so Bingbot's reach is far wider than Bing's own search-market share. sees the same 302 enough times in a row, it will start treating it like a 301 and consolidate forward — but Bing has not publicly confirmed that behavior extends to repeated 307s. Treat that as a genuine documentation gap, not a fact about 307.

When 307 is the technically correct choice

Any redirect where losing the original method or body would break something:

  • APIs and webhook endpoints — a POST/PUT/DELETE that must arrive at the new URL with the method and payload intact.
  • Form submissions (POST flows) — as Mueller put it, “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.”
  • Checkout, payment, and login/auth POST handoffs — anywhere dropping the body silently fails the transaction.

One safety note worth flagging: 307’s method-preservation guarantee cuts both ways. If the original request wasn’t idempotent — a payment charge, an order submission, anything with a side effect — an automatic 307 follow replays that exact request at the new URL. That’s usually what you want, but it also means a client retry or a redirect chainA → B → C instead of A → C. Each hop loses link equity and adds latency. can resubmit a non-idempotent call more than once. Put idempotency controls (an idempotency key, a duplicate-submission check) on the receiving endpoint rather than assuming the redirect alone makes the replay safe.

A big reason developers encounter 307 without choosing it: some frameworks and edge platforms default to a method-preserving code for non-GET requests. Next.js is the clearest documented example — its redirect() function returns a 303 when called from a Server Action and a 307 in other supported contexts, per its current API reference, so check your Next.js version’s docs rather than assuming one code applies everywhere in the framework. Other frameworks, CDNs, and load balancers vary by product and version — verify the actual status code your platform returns instead of assuming it matches what a similar-looking platform does. Seeing an unexpected 307 or 303 is often the platform doing something method-aware on purpose, not a misconfiguration — but confirm it for your specific setup.

When 302 is the pragmatic default

Standard temporary redirects on plain GET requests — there’s no method to preserve, so the 307 guarantee buys you nothing:

  • GeoGenerative Engine Optimization — visibility inside AI answer engines./language redirects (with the usual caveat against fully blocking content by region).
  • A/B and split tests — Google’s own website-testing guidance explicitly says to use a 302, not a 301, for redirected test variations, precisely because the redirect is temporary.
  • Maintenance-mode / “back soon” redirects — but only when there’s an actual resource to send visitors to; if the whole site is unavailable, Google’s own guidance points toward a 503 (service unavailable) rather than any redirect. And if what’s being redirected is a non-GET request — a checkout or API call hitting your maintenance page — a 307 will replay that request at the new URL, which isn’t automatically safe if the call has side effects, so don’t reach for 307 out of habit there without checking.
  • Mobile↔desktop (m-dot) redirects — Mueller’s own example of where 302 is specifically the right code: “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.” The right destination depends on the visitor, so it’s not a permanent move.

The HSTS “phantom 307” — a 307 your server never sent

This deserves its own section because it’s a completely different topic from choosing a redirect code, and conflating the two causes real confusion when people debug redirect chains.

If a site sends the HSTS header (Strict-Transport-Security) over HTTPSHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.', the browser remembers it and, on any later attempt to hit the http:// version, upgrades the request to https:// itself — the URI gets rewritten before the request ever touches the network. Current versions of Chrome display that internal upgrade in DevTools as a 307, but nothing on the server issued it, and the exact label, byte count, or header presentation is Chrome-version-specific UI behavior, not an HTTP or HSTS spec requirement — don’t treat “307” as a guaranteed label across every browser or every future version. John Mueller spelled this out on his personal site: “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 redirectA 307 (\"Temporary Redirect\") is a temporary redirect that, unlike a 302, is guaranteed by the HTTP spec to preserve the original request method and body — so a POST stays a POST. For SEO, Google treats it as equivalent to a 302. Browsers/tools also sometimes represent an HSTS-driven internal scheme upgrade as a 307, though the server never actually sent it and RFC 6797 doesn't require that specific code. the next time you try to access the HTTP page.” And the key clarification: “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.”

I’ve flagged the same thing in my own status-codes writing — there’s even a distinct “307 HSTS Policy” meaning (“forces the client to use HTTPS”) separate from “307 Temporary Redirect.” The SEO nuance: “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.” So if you spot a 307 in your Network tab that you never configured, before you go hunting for a misconfigured redirect rule, check whether it’s just HSTS doing an HTTP→HTTPS upgrade for you.

Common myths

  • “307 doesn’t pass the same SEO value as 302.” Unsupported — Google’s own docs say 307 is “Equivalent to 302” for how the redirect gets processed, and neither code is treated as a signal that the destination should be canonical. But Google hasn’t published an exact PageRank/link-value formula for either code, so don’t assert a precise equal (or unequal) value transfer in either direction — the accurate claim is that Google processes them the same way, not that it has quantified the value passed.
  • “302 is the safer/recommended choice because it’s clearer how search engines treat it.” Overstated. Google’s treatment of 307 is equally documented (“Equivalent to 302”) — this isn’t a case of one code being better-understood by search engines. If anything, 307 offers a functionality guarantee (method/body preservation) that 302 doesn’t. (Some third-party guides state the opposite; see the note in the resources tab.)
  • “A 307 in my browser’s Network tab means my server misconfigured a redirect.” Often false — if HSTS is on and you previously loaded the HTTPS version, that 307 is Chrome’s own HTTP→HTTPS upgrade, not a server response.
  • “302s always convert POST to GET, so never use a 302 for a form.” Overstated for modern browsers. The POST→GET conversion was a real, well-documented problem with older clients — it’s the reason 307 exists as the guaranteed option, not proof that every 302 today drops POST data. 302 is ambiguous, not universally broken.
  • “Switch all your temporary redirects to 307 for a rankings boost.” False and needless churn — there’s no ranking upside. The only valid reason to prefer 307 is a genuine need for method/body preservation (or general future-proofing).
  • “303 and 307 are basically the same.” No — 303 explicitly forces the method to GET (built for POST-then-redirect-to-a-result-page patterns), the functional opposite of 307’s preservation guarantee. They’re easy to conflate because they’re listed together.

My recommendation

For temporary redirects, my preferred implementation order is 307 / 302 / 303, above meta refresh (0) and HTTP refresh (0). Notice I actually rank 307 above 302 — not because it helps SEO (it doesn’t), but because if you always use the method-preserving code, you rarely have to remember to switch later: a plain GET redirect works fine as a 307, and the day you redirect a form or an API you’re already covered. That’s a completeness argument, not a cost-free one — a genuine 307-by-default policy still needs the same cache-control discipline as any redirect, still needs to work for whatever legacy clients you actually support, and still needs idempotency safeguards on any redirect target that isn’t a plain GET fetch. Mueller made the same completeness point: “if you always use them, then you’re always safe.” That said, a plain 302 is perfectly fine, and for the specific m-dot case 302 is technically the more correct choice.

Where this sits

302 and 307 are two of the temporary 3xx redirect codes, and each has its own deep dive in this cluster, alongside the permanent pair (301, 308), the always-GET sibling 303, and the sibling comparisons — the permanent-tier 301-vs-308 (same method-preservation logic, one tier up) and the permanent-vs-temporary 301-vs-302 — plus the operational hazards, redirect chains and redirect loopsA redirect loop is a chain of redirects that circles back on itself instead of ever reaching a live page — URL A redirects to B and B redirects back to A (or a longer cycle). No page ever returns a 200, so browsers show ERR_TOO_MANY_REDIRECTS and crawlers can't index anything.. For the whole family of server responses, see the HTTP Status Codes hubAn HTTP status code is the three-digit number a server returns with every response to tell a browser or crawler what happened to its request — success, redirect, client error, or server error. For SEO the code matters as much as the content: it tells Google and Bing whether to index a page, follow a redirect, retry later, or drop the URL from the index.; redirect type is also one of the canonicalizationHow search engines pick one canonical URL among duplicates and consolidate signals onto it. signals covered in canonicalizationHow search engines pick one canonical URL among duplicates and consolidate signals onto it..

TIP Test the real request method, not only the browser landing page

Both codes are temporary; the operational difference is whether the client must preserve the original method and body.

Use my Redirect Checker for the URL trace, then replay the real POST or API request to verify 307 method preservation. Redirect Checker Free

  1. Trace the redirect and verify the destination and temporary status.
  2. Replay the actual non-GET request with a client that exposes method and body behavior.
  3. Use 307 when preservation is mandatory; use 302 only when legacy method conversion is acceptable.

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.