HTTP Status Codes

What HTTP status codes are, how they work (1xx–5xx), which ones matter most for SEO, and how Google interprets them — the hub for redirects, errors, and crawl behavior.

First published: Jun 27, 2026 · Last updated: Jul 18, 2026 · Advanced
demand #4 in HTTP Status Codes#21 in Technical SEO#29 on the site
1 evidence signal on this page

An HTTP status code is the three-digit number a server returns with every response, and for SEO the code matters as much as the content on the page. Five families: 1xx informational, 2xx success (eligible for indexing, but 200 doesn't guarantee it), 3xx redirects (301/308 pass a canonicalization signal, 302/307 don't), 4xx client errors (404/410 drop pages from the index over time; 404s generally don't hurt rankings), and 5xx server errors (which — with 429 — make crawlers slow down, not instantly deindex). The sneaky exception is the soft 404: a 200 status with 'this doesn't exist' content, which Google treats like a 404 and flags in Search Console. This hub maps the families, corrects the common myths, and links down to the deep dives on individual error codes.

TL;DR — The status code is a first-class SEO signal, independent of the page’s content. 2xx is necessary but not sufficient for indexing. 301/308 pass a canonicalization signal; 302/307 don’t. 4xx pages get dropped from the index over time, and 404 generally doesn’t hurt rankings. 5xx and 429 make crawlers slow down, not deindex — recovery is gradual once 2xx returns. The trap is the soft 404: a 200 status wrapped around “this doesn’t exist” content, which Google detects at the content layer and treats like a real 404. Match the code to reality, use permanent redirects for permanent moves, and return 503 — not a broken 200 — during downtime.

What a status code actually is

The five response classes come from RFC 9110, the HTTP specification — they’re protocol semantics, not direct SEO scores. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: RFC 9110: Status codes Google’s documentation, layered on top of that spec, describes likely processing outcomes without guaranteeing exact crawl or index timing. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: Google: HTTP and network errors

Google’s own documentation is the cleanest definition: “HTTP status codes are generated by the server that’s hosting the site when it responds to a request made by a client, for example a browser or a crawler.” The key idea for SEO is that the code is a signal in its own right, separate from whatever HTML comes after it. A page can look perfect to a human and still be invisible to search because of the number the server sent first.

The five families, through an SEO lens

1xx — Informational. Provisional “still working” responses (100 Continue, 101 Switching Protocols). Almost never SEO-relevant, with one modern exception: 103 Early Hints, which lets the server tell the browser to start preloading critical resources before the full response is ready — a small Core Web Vitals win, not an indexing lever.

2xx — Success. 200 OK is what an indexable page returns. But a 200 is necessary, not sufficient: Google can still decline to index a 200 page for quality, duplication, or other reasons. Edge case worth knowing — a 204 No Content (a successful response with an empty body) can get treated like a soft 404, because there’s nothing to index.

3xx — Redirection. This is where the canonicalization distinction lives, and it’s the single most misunderstood part of the topic. Per Google’s redirects documentation:

  • 301 (permanent) and 308 — Google follows the redirect and “the indexing pipeline uses the redirect as a signal that the redirect target should be canonical.” Ranking signals consolidate onto the target.
  • 302 (temporary) and 307 — Google follows the redirect, “but the indexing pipeline doesn’t use the redirect as a signal that the redirect target should be canonical.” A 302 left in place for a genuinely permanent move is a classic misconfiguration — Google may eventually treat a long-lived 302 like a 301 in practice, but you shouldn’t rely on that.

Google recommends you “use a permanent server-side redirect whenever possible” for permanent moves, and notes a hard ceiling: “By default, Google’s crawlers follow up to 10 redirect hops.” Redirect chains that run longer than that get abandoned. (For the full tour of the eleven redirect types and their SEO impact, I’ve written that up separately at Ahrefs, linked in Resources — this hub is deliberately the map, not the deep dive.) Also in the 3xx family: 304 Not Modified, a caching signal that tells a crawler its cached copy is still current — no direct ranking effect, but it supports efficient crawling on large sites.

4xx — Client error. The page can’t be served because of something on the request side — it’s missing, forbidden, or blocked to this client. Google is explicit: “Google doesn’t use the content from URLs that return 4xx status codes,” and “if a URL was previously used but is now returning 4xx status code, Google systems will stop using the URL over time.” For 404 specifically, “the indexing pipeline removes the URL from the index if it was previously indexed. Newly encountered 404 pages aren’t processed.”

Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: Google: HTTP and network errors

Two important nuances here:

  • 404 doesn’t hurt rankings. Search Console Help states it directly: “In general, 404 errors won’t impact your site’s search performance.” The risk from a 404 is losing the traffic and links the page carried, or — at scale — wasting crawl budget.
  • Don’t weaponize 401/403 against Googlebot. Google warns: “Don’t use 401 and 403 status codes for limiting the crawl rate. The 4xx status codes, except 429, have no effect on crawl rate.” Blocking Googlebot with a 401/403 doesn’t “slow it down” — it just makes the content invisible.

The individual client-error codes each have their own story — the access-and-auth codes (401, 403), the “gone” codes (404, 410, and the question of which to use), rate-limiting (429), and the legal-block code (451) — and each gets a full treatment in its own article. See “Where to go next” below.

5xx — Server error. The request was fine; the server failed to fulfill it (500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable, 504 Gateway Timeout). The crucial SEO fact: these don’t instantly deindex. Google’s doc: 5xx and 429 server errors “prompt Google’s crawlers to temporarily slow down with crawling,” and “once the server starts responding with a 2xx status code, Google gradually increases the crawl rate.” The slowdown is measured: “the decrease in crawl rate is proportionate to the number of individual URLs that are returning a server error.” Previously indexed URLs are preserved through a blip; only sustained server errors eventually lead to removal.

Crawl vs. index: the mental model that ties it together

Two different questions live behind these codes:

  1. Should I crawl this? 5xx/429 say “slow down, try later.” 301/302 say “go here instead.” 429 and the 5xx family are the only codes that actually throttle crawl rate.
  2. Should I index this, and under which URL? 2xx = eligible. 4xx = drop it. 301/308 = consolidate onto the target.

The connective thread — and the thing that breaks this model — is the soft 404, where the code and the content disagree.

Soft 404s — the sneaky exception

A soft 404 is a page that returns a success code (200) but whose content says the item doesn’t exist — an empty page, a “sorry, not found” message, or a thin/blank result. Google detects the problem at the content layer, regardless of the HTTP code: “if the content suggests an error for Google Search, an empty page or an error message, Search Console will show a soft 404 error.”

Why care, if the page “loads fine”? Because it wastes crawl budget. Google’s large-site guide is blunt: “soft 404 pages will continue to be crawled, and waste your budget.” They usually come from misconfigured CMSes or JavaScript frameworks that return 200 for routes that don’t exist. The fix is to make the code match reality — return a real 404 (or 410) so Google can drop the URL cleanly. There’s a dedicated soft-404 article in this cluster.

404 vs. 410 — does it actually matter?

Barely, for SEO. John Mueller settled this in a 2024 clarification: “The difference in processing of 404 vs 410 is so minimal that I can’t think of any time I’d prefer one over the other for SEO purposes,” adding that “Google does not penalize for 404’s (those pages drop out of the index though).” A 410 (Gone) can signal permanence marginally faster and documents intent more clearly for humans and other tooling — the historical Matt Cutts framing was that 410 removal ran “a little faster,” a few days at most. Use 410 when you’re certain the removal is permanent; 404 when the page might return or you’re unsure. Google’s crawl-budget guide is happy with either: “a 404 status code is a strong signal not to crawl that URL again.” The dedicated 404-vs-410 article resolves the nuance in full.

Using status codes for downtime and migrations

For planned downtime, maintenance, or a migration window, return 503 Service Unavailable — not a broken 200. John Mueller’s guidance is direct: “if something goes drastically wrong with your hoster, and you can’t host your website anymore, please return a ‘503 Service unavailable’ HTTP result code.” His reasoning covers the two anti-patterns to avoid: “returning an error page with ‘200 OK’ will result in us indexing the change of content like that (and if all of your pages return the same error page, then we may assume that these URLs are duplicates). Redirecting to a temporary page will result in that redirect being used for indexing.” The implementation trick when the origin is fully down: point DNS at a temporary server that serves 503s.

Keep it short, though. Gary Illyes: “Serving a 503 status code for an extended period of time will cause a decrease in crawl rate,” but “10-15 minutes every now and then is not ‘extended’ by any means, so you should be fine.” Rule of thumb: 503 is for hours, not weeks — leave it up for weeks and Google starts treating the pages as actually gone. The 503 article covers the migration pattern in depth.

How to check a page’s status code

  • Browser DevTools — open the Network tab, reload, click the document request, read the Status column.
  • Command linecurl -I https://example.com/page for the headers of a single request, or curl -IL https://example.com/page to follow the whole redirect chain.
  • Google Search Console — the URL Inspection tool reports the crawled status.
  • Bing Webmaster Tools — its URL Inspection tool does the same for Bingbot.
  • Crawlers — Screaming Frog SEO Spider and Ahrefs Site Audit crawl the whole site and surface status codes, redirect chains, and 4xx/5xx URLs in bulk; the free Ahrefs SEO Toolbar shows the code for the page you’re on.

One genuine gotcha the competitor guides skip: a single check only tells you about that one request. Status can vary by request method, user agent, authentication, region, and time, plus whatever cache or CDN sits in between — so a clean result from your desk doesn’t guarantee what Googlebot saw. A compact diagnostic workflow:

  • Method — a HEAD request should carry the same headers as GET, but servers are allowed to omit fields that require generating content, so a HEAD check isn’t proof of what a real GET returns. Re-test with GET if the two disagree.
  • User agent — bot-detection, geo-blocks, or cloaking can serve Googlebot a 200 while a browser gets a 403 (or vice versa).
  • Region — if you suspect geo-blocking or a region-specific CDN rule, retest from more than one location or IP.
  • Cache — rule out a stale cached response (browser cache, CDN edge cache) before concluding the origin itself is misbehaving.
  • Chain — record the full redirect chain, not just the final code; a mid-chain hop can be the actual problem.
  • Logs — when a code doesn’t match what you expect, check what Googlebot actually saw. Your server logs are the ground truth a single browser or checker result can’t give you.

A note on Bing

Bing’s public guidance on status codes is thinner than Google’s — there’s no single canonical “how status codes affect crawling” doc as detailed as Google’s, and no Bing rep quote on the topic surfaced when I looked. Directionally it’s the same advice: return accurate codes, fix persistent 4xx/5xx, and use permanent redirects for permanent moves. I’d rather say that plainly than manufacture a Bing quote that doesn’t exist.

Where to go next: the HTTP error codes cluster

This hub is the overview. The HTTP Error Codes sub-hub goes deep on the codes you actually end up troubleshooting, each in its own article:

  • 401 Unauthorized and 403 Forbidden — the access-and-auth codes, and why you shouldn’t use them to throttle crawling.
  • 404 Not Found, 410 Gone, and 404 vs 410 — the “this page is gone” family and which code to reach for.
  • 429 Too Many Requests — rate-limiting, and how it (unlike other 4xx codes) affects crawl rate.
  • 451 Unavailable For Legal Reasons — the legal/regulatory block, distinct from a 403.
  • 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable, and 504 Gateway Timeout — the server-error family, crawl slowdown, and the 503-for-maintenance pattern.
  • Soft 404s — the 200-that’s-really-an-error, and how to fix it.

Each of those is nested under this hub and listed in the sidebar. For how redirects consolidate ranking signals, see Canonicalization; for how crawlers throttle on 5xx/429, see Crawling.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin an expert quote first.