HTTP Status Codes

No Comments
Http status codes

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=3600

And 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 200

Protocol 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:

CodeMeaningHow Google handles itPractitioner notes
200OKContent crawled and eligible for indexingAlso the code behind every soft 404 — a 200 doesn't mean the page is fine
301Permanent redirectSignals consolidate to the target; old URL drops over timeThe default for moves. PageRank passes; "loses 15%" is dead folklore
302Temporary redirectTreated as permanent if left in place long enoughFine for genuinely temporary swaps; lazy when it's really a move
304Not ModifiedGoogle keeps the cached copy, saves crawlGood for crawl efficiency — requires correct ETag/Last-Modified handling
307/308Temporary / permanent (method-preserving)Like 302/301Browser-side 307s often come from HSTS, not your server config
401/403Auth required / forbiddenNot indexed; treated roughly like an error and eventually droppedA CDN or WAF serving Googlebot 403s is a classic invisible ranking killer
404Not foundDropped from index after recrawls; crawling tapers off slowlyNormal in moderation. Not a "penalty," ever
410GoneDropped somewhat faster than 404Use when you mean it: the content is deliberately, permanently gone
429Too many requestsGooglebot backs off crawlingRate-limiting rules that catch Googlebot quietly strangle crawl rate
500/502Server errorRetries; persistent errors slow crawling and can drop URLsSpikes correlate with deploys — check timestamps against releases
503Service unavailableTreated as temporary; Google retries laterThe 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

  1. Spot-check with curl. curl -sIL -A "Googlebot" URL shows the full chain and whether your stack treats Googlebot's user-agent differently — a common WAF misconfiguration.
  2. 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.
  3. 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.
  4. 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.
  5. 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.

Subscribe to our newsletter!

More from our blog