HTTP Status Codes and Redirects: 200, 301, 302, 404, 410 and Soft 404
Every time a browser or crawler requests a URL, the server returns a three-digit HTTP status code indicating "how did this request go." This number directly affects how search engines treat your page: whether to index it, transfer ranking signals, or remove it from the index. Understanding status codes and using redirects correctly is key to handling page migrations, deletions, and errors without losing traffic.
Status Code Classification Overview#
HTTP status codes are divided into five major categories based on their first digit. SEO focuses primarily on 2xx, 3xx, 4xx, and 5xx:
| Category | Meaning | SEO-Relevant Codes |
|---|---|---|
| 2xx | Success | 200 |
| 3xx | Redirection | 301, 302, 304, 307, 308 |
| 4xx | Client Error | 404, 410, 403, 429 |
| 5xx | Server Error | 500, 503 |
200: Success#
200 OK indicates successful request and normal page return. This is the status code you want all important content pages to return. For a page to be indexed, the first threshold is stably returning 200 (assuming indexing is allowed and content has value—see Crawling and Indexing Principles).
3xx: Redirection#
3xx indicates the requested resource is located elsewhere and requires a redirect. This is the category requiring the most precise usage in SEO.
| Status Code | Meaning | SEO Use Case |
|---|---|---|
| 301 | Permanent Redirect | Permanent move, transfer indexing and signals to new URL (most common) |
| 302 | Temporary Redirect | Temporary jump, keep original URL indexed |
| 307 | Temporary Redirect (preserve method) | Strict version of 302, common with HSTS |
| 308 | Permanent Redirect (preserve method) | Strict version of 301 |
| 304 | Not Modified | Cache negotiation, content unchanged, saves bandwidth and crawling |
301 vs 302: The Most Important Distinction
This is the most easily misused and costly choice in SEO.
- 301 (Permanent): Tells search engines "the old URL has permanently moved to the new URL." Index and ranking signals transfer to the new URL, and the old URL is eventually replaced by the new one.
- 302 (Temporary): Tells search engines "the old URL is only temporarily redirected and will be back." Search engines keep the old URL indexed and don't transfer signals.
| Scenario | Use |
|---|---|
| Domain change, URL restructuring | 301 |
| HTTP to HTTPS migration | 301 |
| Deleted page with equivalent alternative | 301 |
| Merging duplicate pages | 301 |
| Limited-time campaign page redirect | 302 |
| A/B testing temporary split | 302 |
| Region/language temporary redirect | 302 |
4xx: Client Errors#
| Status Code | Meaning | SEO Handling |
|---|---|---|
| 404 | Not Found | Normal occurrence; redirect if alternative exists, otherwise keep |
| 410 | Gone | Stronger deletion signal, faster removal |
| 403 | Forbidden | Check if Googlebot is blocked by mistake |
| 429 | Too Many Requests | Overly strict rate limiting blocks crawling—relax it |
404 and 410: Page Does Not Exist
Many people have unnecessary fear of 404s. The reality: 404 is a normal part of the web and doesn't hurt overall site rankings by itself. Pages get deleted, links break—this is normal. The key is "should this be handled differently":
- Has equivalent alternative content → Use 301 redirect to the alternative page, preserving signals and UX.
- Content is gone, no alternative → Keeping 404 or 410 is correct, don't force a 301.
Difference between 404 and 410: 404 means "not found now" (may exist later), 410 means "permanently gone." 410 is a stronger deletion signal and Google typically removes it faster, but in practice their final results are similar. A friendly 404 page should retain site navigation, search box, and homepage link to help users find their way.
Soft 404: The Most Insidious Trap#
Soft 404 occurs when a page actually returns a 200 success status code, but the content says "page doesn't exist/no content". Status code and content contradict each other, confusing search engines, which will classify it as soft 404 and refuse to index it.
| Typical Soft 404 | Problem | Correct Approach |
|---|---|---|
| "Sorry, page not found" returns 200 | Status contradicts content | Return actual 404/410 |
| Empty search results page returns 200 | No substantive content seen as soft 404 | noindex or return appropriate status |
| Discontinued product page shows shell, returns 200 | Thin content | 301 to category page or return 404 |
| Deleted page redirects to homepage (200) | Unrelated target, judged as soft 404 | No alternative? Return 404 directly |
Soft 404s appear in Google Search Console's Page Indexing report. The core fix: ensure truly non-existent or content-less pages return status codes matching reality.
5xx: Server Errors#
5xx indicates the server itself encountered an error. It's far more damaging to SEO than 404—because it means the server can't even "respond normally."
- 500 Internal Server Error: Code or server configuration error. Occasional occurrences are acceptable; persistent occurrences lead to page downgrading or removal from index.
- 503 Service Unavailable: Server temporarily overloaded or under maintenance. Planned maintenance should actively return 503 (with
Retry-Afterheader), telling crawlers "come back later" and preventing them from treating the maintenance page as real content or an error.
Retry-After site-wide, restore 200 after maintenance.Redirect Chains and Loops#
Redirects used correctly are medicine; used poorly they're a burden. Two common problems:
- Redirect Chains: A→B→C→D, requiring multiple hops to reach the final page. Each hop adds latency, consumes crawl budget, and overly long chains may cause search engines to stop following mid-chain.
- Redirect Loops: A→B→A infinite loop, page never loads—a dead end for users and crawlers alike.
# Bad: Multi-hop chain
/old → /interim (301)
/interim → /newer (301)
/newer → /final (301)
# Good: Each old URL direct to final target
/old → /final (301)
/interim → /final (301)
/newer → /final (301)
Additionally, update internal links on the site to point directly to final URLs rather than relying on redirect hops—a principle emphasized throughout URL Structure and Site Migration.
Redirects, canonical, and noindex: Their Roles#
These all affect how search engines handle URLs, but solve different problems—don't confuse them.
| Tool | Page Accessible? | Use Case |
|---|---|---|
| 301 Redirect | No, jumps to target | Old URL no longer needed, permanent move |
| canonical | Yes, all accessible | Multiple URLs to keep, index only one |
| noindex | Yes | Page for users, not search results |
| 404 / 410 | No, doesn't exist | Content permanently deleted, no alternative |
The boundaries between these three are covered in more detail in Canonical Tags.
How to Check Status Codes#
- Browser DevTools: Network panel shows Status for each request.
- Command-line curl:
curl -I https://example.com/pageto view response headers and status code;-ILtracks full redirect chain. - Google Search Console: URL Inspection tool shows status Googlebot received; Page Indexing report batches by "Not found 404", "Page with redirect", "Soft 404", etc.
- Screaming Frog and other crawlers: Crawl entire site, batch-list all status codes, redirect chains, and soft 404s.
$ curl -IL https://example.com/old-page
HTTP/2 301
location: https://example.com/new-page
HTTP/2 200
content-type: text/html; charset=utf-8
This Site's Status Code Strategy#
Status Code and Redirect Checklist#
- Important content pages stably return 200
- Permanent moves/changes/HTTP→HTTPS always use 301
- Use 302 only for temporary redirects, don't confuse
- Deleted pages with alternative: 301; without: 404/410
- Don't batch 301 unrelated pages to homepage
- Non-existent pages return actual 404/410, eliminate soft 404s
- Maintenance returns 503 + Retry-After, not 200
- Eliminate redirect chains, old URLs one hop to final target
- No redirect loops
- Internal links point directly to final URLs
- Regularly check for abnormal status codes via GSC / crawlers
Frequently Asked Questions#
What is the difference between 301 and 302 redirects?
301 is a permanent redirect, telling search engines that the old URL has permanently moved to a new URL. Search engines should transfer indexing and ranking signals to the new URL and eventually replace the old URL with the new one. 302 is a temporary redirect, indicating that the old URL is only temporarily redirected and will be used again in the future, so search engines keep the old URL indexed. Permanent moves (domain changes, URL restructuring, HTTP to HTTPS) must use 301; temporary campaign pages, A/B testing, etc., should use 302. Using the wrong one prevents proper signal transfer.
What is the difference between 404 and 410? Do 404s need to be fixed?
404 means "Not Found", while 410 means "Gone" (permanently deleted). 410 is a stronger deletion signal, and Google typically removes 410 pages from its index faster, but in practice the results are similar. 404 itself doesn't hurt overall site rankings; it's a normal part of the web. Whether to fix depends on the situation: if a page has equivalent alternative content, use 301 redirect to the alternative page; if the content is truly gone with no replacement, keeping 404 or 410 is correct—don't force a 301 to the homepage.
What is a soft 404?
A soft 404 occurs when a page actually returns a 200 success status code, but the content says "page not found/no content" (such as empty search result pages, or pages showing "Sorry, not found" while returning 200). This confuses search engines: the status code says success, but the content indicates error. Google will classify it as a soft 404 and refuse to index it. The correct approach is to make truly non-existent pages return actual 404 or 410 status codes.
Do redirect chains affect SEO?
Yes. Redirect chains (A→B→C→D) slow down page loading, waste crawl budget, and overly long chains may cause search engines to stop following them mid-chain. Best practice is to make each old URL redirect directly to the final destination in one hop (A→D), and update all internal links on the site to point directly to the final URL rather than relying on redirects.