301 vs 302 vs 307 vs 308: Redirect Status Codes Explained
What each HTTP redirect status code actually means, how permanent and temporary redirects differ for SEO and caching, and how to see exactly which code every hop of a link returns.
What a redirect status code actually says
Every redirect is an HTTP response with a status code in the 3xx range and a Location header pointing to the next URL. The code is not a technicality — it tells browsers, crawlers, and caches how to treat the move: whether it is permanent, whether it can be cached, and whether the original request method and body must be preserved on the next hop.
A single link can chain several of these codes together. A short URL might answer with a 301, the tracking domain behind it with a 302, and the final site with a 307 before you reach a 200. Reading those codes is the fastest way to understand what a link is really doing.
The four codes you will actually meet
301 — Moved Permanently
The resource has a new, definitive URL. Browsers may cache a 301 aggressively — often for the entire session or longer — and search engines treat it as a canonicalization signal: indexing and ranking signals move to the target URL. Use it for migrations, domain changes, and any URL you never intend to bring back.
302 — Found (temporary)
The resource is elsewhere for now. Caches are cautious with 302s, and search engines keep the original URL indexed rather than the target. Historically, 302 had one quirk: many clients rewrote POST requests into GET on the next hop. That ambiguity is exactly why 307 and 308 exist.
307 — Temporary Redirect
Like a 302, but strict: the method and body must be repeated unchanged on the next hop. A POST stays a POST. You will often see 307s from HSTS upgrades (an internal 307 when a site forces HTTPS) and from APIs that temporarily reroute writes.
308 — Permanent Redirect
The permanent twin of 307: cacheable like a 301, but with a guaranteed method and body preservation. APIs that move endpoints permanently prefer 308 because clients cannot silently turn a POST into a GET.
| Code | Name | Permanent | Method preserved | Typical use |
|---|---|---|---|---|
301 | Moved Permanently | Yes | POST may become GET | Site migrations, canonical URLs |
302 | Found | No | POST may become GET | Short links, A/B tests, geo-routing |
307 | Temporary Redirect | No | Yes, guaranteed | HSTS upgrades, temporary API routing |
308 | Permanent Redirect | Yes | Yes, guaranteed | Permanent API endpoint moves |
Which code should you use?
Two questions decide it: is the move permanent, and does the request method need to survive the hop? For ordinary web pages (GET requests), the method question rarely matters — the permanent/temporary split is what counts.
Why the choice matters for SEO
Search engines treat permanent and temporary redirects differently. A 301 (or 308) tells the crawler the old URL is retired: ranking signals consolidate on the target, and over time the target replaces the source in the index. A 302 (or 307) says “keep indexing the original” — useful for short links and experiments, harmful if you actually moved forever.
Common ways redirects quietly hurt a site:
- 302 where a 301 belongs: A permanent migration served as temporary splits signals between two URLs instead of consolidating them.
- Redirect chains: Three, four, five hops in a row slow every visit and waste crawl budget. Chain them often enough and crawlers give up before the destination.
- Redirect loops: A → B → A serves nothing at all. Browsers abort after a fixed number of hops.
- Mixed signals: A 301 pointing to a URL that itself 302s elsewhere leaves crawlers guessing which URL is canonical.
Anatomy of a redirect response
A redirect response is short — the status line, a Location header, and usually caching hints. Here is a permanent redirect that browsers are allowed to remember for a year:
HTTP/2 301 Moved Permanently
location: https://new.example.com/page
cache-control: max-age=31536000
Not every redirect is an HTTP response. Meta refresh tags and JavaScript redirects (window.location) happen in the page itself, after HTML loads. They are slower, weaker for SEO, and a favorite of phishing kits — the first hop looks harmless to simple scanners while the script sends you elsewhere.
See every code in the chain
You do not have to guess which code a link returns. Redirect Radar traces the full chain in a side panel: every hop with its exact status code, method, timing, and response headers — including JavaScript redirects that never appear in a simple HTTP check. Long chains and loops stand out immediately, and the final hop gets a security grade.
Try it on the next short link you receive, or on your own site after a migration: the first hop should be a single clean 301 to the canonical URL, not a staircase of 302s.
Short links from T.LY use clean, intentional redirects. Create a short link, then trace it with Redirect Radar to see the exact status code, headers, and destination your audience will hit. Get started with T.LY → and take 20% off your first month or a yearly plan with code
Conclusion
The four redirect codes are a small vocabulary with real consequences: 301 and 308 retire a URL and move its ranking signals; 302 and 307 keep the original alive; 307 and 308 guarantee the request method survives the hop. Choose deliberately, keep chains short, and verify the result with a tracer instead of assuming the config did what you meant.