Every time a browser or Googlebot requests a URL, the server answers with a three-digit HTTP status code before sending a single byte of content. That number decides whether the page gets indexed, whether link equity flows through a redirect, whether users see your content or an error — and choosing the wrong one in a migration can quietly erase years of SEO work.
Here are the codes you'll actually meet, what they mean, and why search engines care so much about the difference between near-identical numbers.
HTTP Status Codes Explained: The Five Classes
Every status code belongs to one of five families, identified by its first digit:
| Class | Meaning | Everyday examples |
|---|---|---|
| 1xx | Informational — "keep going" | 100 Continue, 103 Early Hints |
| 2xx | Success — request worked | 200 OK, 204 No Content |
| 3xx | Redirection — content is elsewhere | 301, 302, 304, 307, 308 |
| 4xx | Client error — the request is the problem | 401, 403, 404, 410, 429 |
| 5xx | Server error — the server is the problem | 500, 502, 503 |
You'll rarely think about 1xx. The other four classes come up daily. The full annotated list — every code, meaning and SEO note — lives in the HTTP Status Codes reference; below are the ones worth knowing by heart.
The Codes That Matter Daily
200 OK — the goal
The page exists and was served. For SEO, this is the only status on which a URL can be indexed normally. Everything else is a detour or a dead end.
301 vs 302: The Redirect Decision That Moves Rankings
This pair causes more SEO damage than any other, because both "work" identically in a browser — the user lands on the new URL either way. Search engines, however, read them very differently.
- 301 Moved Permanently — "this content lives at the new URL forever." Google transfers indexing signals and link equity to the target and eventually replaces the old URL in its index. Use it for domain migrations, HTTPS switches, URL restructures, merged pages.
- 302 Found (temporary) — "the content is briefly elsewhere, keep the original URL indexed." Use it for A/B tests, geo-redirects, short-lived campaign swaps, maintenance detours.
The classic mistake: a site migration done with 302s. Google keeps waiting for the old URLs to come back, consolidation stalls, and rankings sag for months. Google has said long-lived 302s are eventually treated as 301s — but "eventually" is not a migration strategy. If the move is permanent, say so with a 301.
307 and 308 are the strict modern twins: 307 Temporary Redirect ≈ 302 and 308 Permanent Redirect ≈ 301, except they forbid the browser from changing the request method (a POST stays a POST). For SEO they carry the same temporary/permanent signals; you'll mostly meet 307 in HSTS redirects to HTTPS.
304 Not Modified — the silent efficiency win
When a client revalidates a cached page (If-Modified-Since / If-None-Match), a 304 says "nothing changed, use your copy" — no body transferred. Googlebot uses this heavily; correct Last-Modified/ETag headers let it verify pages cheaply and spend your crawl budget on content that actually changed.
401, 403 — locked doors
- 401 Unauthorized — authentication required and missing/invalid.
- 403 Forbidden — authenticated or not, you're not allowed.
Pages behind these are dropped from the index. The dangerous case is accidental 403s — an overzealous firewall or bot protection rule blocking Googlebot sitewide. If Search Console coverage suddenly fills with 403s, check your WAF rules before anything else.
404 vs 410: Two Ways to Say "Gone"
- 404 Not Found — "nothing here, and I don't know anything more." Google retries 404 URLs for a while before dropping them, in case the error is transient.
- 410 Gone — "this existed and was removed deliberately, permanently." Google treats 410 as a stronger, faster deindexing signal and typically removes the URL sooner, with fewer recrawls.
Practical rule: if content was intentionally removed and has no replacement, serve a 410. If there's a relevant successor page, 301 to it instead — that preserves the link equity the old URL earned. Random broken links can stay 404; that's what the code is for. Note that 404s on your own site waste crawl budget and user trust, though — sweep for them regularly with the Broken Link Checker.
Beware the soft 404: a missing page that returns 200 OK with a "not found" message, or an empty template. Search engines see a "successful" page with no content, index junk, and flag it in Search Console as Soft 404. Every genuinely missing page must return a real 404 or 410 status — not just look like one.
429 Too Many Requests
Rate limiting. If your CDN or WAF serves 429s to Googlebot, crawling slows to a trickle. Whitelist verified search engine crawlers from aggressive rate limits.
500, 502, 503 — server trouble
- 500 Internal Server Error — the application crashed. Persistent 500s get URLs deindexed.
- 502 Bad Gateway — a proxy (nginx, load balancer, CDN) couldn't reach the backend.
- 503 Service Unavailable — the correct code for planned maintenance.
The 503 deserves special attention because it's the SEO-safe way to take a site down:
HTTP/1.1 503 Service Unavailable
Retry-After: 3600
Content-Type: text/html
<h1>Down for maintenance — back within the hour.</h1>
The Retry-After header tells crawlers when to come back. Google treats a 503 as "temporary, don't touch the index" — for a while. Serve 503s for days on end and pages start dropping out. Never return 200 on a maintenance page (it gets indexed as your content) and never 302 the whole site to a /maintenance page returning 200 (same problem, with extra steps).
How Do You Check a URL's Real Status Code?
The browser lies to you by omission: it follows redirects silently, so the address bar shows the destination, never the journey. A single old URL might hop http → https → www → trailing-slash — four requests where one 301 would do. Each hop adds latency, and while Google follows long chains, equity consolidation gets less reliable with every hop; other crawlers give up sooner.
Ways to see the truth:
# Follow the full redirect chain, show status + location at each hop
curl -sIL -o /dev/null -w '%{http_code} %{url_effective}\n' https://example.com/old-page
# Or inspect a single response without following
curl -sI https://example.com/old-page | head -5
If you'd rather not open a terminal, the HTTP Headers Checker requests any URL and shows the status code, every redirect hop, and the full response headers — Location, Cache-Control, Retry-After, X-Robots-Tag — in a readable view.
What to verify on a real site:
- One hop only. Every legacy URL should reach its final destination in a single 301.
- Consistent canonical form. Pick one of
https://www/https://bare — everything else 301s to it. - Deleted content returns 410 (or 301s to a successor), not a soft 404.
- Error pages return real 4xx/5xx codes, not 200.
A full-site pass with the SEO Audit tool surfaces status-code issues alongside meta tag and indexability problems, and the Broken Link Checker hunts down every internal link pointing at a 404 or a redirect chain.
Look Up Any Status Code Now
HTTP Status Codes is a searchable reference of every code — meaning, typical causes, and SEO impact — with the daily-driver codes one click away. No account required.