Glossary
HTTP 302 Found
HTTP 302 Found tells the client the resource is temporarily at a different URL and that it should keep using the original address for future requests. Search engines therefore keep the original URL indexed rather than transferring signals to the target. This is correct for something genuinely temporary, and it is the most common accidental misconfiguration on the web: a 302 that has been in place for three years is telling every client that a permanent move is about to be reversed.
What makes it different from 301
The original URL remains the one clients should use. Browsers do not cache it the way they cache a 301, and search engines generally keep the source URL in the index.
That difference is the whole point: 302 preserves the original address, 301 abandons it.
Google has said it can reinterpret a long-standing 302 as permanent when every other signal agrees, but relying on that is asking a search engine to guess what you meant.
When 302 is the right answer
A/B tests and short-lived experiments, where the original URL must remain canonical.
Maintenance pages, where the content will return to its own address.
Geographic or language routing from a neutral entry point, where the entry point itself should stay indexed.
Seasonal landing pages that revert after a campaign.
The default that causes accidents
Many frameworks and reverse proxies issue 302 by default when a redirect is configured without an explicit status. It works, nothing breaks, and the wrong code is shipped.
The visible consequence appears months later: the old URLs are still the ones in search results, and the new ones have no visibility.
This is why a migration audit checks the status code of every redirect, not only that redirects exist.
How to observe it
`curl -I <url>` prints the status line: `HTTP/2 302` against `HTTP/2 301`. The distinction is invisible in a browser, which follows both silently.
After a site move, sample old URLs across sections rather than testing one. Redirect rules are often written per section and each may have been configured separately.
Turning an accidental 302 into a 301
First establish which layer issues it. Domain forwarding at a registrar, a CDN page rule, a server rewrite and an application route all produce the same response, and only one of them is the one to edit.
Change the status explicitly rather than relying on a default. In nginx that is `return 301` rather than `rewrite … redirect`; in Apache, `R=301` rather than a bare `R`; in most frameworks, a status argument the redirect helper accepts but does not require.
Re-test with `curl -I` afterwards. A configuration change that was applied to a cached edge rule can take effect for you and not yet for everyone.
Expect the correction to take time to show. The old URLs have been signalled as canonical for as long as the 302 was in place, and reversing that is a re-crawl, not an instant switch.
One consolation: because a 302 is not cached the way a 301 is, correcting it is far easier than correcting a mistaken 301. The error is common but cheap to undo.
Frequently asked questions
- Does a 302 pass SEO value?
- It is designed not to: it tells search engines to keep the original URL. Google has said it may treat a long-standing 302 as permanent, but the code itself signals the opposite.
- Is 302 or 307 better for a temporary redirect?
- 307 guarantees the request method is preserved, which matters for POST. For ordinary GET pages, 302 is the older and more widely understood choice.
- How do I find accidental 302s?
- Request your known redirects with `curl -I` and read the status. A migration that produced 302 instead of 301 usually did so uniformly, so a handful of samples reveals it.
Sources
Related
VeriFixScan crawls a site and applies its checks to every page it reaches, keeping the evidence behind each finding. Scanning one website is free.
Scan a website