
HTTP status codes are the three-digit responses a server returns with every request, telling clients — including Googlebot — whether a URL delivered content, moved, or failed. Get them wrong at scale and you burn crawl budget on error pages, leak link equity through sloppy redirects, and keep dead URLs in the index for months.
Reading status codes the way a crawler does
Your browser hides most of this. It follows redirects silently, serves cached responses, and renders custom error pages that look fine. The honest tool is curl -I (or -sIL to follow the chain). A healthy page:
$ curl -sI https://example.com/pricing/ | head -3
HTTP/2 200
content-type: text/html; charset=UTF-8
cache-control: max-age=3600And here's the kind of thing curl exposes that a browser never will — a redirect chain wasting two hops before reaching content:
$ curl -sIL http://example.com/old-page | grep -E "HTTP|location"
HTTP/1.1 301 Moved Permanently
location: https://example.com/old-page
HTTP/2 301
location: https://example.com/old-page/
HTTP/2 200Protocol hop, then trailing-slash hop, then content. Every internal link pointing at the first URL forces crawlers through three requests for one page. Multiply by 50,000 URLs and you understand why log files matter. Same-URL loops are their own failure mode — covered in the check on URLs that redirect back to themselves.
The codes SEOs actually meet
Forget memorizing all ~60 registered codes. These are the ones that show up in crawls and logs, and what Google does with each:
| Code | Meaning | How Google handles it | Practitioner notes |
|---|---|---|---|
| 200 | OK | Content crawled and eligible for indexing | Also the code behind every soft 404 — a 200 doesn't mean the page is fine |
| 301 | Permanent redirect | Signals consolidate to the target; old URL drops over time | The default for moves. PageRank passes; "loses 15%" is dead folklore |
| 302 | Temporary redirect | Treated as permanent if left in place long enough | Fine for genuinely temporary swaps; lazy when it's really a move |
| 304 | Not Modified | Google keeps the cached copy, saves crawl | Good for crawl efficiency — requires correct ETag/Last-Modified handling |
| 307/308 | Temporary / permanent (method-preserving) | Like 302/301 | Browser-side 307s often come from HSTS, not your server config |
| 401/403 | Auth required / forbidden | Not indexed; treated roughly like an error and eventually dropped | A CDN or WAF serving Googlebot 403s is a classic invisible ranking killer |
| 404 | Not found | Dropped from index after recrawls; crawling tapers off slowly | Normal in moderation. Not a "penalty," ever |
| 410 | Gone | Dropped somewhat faster than 404 | Use when you mean it: the content is deliberately, permanently gone |
| 429 | Too many requests | Googlebot backs off crawling | Rate-limiting rules that catch Googlebot quietly strangle crawl rate |
| 500/502 | Server error | Retries; persistent errors slow crawling and can drop URLs | Spikes correlate with deploys — check timestamps against releases |
| 503 | Service unavailable | Treated as temporary; Google retries later | The correct code for maintenance windows, ideally with Retry-After |
For per-code depth and edge cases, the complete HTTP status codes reference covers the full range.
How to check it on your own site
- Spot-check with curl.
curl -sIL -A "Googlebot" URLshows the full chain and whether your stack treats Googlebot's user-agent differently — a common WAF misconfiguration. - Crawl with Screaming Frog and work the Response Codes tab: 3xx internal links, 4xx internal links, chains and loops under Reports → Redirects. Fix internal links to point at final 200 URLs.
- Open GSC → Settings → Crawl Stats → By response. This is Google's own accounting of what your server returned. A 4xx/5xx share creeping past a few percent deserves investigation.
- Check GSC Page Indexing for "Not found (404)", "Soft 404", and "Server error (5xx)" buckets — these tell you which specific URLs Google is hitting and failing on.
- Audit your sitemaps against reality. Sitemaps should contain only 200-status, indexable URLs; anything else wastes trust and crawl. The check on 4xx URLs in XML sitemaps walks through it.
Common audit mistakes
- Testing in a browser. Chrome caches 301s aggressively and follows chains invisibly. You'll report "it redirects fine" while the server actually serves a chain or an intermittent 500. Fix: curl or a crawler, always.
- Missing soft 404s. "Sorry, nothing found" pages returning 200 pollute the index and dilute crawl. Fix: make empty states return a real 404/410, and reconcile GSC's Soft 404 report monthly.
- Redirecting everything deleted to the homepage. Google treats irrelevant blanket redirects as soft 404s, so you get the ugly report line anyway, plus confused users. Fix: redirect to the closest relevant page or serve an honest 404.
- Using 500-range codes for maintenance. A hard 500 during a long window tells Google the site is broken; a 503 with Retry-After says "come back later." Fix: configure maintenance mode properly before the migration weekend, not during it.
- Only checking desktop responses. Bot-specific and mobile-specific server rules mean Googlebot can receive different codes than you do. Fix: test with Googlebot user-agent strings and validate against Crawl Stats.
FAQ
Do 404 errors hurt my rankings?
Not directly — 404s are how the web is supposed to work for removed content. The damage is indirect: internal links pointing at 404s waste crawl and dead-end link equity, and 404ing a page that had rankings and backlinks throws that value away when a 301 to a relevant successor would keep it.
301 or 302 — does it still matter?
Less than it used to; Google eventually treats a long-lived 302 as permanent. It still matters for speed of consolidation and for intent clarity. If the move is permanent, say so with a 301 and stop making Google guess.
When should I use 410 instead of 404?
When you want to communicate deliberate removal — discontinued products, purged thin content, expired listings. Google tends to drop 410s a bit faster. For a handful of URLs the difference is cosmetic; across tens of thousands it's a cleanup-speed lever. More scenarios in the redirects and status codes FAQ.
How many redirect hops will Google follow?
Up to 10 hops per chain before giving up, but crawl efficiency degrades with every hop. Practical rule: internal links point at final URLs, chains get collapsed to a single hop during any migration cleanup.
What's a soft 404?
A page that returns 200 but effectively says "not found" — empty search results, zero-item categories, "product no longer available" templates. Google classifies these itself and excludes them from the index. You fix them by returning the honest code, or by making the page genuinely useful.
Claude Vincent is a technical SEO consultant focused on crawlability, rendering, and AI-search visibility. He writes the field guides and case studies at SEO ProCheck, with a bias toward the durable, unglamorous work that decides whether search engines and AI answer engines can actually read and cite a site.
About SEO ProCheck
Technical SEO consulting and GEO strategy with 20 years of enterprise experience. Case studies, resources, and tools for search and AI visibility.
Work With Me
Technical SEO audits, GEO strategy, site migrations, and international SEO. Hourly consulting for teams who need hands-on support, not just reports.







