LearnHTTP status codes

SEO fundamentals

HTTP status codes and what they mean for SEO

Every response a server sends back carries a three-digit status code — it's how a crawler learns whether a URL is live, moved, missing, or broken, and it drives what happens to that URL in the index.

HTTP status codes group into five families by their first digit — 1xx (informational, rarely seen in SEO work), 2xx (success), 3xx (redirection), 4xx (client error), and 5xx (server error). A crawler reads the code before it reads anything else on the page: a 404 and a soft-404 page that renders "not found" text under a 200 are treated completely differently, even if a human visitor sees near-identical pages.

The seven that matter most

200 OK — page loaded successfully, eligible to be indexed2xx
301 Moved Permanently — passes ranking signals to the new URL, replaces the old one in the index3xx
302 Found — temporary; the old URL should stay indexed, not be replaced3xx
404 Not Found — the URL doesn't exist; removed from the index over time4xx
410 Gone — deliberately removed, and gone for good; a stronger signal than 4044xx
500 Internal Server Error — the server failed; repeated 500s slow a crawler's rate5xx
503 Service Unavailable — temporarily down; the correct code for planned maintenance5xx
3xx and 4xx look similar from a browser tab; they mean opposite things to a crawler.

301 vs. 302 — the distinction crawlers actually act on

A 301 tells a search engine the move is permanent: consolidate ranking signals onto the new URL and drop the old one from the index. A 302 tells it the move is temporary: keep the original URL indexed, because it expects the content to come back. Using a 302 for a permanent move (a common default in web frameworks) leaves the old URL competing for rankings instead of transferring its equity — see redirects for the full comparison and how chains of these compound.

404 vs. 410, and why 503 beats a blank page during maintenance

A 404 and a 410 both mean "not here," but a 410 is a deliberate, permanent removal — search engines tend to drop 410 URLs from the index faster because there's no ambiguity to resolve. During planned maintenance, returning 503 (not a 200 "we'll be back soon" page, and not a silent timeout) is the correct move: it tells crawlers to come back later rather than treating the maintenance page as the site's new permanent content.

Because these codes only matter in aggregate — one stray 404 is a non-issue, a few thousand across a site is a crawl-budget problem (see crawl budget) — the practical work is seeing the whole distribution at once. RacingRoach surfaces every non-2xx response with the internal pages linking to it, so broken links and redirect chains show up as a worklist instead of something you find one broken link at a time.