If you’ve ever seen a “301 vs. 302” argument in an SEO Slack channel, you know redirects sound more complicated than they are. They’re not. There are really only a handful of redirect types you need to know, and most sites only ever use two of them.
This guide is for anyone who manages a website, works in SEO, or just needs to fix a broken link without breaking their rankings in the process. By the end, you’ll know exactly which redirect to use, when, and why the wrong one can quietly cost you traffic.
Quick summary — the redirect types that actually matter:
- 301 (Moved Permanently) — the page moved for good; use this 90% of the time
- 302 (Found) — the page moved temporarily; Google keeps the original indexed
- 307 / 308 — stricter versions of 302 and 301 that preserve the request method
- Meta refresh and JavaScript redirects — non-server alternatives, best avoided when you have a choice
What Is a Redirect?
A redirect is a way of automatically sending visitors, and search engines, from one URL to a different one. Instead of showing a “page not found” error, the browser quietly loads the new address.
Technically, most redirects work through HTTP status codes, three-digit numbers a server sends to a browser. Any code starting with a 3 is a redirect. The server also sends a Location header telling the browser exactly where to go next.
You’ll run into redirects constantly without noticing: typing example.com and landing on www.example.com, clicking an old blog link that lands on the updated post, or visiting a site that force-switches you from http:// to https://. All of those are redirects doing their job.
Permanent vs. Temporary: The Split That Actually Matters
Before you memorize individual codes, understand this one distinction. It decides everything else.
Permanent redirects tell search engines the old URL is gone for good. Google drops the old URL from its index and transfers its ranking signals to the new one. Use these when a page has genuinely moved and isn’t coming back.
Temporary redirects tell search engines the move is short-term. Google keeps the original URL indexed and doesn’t transfer ranking value to the new one. Use these for maintenance pages, limited-time promotions, or A/B tests.
Mixing these up is the single most common redirect mistake. Use a temporary redirect for a permanent move, and your old page can keep hogging the index while your new page struggles to rank. Use a permanent one for something temporary, and you can lose your original page from search results entirely.
The Main Types of Redirects (HTTP Status Codes)
Here’s every redirect code you’re likely to encounter, and what each one is actually for.
| Code | Name | Type | Typical use case |
|---|---|---|---|
| 301 | Moved Permanently | Permanent | Page moved for good; most common redirect on the web |
| 302 | Found | Temporary | Short-term move; original URL stays indexed |
| 303 | See Other | Temporary | Redirect after a form submission, so refreshing doesn’t resubmit it |
| 307 | Temporary Redirect | Temporary | Like 302, but guarantees the request method doesn’t change |
| 308 | Permanent Redirect | Permanent | Like 301, but guarantees the request method doesn’t change |
| 300 | Multiple Choices | Special | Rare — lets the browser show a list of options to pick from |
| 304 | Not Modified | Special | Tells the browser to use its cached copy of the page |
301 Moved Permanently
The default choice for almost every real redirect. If you’re merging pages, renaming a URL, fixing a broken link, or migrating to a new domain, this is what you use. It passes the bulk of the old page’s ranking authority to the new one.
302 Found
Use this when a page is unavailable right now but will come back. A flash sale page, a site under maintenance, or an A/B test are good examples. Google keeps showing the old URL in search results while the redirect is active. That’s exactly the point.
303 See Other
You’ll see this less often. It’s built for one specific job: redirecting a user after they submit a form or complete an action, so hitting the browser’s back button and refresh doesn’t accidentally resubmit the same data.
307 Temporary Redirect
Functionally almost identical to 302, with one difference: a 307 guarantees the browser won’t change the request method (say, from POST to GET) during the redirect. Most sites can use 302 without issue, but 307 is the technically stricter option when that distinction matters.
308 Permanent Redirect
It has the same relationship to 301 that 307 has to 302: a permanent redirect that preserves the original request method exactly. It was introduced specifically to remove ambiguity that 301 carried over from older, looser server behavior.
300 Multiple Choices and 304 Not Modified
These two are edge cases you’ll rarely configure yourself. A 300 lets a server offer several possible pages for one request, though you almost never see this in practice. A 304 isn’t really a redirect at all. It tells the browser “nothing’s changed, use what you already cached,” which speeds up load times rather than sending anyone anywhere.
Other Ways to Redirect (Non-HTTP Methods)
HTTP status codes aren’t the only way to redirect a page. Two other methods exist, and it’s worth knowing when to reach for them, and when not to.
Meta refresh redirects live inside the page’s HTML, not the server response:
html
<meta http-equiv="refresh" content="0; url=https://example.com/new-page" />
Google treats a meta refresh with 0 seconds as permanent, and anything above 0 seconds as temporary. These are slower than server-side redirects and are generally a fallback for when you don’t have access to your server configuration.
JavaScript redirects work by changing the page location through code:
javascript
window.location = "https://example.com/new-page";
These only work if the browser actually runs the script, which isn’t guaranteed for search engine crawlers. Google has said plainly that it only recommends JavaScript redirects when server-side and meta refresh redirects genuinely aren’t options, since rendering can fail and the redirect might go unseen entirely.
One detail almost nobody mentions: if a page somehow has more than one of these three redirect methods set up at once, HTTP redirects always fire first, JavaScript redirects fire second, and meta refresh fires last, since it only triggers after the page has fully loaded. Knowing the order matters if you’re troubleshooting a redirect that doesn’t seem to be working the way you expect.
Not All 3-Digit Codes Are Redirects — Clearing Up a Common Mix-Up
You’ll find articles online that lump 4xx codes (like 404 Not Found) and 5xx codes (like 500 Internal Server Error) in with “redirect types.” That’s not accurate, and it’s worth being clear about why.
A redirect sends a browser to a different, working URL. A 4xx code means the problem is with the request itself: the page truly doesn’t exist, or access is denied. A 5xx code means the server itself failed to process the request. Neither one redirects anybody anywhere. They just report an error and stop there.
It’s a small distinction, but it matters if you’re diagnosing a broken page. A 404 needs a fix or a redirect to a working page — it isn’t a redirect on its own.
How to Choose the Right Redirect Type
A simple way to decide:
- Is the move permanent?
Use a 301 (or 308 if you need the stricter method-preserving behavior). - Is the move temporary?
Use a 302 (or 307 for the stricter version). - Are you redirecting after a form submission?
Use a 303. - Do you have server access?
Always prefer a server-side HTTP redirect over meta refresh or JavaScript. - Don’t have server access?
A meta refresh set to 0 seconds is the next-best option.
Redirect Best Practices
Getting the code right is half the job. These habits prevent the other half of redirect problems:
- Redirect to the closest matching page: Sending users to a page with completely different content is treated as a soft 404, so Google largely ignores the redirect and won’t pass along any ranking value.
- Avoid redirect chains: If page A redirects to B, which redirects to C, fix it so A points straight to C. Google follows roughly 10 redirect hops before giving up, and every extra hop slows the page down and leaks a bit of ranking signal.
- Avoid redirect loops: A redirects to B, and B redirects back to A. This breaks the page entirely, and browsers will show an error rather than load anything.
- Update your internal links: If you redirect an old URL, go back and point your own internal links straight to the new one instead of routing them through the redirect.
- Give redirects time: Google’s John Mueller has said search systems need to see a redirect consistently over time to fully register the change, and recommends keeping a redirect live for at least a year.
If you’re planning a bigger site migration, it’s worth pulling every URL from your current sitemap first with a Sitemap URL Extractor so nothing gets missed in the move. It’s also worth double-checking your robots.txt isn’t accidentally blocking the new pages from being crawled.
How to Check Which Redirects Your Site Is Using
Reading about redirect codes is one thing. Seeing your actual redirect chain is another. If you’ve inherited a site, migrated a domain, or just want to confirm a fix actually worked, you need to see the real HTTP response, not guess from the browser.
SearchBulb’s free Redirect Checker does exactly that. Paste in any URL, and it traces the full redirect path: every hop, every status code, and the final destination, so you can spot chains, loops, and wrong-code mistakes in seconds. No signup, no limits, and nothing gets stored on our end.
The Bottom Line
Most redirect confusion comes down to one choice: permanent or temporary. Get that right, pick 301 or 302 accordingly, and you’ll cover the vast majority of real-world situations. The other codes (303, 307, 308, 300, 304) exist for specific technical cases you’ll rarely need to think about day to day.
If you’re not sure what’s actually happening on a URL right now, don’t guess. Run it through the free Redirect Checker and see the real answer.
