Skip to content
Webmaster Tools

302 Found

What HTTP 302 Found means, how it differs from 301, 303 and 307, why browsers turn POST into GET, and how Google handles temporary redirects over time.

All status codes

What 302 means

The resource is temporarily at a different URL, given in the Location header. 302 is defined in RFC 9110 §15.4.3. The client should follow it this time but keep using the original URL in future, because the move isn't permanent. In HTTP/1.0 it was called "Moved Temporarily".

HTTP/1.1 302 Found
Location: /login?next=%2Faccount
Cache-Control: no-store

The method can change. RFC 9110 allows a user agent to change a POST into a GET when following a 302, for historical reasons, and every browser does. If the client must repeat the same method and body at the new URL, use 307 Temporary Redirect. If you want a GET (after a form submission), 303 See Other says so explicitly.

It isn't cached by default. A 302 is stored only if Cache-Control or Expires allow it, so changing or removing it takes effect immediately.

When to use it

  • Sending users who aren't logged in to a login page and back again.
  • Temporary moves: a page under maintenance, a seasonal campaign, a short-lived promotion.
  • Geo or language redirects from a neutral URL (but let crawlers reach every version).
  • A/B tests that split traffic between URLs.

Where 302s come from by accident

Many tools send 302 when you don't ask for a status: Express res.redirect('/x'), PHP header('Location: /x'), Apache Redirect /old /new without a status, and many CMS redirect plugins. Check what your redirects actually return; a permanent move that ships as 302 is one of the most common migration mistakes.

How to fix or change it

nginx: return 302 /temporary-page; for temporary, return 301 ...; for permanent (note rewrite ... redirect; is 302 and rewrite ... permanent; is 301). Apache: Redirect 302 /old /new or RewriteRule ^old$ /new [R=302,L] ([R] alone is 302). Cloudflare Redirect Rules let you pick 301, 302, 303, 307 or 308 per rule. Express: res.redirect(301, '/new') when the move is permanent.

302 and SEO

Google treats a 302 as a temporary redirect: the redirect is a weak signal that the target should be canonical, so the original URL usually stays in the index and keeps its signals. Google has also said that a redirect left in place for a long time can end up treated like a permanent one, but don't rely on that: for permanent moves, use 301 or 308 so the new URL is indexed and consolidated quickly. Long chains of 302s and redirects based on user agent or IP (that Googlebot, crawling mostly from the US, can't get past) are the usual sources of trouble.

Check whether your redirects are really 301s or 302s, hop by hop, with the Redirect Checker.