Every time a browser requests a URL, the server responds with an HTTP status code. Most of the time this happens invisibly — the user just sees the page. But when something breaks — a redirect loop, a missing page, a server crash — the status code tells you exactly where to look.
For SEO professionals, status codes are critical. They directly affect crawl budget, link equity transfer, and how quickly Google removes — or keeps — pages in its index. This guide covers every relevant code with a practical SEO lens.
Quick Reference by Class
| Class | Meaning | Codes |
|---|---|---|
| 1xx | Informational | 100, 101, 102 |
| 2xx | Success | 200, 201, 202, 203, 204, 205, 206, 207 |
| 3xx | Redirects | 301, 302, 303, 304, 307, 308 |
| 4xx | Client errors | 400, 401, 403, 404, 405, 410, 429… |
| 5xx | Server errors | 500, 502, 503, 504… |
Decision Flowcharts: Which Code Should You Use?
Two quick flowcharts to pick the right status code without digging through docs every time.
Redirects: 301, 302, 307 or 308?
The choice comes down to two questions: is the move permanent or temporary, and does the HTTP method need to be preserved (relevant for POST requests)?
Page unavailable: 301, 404 or 410?
The most common SEO scenario: a page is deleted or moved. This flowchart helps you pick the right server response.
1xx — Informational
Provisional responses sent while the server is still processing. Rarely appear in logs. No SEO impact.
100 Continue
The server received the request headers and gives the client the go-ahead to send the body. Only appears during large POST requests with the Expect: 100-continue header. Invisible to end users.
101 Switching Protocols
The server agreed to switch protocols as requested by the client — most commonly upgrading from HTTP/1.1 to WebSocket. Used in real-time apps: live chat, push notifications, collaborative tools.
102 Processing
A WebDAV extension indicating the server received the request and is working on it. Prevents the browser from timing out during long-running operations.
2xx — Success
The request was received, understood, and accepted. From an SEO perspective, every page you want indexed should return 200 — nothing else.
200 OK
The most important status code. The page exists and the server returned its content. Every indexable page must return 200. A common pitfall: soft 404s — error pages that return 200 — fool Googlebot into indexing empty or unhelpful content.
201 Created
The request succeeded and a new resource was created as a result. Used in REST APIs after a successful POST — for example, when a form submission creates a new record.
202 Accepted
The request was accepted for processing but hasn't completed yet. Typical for async jobs: data imports, report generation, bulk operations.
203 Non-Authoritative Information
The request succeeded, but the returned data comes from a third-party source (cache, proxy) rather than the origin server. Functionally similar to 200 but signals potentially stale data.
204 No Content
The request succeeded but there's nothing to return. Used for actions with no visual output: saving settings, deleting an item, sending a heartbeat ping.
206 Partial Content
The server returned only part of the resource, in response to a Range header. Used for resumable file downloads and video streaming.
3xx — Redirects
The most SEO-critical class of status codes. Misconfigured redirects are among the most common causes of lost rankings and link equity.
301 Moved Permanently
Permanent redirect. Passes ~99% of link equity to the new URL. Use for:
- Domain migrations or HTTP → HTTPS upgrades
- Deleting a page and sending users to a relevant replacement
- Canonicalizing URL variants (
/page→/page/)
⚠️ Redirect chains (301 → 301 → 301) bleed link equity and slow crawling. Always point directly to the final destination URL.
🔴 SEO risk: Every extra hop in a chain bleeds link equity. Three 301s in a row means significantly less authority reaches the final URL. Internal links pointing to old URLs force Googlebot to make additional requests, burning crawl budget.
302 Found
Temporary redirect. Unlike 301, it does not reliably pass link equity and should never be used for permanent moves. Appropriate for A/B testing, maintenance pages, and geo-based redirects.
⚠️ Using 302 where you mean 301 is one of the most common SEO mistakes. Google may index both URLs or fail to pass equity.
🔴 SEO risk: Link equity does not transfer to the new URL. Pages with inbound links behind a 302 lose all accumulated authority. Google may keep both URLs in the index, creating duplicate content issues.
303 See Other
Redirects from a POST response to a GET page. Used in the Post/Redirect/Get pattern to prevent form resubmission when a user refreshes the page.
304 Not Modified
The resource hasn't changed since the client's cached version. The browser uses its local cache instead of downloading the page again. Speeds up load times and reduces server load. Googlebot supports conditional requests too.
307 Temporary Redirect
Like 302, but strictly preserves the HTTP method (a POST stays a POST). Use instead of 302 when the method must not change.
308 Permanent Redirect
A permanent redirect that strictly preserves the HTTP method. Unlike 301, if the client sent a POST request, the server redirects it as POST — not GET. Relevant for APIs and forms where the method matters. Passes link equity the same way as 301.
4xx — Client Errors
The server understood the request but can't or won't fulfil it. From an SEO perspective, these are direct losses: wasted crawl budget and pages dropping out of the index.
400 Bad Request
The request was malformed: bad syntax, invalid parameters, or corrupt headers. Commonly triggered by broken forms or API integrations.
401 Unauthorized
Authentication is required. The server returns this when credentials are missing or incorrect. For SEO: password-protected areas returning 401 won't be indexed — which is usually the intended behaviour.
403 Forbidden
The server understood the request but refuses to fulfil it, regardless of authentication. Causes: IP blocks, firewall rules, incorrect file permissions.
🔍 If Googlebot receives 403 on pages that should be public, check for User-Agent blocks in .htaccess or your nginx config.
🔴 SEO risk: If Googlebot receives 403 instead of 200, the page won't be indexed. Common cause: a WAF or CDN rule blocking bots by User-Agent. Verify access via Google Search Console → URL Inspection tool.
404 Not Found
Page not found. The resource doesn't exist but might appear in the future. SEO implications:
- 404s on pages with no inbound links — fine, no action needed
- 404s on pages with external links — link equity lost, set up a 301 to a relevant page
- Soft 404s — error pages that return a 200 status code. Googlebot indexes them as normal pages. The most dangerous scenario: your index fills up with worthless URLs that waste crawl budget and dilute site quality.
🔴 SEO risk: 404s on pages with inbound links mean direct loss of link equity. Soft 404s pollute your index and signal low quality to Google. A high volume of 404s reduces your crawl budget allocation.
410 Gone
Permanently removed. Unlike 404, this explicitly tells Googlebot: "stop looking, this is gone for good." Google deindexes 410 pages faster than 404s. Use it when content will never return.
421 Misdirected Request
The request was directed to a server that cannot produce a response — typically due to a TLS certificate mismatch in an HTTP/2 connection. Usually caused by misconfigured reverse proxies or CDNs. No direct SEO impact, but requires an infrastructure fix.
🔴 SEO risk: Use 410 instead of 404 when content is permanently gone. Google deindexes 410 pages significantly faster — sometimes within days, versus weeks for 404.
429 Too Many Requests
The client sent too many requests in a given timeframe. Used for rate limiting APIs, login forms, and scrapers. If a crawler repeatedly hits 429, it backs off — which can slow down indexing.
451 Unavailable For Legal Reasons
Access is blocked for legal reasons: government censorship, court order, copyright takedown. Named after Ray Bradbury's Fahrenheit 451.
5xx — Server Errors
The server understood the request but failed to fulfil it. Sustained 5xx responses cause Googlebot to reduce crawl frequency, and pages can drop out of the index.
500 Internal Server Error
Generic server error. Something went wrong, but the server won't say what. Common causes: code bugs, malformed .htaccess, PHP memory exhaustion. Check your server error logs immediately.
🔴 SEO risk: Isolated 500s are harmless. But sustained 500s over several hours cause Googlebot to reduce crawl frequency. Extended outages can temporarily drop pages from the index.
502 Bad Gateway
A proxy or load balancer received an invalid response from the upstream server. Often appears when the backend application crashes or becomes overloaded.
503 Service Unavailable
The server is temporarily unable to handle requests — overload or scheduled maintenance. Always add a Retry-After header during maintenance so Googlebot knows when to come back.
💡 If 503 persists for more than 24 hours, Google will start removing affected pages from the index.
🔴 SEO risk: A short 503 (a few hours) is fine — Google handles it gracefully. The critical mistake: omitting the Retry-After header. Without it, the crawler doesn't know when to return and may start deprioritising the site sooner.
504 Gateway Timeout
The gateway or proxy didn't receive a timely response from the upstream server. A sign that the backend is overloaded, hung, or unreachable.
505 HTTP Version Not Supported
The server doesn't support the HTTP version specified in the request. Rare in modern infrastructure.
511 Network Authentication Required
The client must authenticate with the network before accessing the resource — for example, accepting terms on a public Wi-Fi captive portal. This code is generated by an intermediary, not the origin server. No SEO relevance: Googlebot doesn't connect through captive portals.
Quick-Action Reference
| Code | Situation | SEO Action |
|---|---|---|
| 200 | Page works | Normal. Check for soft 404s |
| 301 | Permanent move | Update sitemap and internal links |
| 302 | Temporary move | Don't use for permanent redirects |
| 304 | Cache is fresh | Normal |
| 403 | Access denied | Check Googlebot isn't blocked |
| 404 | Page not found | 301 to replacement, or 410 if permanent |
| 410 | Permanently removed | Google deindexes faster than 404 |
| 429 | Rate limited | Ensure crawlers aren't being blocked |
| 500 | Server error | Urgent — check error logs |
| 503 | Server down | Add Retry-After, fix within 24h |
How to Check Status Codes
- DevTools → Network tab — see the status code for every request on the page
- Google Search Console → Coverage — shows 404s, redirects, and crawl errors from your index
- curl in terminal:
curl -I https://example.com/page - Screaming Frog — crawl your entire site and export status codes in bulk