You type one URL and land on a different one. Somewhere between the two, a server returned a redirect. Choose the right one and you keep your rankings, your users, and your speed. Choose the wrong one — or stack three of them in a row — and you quietly bleed link equity, crawl budget, and milliseconds on every request.
What an HTTP redirect actually is
An HTTP redirect is a server's way of saying “what you asked for lives somewhere else — go there instead.” Mechanically, it is two things working together: a 3xx status code and a Location response header that names the destination URL.
When your browser requests a page and the server replies with, say, 301 Moved Permanently plus Location: https://example.com/new, the browser reads the header and issues a fresh request to that new address. The user usually never sees the intermediate response — they just watch the address bar update. Every redirect is therefore at least one extra round trip: request, 3xx reply, then a second request to the real page.
The 3xx redirect codes compared
The 3xx family looks interchangeable but the codes differ in two decisive ways: whether the browser is allowed to change the HTTP method (for example, turning a POST into a GET) and whether the redirect is cacheable by default. Those two behaviors, plus permanence, decide which one you should reach for.
| Code | Meaning | Method preserved? | Cacheable? | Typical SEO use |
|---|---|---|---|---|
301 | Moved Permanently | No (often switched to GET) | Yes, by default | Permanent moves — passes ranking signals |
302 | Found (temporary) | No (often switched to GET) | No, by default | Short-lived detours — old URL stays indexed |
303 | See Other | No — forces GET | No | Post/Redirect/Get after form submits; rarely for SEO |
307 | Temporary Redirect | Yes — method & body kept | No | Temporary move that must stay a POST/PUT |
308 | Permanent Redirect | Yes — method & body kept | Yes | Permanent move that must stay a POST/PUT |
The historical quirk is that 301 and 302 predate a strict rule about methods. In practice browsers frequently rewrite a POST to a GET when following them — convenient for web pages, dangerous for APIs. The 307 and 308 codes were introduced precisely to remove that ambiguity: they guarantee the method and body survive the hop.
301 vs 302: the choice that matters most
For most websites, the entire redirect decision comes down to one question: is this move permanent or temporary?
A 301 Moved Permanently tells clients the resource has a new home for good. Browsers and search engines are allowed to cache it aggressively — sometimes for a very long time — and search engines treat the destination as the canonical URL, transferring the accumulated ranking signals from the old address to the new one. Use it when you rename a page, merge two URLs, move to HTTPS, or consolidate www and non-www.
A 302 Found (and its stricter cousin 307) says the detour is temporary. The original URL is still the real one, so search engines keep it indexed and generally do not pass link equity to the temporary destination. Use it for A/B tests, a short maintenance page, geolocation-based landing, or a limited-time promotion.
302 for a move that is actually permanent. Because a 302 keeps the old URL indexed and withholds ranking signals from the new one, a permanent migration served over 302s can stall in search results for weeks. When in doubt about a genuine move, use 301.307 and 308: preserving the request method
Where 301/302 may quietly downgrade a POST to a GET, the modern codes are explicit:
308 Permanent Redirectis the method-preserving equivalent of a 301. The destination is permanent and the browser must repeat the original method and body. Ideal for permanently relocating an API endpoint that receivesPOSTorPUTrequests.307 Temporary Redirectis the method-preserving equivalent of a 302 — temporary, and the method survives. Notably,307is also what the browser's HSTS preload mechanism uses internally to forcehttptohttpsbefore any request leaves the machine.303 See Otherdeliberately does the opposite: it always converts the follow-up to aGET. That is exactly what you want after a form submission (the Post/Redirect/Get pattern) so a browser refresh doesn't resubmit the form.
Redirect chains and loops
A redirect chain is when a URL redirects to a second URL, which redirects to a third, before finally reaching a real page. Each arrow is a full extra round trip: http://site.com → https://site.com → https://www.site.com → https://www.site.com/. Every rule — force HTTPS, force www, add a trailing slash — often lives in a separate config block, and they fire one after another instead of all at once.
Chains are rarely designed on purpose; they accumulate. Someone adds an HTTPS rule this year, a canonical-host rule the next, a migrated-page rule after that, and no one collapses them. The fix is to make the very first URL point straight to the final destination in a single hop.
A redirect loop is the pathological version: URL A redirects to B, and B redirects back to A. The browser follows the ping-pong until it hits its limit and gives up with an error like ERR_TOO_MANY_REDIRECTS. Loops usually come from conflicting rules — for example a server forcing HTTPS while a proxy or CDN in front of it terminates TLS and forwards plain HTTP, so each side thinks the other still needs redirecting.
The SEO impact of redirects
Redirects are one of the most powerful SEO tools you have — and one of the easiest to misuse. The essentials:
- 301 consolidates link equity. When a page moves, a 301 transfers its accumulated authority and rankings to the new URL. This is how you preserve traffic through a redesign, domain change, or URL cleanup.
- Don't 302 a permanent move. A temporary redirect keeps the old URL indexed and withholds signals from the new one, so a permanent change served over 302s can leave you ranking for a URL that no longer exists.
- Chains waste crawl budget. Search engines allocate a finite amount of crawling to your site. Every extra hop is a wasted fetch, and long chains can dilute or delay how signals reach the final page. Keep redirects to a single hop.
- Redirect to relevant pages. Mapping a retired page to a closely related replacement preserves far more value than dumping everything on the homepage, which search engines may treat as a soft 404.
- Update internal links too. A redirect is a safety net for external links you can't edit. For your own pages, link directly to the final URL so no hop is needed at all.
Server vs meta refresh vs JavaScript redirects
Not every redirect is an HTTP status code. There are three ways to send a visitor elsewhere, and they are not equal for SEO:
| Method | Where it runs | SEO friendliness |
|---|---|---|
| Server-side (3xx) | Server, before the page loads | Best — explicit code, instant, fully understood by crawlers |
| Meta refresh | In the HTML <head> | Poor — slow, ambiguous, discouraged; delayed refreshes especially |
| JavaScript | In the browser after load | Weakest — requires rendering; may not pass signals reliably |
A server-side 301 is the gold standard for SEO because it is unambiguous, happens before any HTML is sent, and every crawler honors it. A <meta http-equiv="refresh"> tag fires only after the browser downloads the page, and a delayed one can look like a spam technique. A JavaScript redirect requires the client to execute code and is the least reliable for passing ranking signals. Reserve meta and JS redirects for cases where you genuinely cannot configure the server.
How to trace and audit a redirect path
Because a browser hides the intermediate hops, the only way to know what really happens is to follow the chain explicitly and read the status code at each step:
- Start from the exact URL users or links point at — including the
httpand non-wwwvariants, since that's where chains hide. - Record the status code and
Locationheader at every hop, not just the final page. - Confirm the type of each hop: a permanent move should be a
301/308, never a302/307. - Count the hops. More than one means you have a chain to collapse into a single redirect.
- Verify the final response is a real
200 OK— not another redirect, a404, or a loop.
On the command line you can do this with curl -sIL https://example.com, which prints the headers for every hop. For a readable, one-shot view of the entire path — every code, every Location, and the final destination — a dedicated redirect checker is faster.
Trace any redirect path in seconds
See every hop, the status code at each step, and where a URL truly ends up — catch hidden chains, loops, and mismatched 301/302 codes. Free, no signup.
Open the Redirect Checker →Frequently asked questions
What is the difference between a 301 and 302 redirect?
Do redirects hurt SEO?
What is a redirect chain and why is it bad?
Is a 301 redirect permanent?
How do I check where a URL redirects to?
curl -sIL, but a checker that traces the full chain at once is easier.