Skip to content
← All articles HTTP Status Codes: The Complete Reference for SEO & Web Development

HTTP Status Codes: The Complete Reference for SEO & Web Development

A full breakdown of every HTTP status code — 1xx through 5xx — with practical guidance on how each one affects SEO, crawling, and indexing.

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

ClassMeaningCodes
1xxInformational100, 101, 102
2xxSuccess200, 201, 202, 203, 204, 205, 206, 207
3xxRedirects301, 302, 303, 304, 307, 308
4xxClient errors400, 401, 403, 404, 405, 410, 429…
5xxServer errors500, 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)?

Permanent move? Yes No Preserve method? Preserve method? Yes No Yes No 308 Permanent 301 Moved Perm. 307 Temporary 302 Found

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.

Page deleted / unavailable Is there a replacement URL? Yes No 301 Redirect Removed permanently? Yes No 410 Gone 404 Not Found

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

CodeSituationSEO Action
200Page worksNormal. Check for soft 404s
301Permanent moveUpdate sitemap and internal links
302Temporary moveDon't use for permanent redirects
304Cache is freshNormal
403Access deniedCheck Googlebot isn't blocked
404Page not found301 to replacement, or 410 if permanent
410Permanently removedGoogle deindexes faster than 404
429Rate limitedEnsure crawlers aren't being blocked
500Server errorUrgent — check error logs
503Server downAdd 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

FAQ

Short answers to the most common questions from this article.

What does HTTP 403 Forbidden mean?
The server understood the request and refuses to fulfil it. Unlike 401, signing in does not help — access is denied by a rule. It matters for SEO because a 403 served to Googlebot drops the page out of the index. The usual culprits are WAF rules, User-Agent blocks and country filters.
What is a 304 Not Modified status code?
The answer to a conditional request carrying If-Modified-Since or If-None-Match: the document has not changed since the last crawl, so no body is sent. It is not an error but an economy — a correct 304 saves crawl budget and speeds up recrawling.
What does HTTP 429 mean?
A rate limit has been hit. Googlebot slows its crawl in response, and a 429 served consistently suppresses crawling for a long time. Check whether your bot protection is catching the search crawler along with everything else.
What is a 499 status code?
A non-standard nginx code: the client closed the connection before the server could answer. It is never sent to the client and only appears in logs. It almost always means a slow backend plus an impatient client or a crawler with a short timeout.
What is the difference between 502 and 504?
502 Bad Gateway means the upstream answered with something invalid. 504 Gateway Timeout means the upstream did not answer in time. For search both are equally bad: Google retries, and if the pattern holds it starts removing pages from the index.
What are the most common HTTP status codes?
On a live site: 200, 301, 302, 304, 403, 404, 410, 429, 500, 502 and 503. The rest appear rarely and almost always at the API level rather than on pages that get indexed.
How do I check the HTTP status code of a URL?
Quickest is curl -I https://example.com/page. For one page inside Google, use URL inspection in Search Console. For a list of URLs, with redirect chains alongside, use the redirect checker.