HTTP status codes
Every time a web server responds to a request, it returns an HTTP status code — a three-digit number that communicates the outcome of that request. For SEO, understanding these codes is essential because they tell you and Google what happened when a URL was requested: did the page exist, did it move, was there an error?
Why HTTP status codes matter for SEO
Status codes directly affect:
- Whether a page can be crawled and indexed.
- Whether link equity passes through redirects.
- Whether Googlebot receives errors that reduce crawl efficiency.
- Whether users see the right content when they visit a URL.
Misdiagnosing or ignoring status codes leads to indexation problems, broken redirects, and wasted crawl capacity.
Learning objectives
After completing this module, you will be able to:
- Interpret HTTP status codes for SEO diagnostics.
- Choose the correct fixes for redirects, missing pages, and server errors.
- Audit status codes at scale using crawler tools.
Status code classes
2xx — Success
The request was successful.
| Code | Name | SEO meaning |
|---|---|---|
| 200 | OK | Page returned successfully. This is what important, indexed pages should return. |
| 204 | No Content | Rarely used in HTML pages; typically not an SEO concern. |
Key point: All your valuable, indexed pages should return 200.
3xx — Redirects
The resource has moved. The browser (or bot) should follow the redirect to the new location.
| Code | Name | SEO meaning |
|---|---|---|
| 301 | Moved Permanently | Signals the move is permanent. Google passes link equity (PageRank) through 301s. Use for permanent URL changes. |
| 302 | Found (Temporary) | Signals the move is temporary. Google may or may not transfer equity. Use only when a move is genuinely temporary. |
| 307 | Temporary Redirect | HTTP/1.1 version of 302. Temporary redirect. |
| 308 | Permanent Redirect | HTTP/1.1 version of 301. Permanent redirect, preserves request method. |
301 vs 302 in practice: Google has stated that it treats 301 and 302 similarly in terms of equity, but using 301 for permanent moves remains best practice. Using 302 for permanent changes was a historical cause of indexation confusion — the original URL might remain indexed instead of the destination.
Redirect chains: Multiple redirects in sequence (A → B → C) create additional HTTP requests, slow page load, and dilute efficiency. Minimize chains to a maximum of one redirect hop.
4xx — Client Errors
Something went wrong with the request — typically the requested resource does not exist or is not accessible.
| Code | Name | SEO meaning |
|---|---|---|
| 400 | Bad Request | Malformed request; rarely seen in normal SEO audits. |
| 401 | Unauthorized | Authentication required. Googlebot cannot access this content without credentials. |
| 403 | Forbidden | Server understood the request but refuses to fulfill it. Effectively blocks crawling. |
| 404 | Not Found | The URL does not exist. Googlebot will eventually drop indexed 404 pages. |
| 410 | Gone | The resource is intentionally and permanently removed. Google drops these pages faster than 404s. |
404 vs 410: Use 404 when a page has gone missing temporarily or you are unsure. Use 410 explicitly when you have permanently deleted a page and do not want Google to hold it in the index.
Soft 404s: A page that returns a 200 status code but displays "page not found" or similar empty-result content is a soft 404. These are problematic because Google indexes them as real pages. Fix by returning a genuine 404 or 410 status, or by redirecting to a relevant alternative.
5xx — Server Errors
The server encountered an error processing the request.
| Code | Name | SEO meaning |
|---|---|---|
| 500 | Internal Server Error | Catchall server error. Investigate immediately. |
| 502 | Bad Gateway | Upstream server issue. Often transient. |
| 503 | Service Unavailable | Server temporarily unable to handle requests. If persistent, crawl will be disrupted. |
| 504 | Gateway Timeout | Upstream timeout. Similar to 502. |
5xx impact on SEO: Repeated 5xx errors on important pages prevent crawling and can cause pages to be dropped from the index. A brief 503 during maintenance is acceptable (use Retry-After header). Persistent 5xx errors require urgent technical investigation.
Crawl audit workflow for status codes
Step 1: Crawl the site
Use Screaming Frog, Sitebulb, or similar to crawl all URLs. Export the status code column.
Step 2: Prioritize by impact
| Priority | Issue |
|---|---|
| Critical | 5xx errors on any page, 4xx on important pages |
| High | Redirect chains (3+ hops), 302s used for permanent moves |
| Medium | Soft 404s, 404s on recently-linked URLs |
| Low | 4xx on irrelevant or obsolete URLs |
Step 3: Fix internal links first
If a page moved (301) but internal links still point to the old URL, those links send users and bots through an unnecessary redirect. Update internal links to point directly to the final URL.
Step 4: Decide on 404 pages
For each 404:
- Does the page have inbound backlinks? → Redirect to relevant replacement.
- Was the page actively receiving traffic? → Redirect to replacement.
- Was it an orphan page nobody visited? → Leave as 404 or 410.
Step 5: Monitor server reliability
Configure uptime monitoring so 5xx events trigger alerts. Review GSC's "Page indexing" report for server availability errors.
Checklist
- All important pages return 200.
- Redirects use 301 for permanent moves.
- Redirect chains are minimized to single hops.
- Broken internal links are fixed to point to final destination URLs.
- 5xx errors are escalated and fixed urgently.
- Soft 404 patterns are reviewed in GSC and fixed.
Measurement
| Metric | What it tracks |
|---|---|
| 200 rate for important pages | Core page health |
| 4xx URL count | Broken links and missing pages |
| 5xx URL count | Server reliability issues |
| Redirect chain count | Redirect efficiency |
| Soft 404 count (in GSC) | Hidden crawl and index waste |
| Internal broken link count | Link health within the site |
Common mistakes
Redirecting all 404s to the homepage. This creates a "soft 404" from Google's perspective and offers no value to users. Redirect only to genuinely relevant replacement pages.
Using 302 for permanent changes. A 302 signals a temporary move. Google may continue indexing the original URL instead of the destination. Use 301 for all permanent URL changes.
Not fixing internal links after redirects. Even if a redirect passes equity, the internal link still tells bots and users that the old URL is "correct." Update internal links to point directly to final URLs after any migration or URL change.
Ignoring soft 404s. A page returning 200 with "no results" or "product unavailable" content wastes crawl capacity and confuses users. These need genuine status codes or redirects.
Treating all 5xx errors as temporary. A brief 503 during deployment is normal. But repeated 5xx events on specific pages often signal underlying technical issues (broken scripts, database errors) that need developer investigation.