Every URL returns a status code with each request, and Googlebot reads those codes literally. A 200 says index this, a 404 says it is gone, a 301 says it moved, a 503 says come back later. The codes are the protocol, and misusing them produces consequences that are predictable but often unintentional.
Most developers know 200, 301, 404, and 500 by heart. Fewer carry a working model of what a 410 signals beyond a 404, why a 503 is the right code for planned maintenance, or how a soft 404 differs from a real one in Google’s processing. This is a reference map of what each range means and how Google Search treats it. The deeper decision cases (choosing 302 versus 301, distinguishing soft from hard 404s, cleaning redirect chains) each have their own dimension and are named here rather than resolved here.
The 2xx success range #
The 2xx range means the request succeeded. Google passes 200 content into the indexing pipeline, though a successful response never guarantees indexing on its own.
| Code | Meaning | SEO implication |
|---|---|---|
| 200 OK | Standard success | Page is eligible for indexing if other signals allow |
| 201 Created | Resource created (APIs) | Rare for crawlable pages; limited processing |
| 204 No Content | Success with empty body | Nothing to process, so nothing is indexed |
| 206 Partial Content | Range request fulfilled | Video and audio streaming, not regular pages |
The one 2xx pattern that causes trouble is a 200 returned for a page that should be a 404. Those are soft 404s: the URL has no real content, but the server answers with a “not found” page and a 200 status. Google has to crawl and evaluate them before it recognizes the error, which spends crawl budget on pages that should never have been in the queue.
The 3xx redirect range #
The 3xx range tells the client to go elsewhere, and the differences between the codes are meaningful for ranking.
| Code | Meaning | When to use |
|---|---|---|
| 301 Moved Permanently | Permanent redirect | URL changes, domain migrations, consolidation |
| 302 Found | Temporary redirect | A/B tests, geo-targeting, short-term changes |
| 303 See Other | Redirect after POST | Form post/redirect/get pattern |
| 304 Not Modified | Content unchanged | Conditional requests; cache validation |
| 307 Temporary Redirect | Like 302, preserves method | API redirects where the HTTP method matters |
| 308 Permanent Redirect | Like 301, preserves method | Permanent moves for non-GET requests |
For crawling, Google follows redirect hops up to a limit and processes only the final target’s content. It reads 301 and 308 as a strong signal to process the redirect target and to move canonical signals to it. It reads 302 and 307 as a weak signal, and it can keep the original URL as the canonical version. A 303 is handled much like a 302. A 304 tells Google the content has not changed since it last saw it and has no independent indexing effect.
Per RFC 9110, the split between the “temporary” and “permanent” pairs is about method preservation: a 307 keeps the request method intact where a 302 may not, and a 308 does the same for a 301. The common mistake is a 302 standing in for a permanent move, usually because a framework defaults to 302. If a temporary redirect stays in place long enough, Google may eventually treat it as permanent, but the guidance is to use the code that matches intent from the start rather than rely on that.
The 4xx client error range #
The 4xx range means the request was wrong, and Google’s own reference is blunt about it: all 4xx codes except 429 are treated the same way, as a signal that the content does not exist.
| Code | Meaning | SEO implication |
|---|---|---|
| 401 Unauthorized | Authentication required | Not crawlable; treated as absent content |
| 403 Forbidden | Server refuses to serve | Not crawlable; often a misconfiguration |
| 404 Not Found | URL does not exist | Standard "page is gone" signal |
| 410 Gone | Resource permanently removed | Explicit "gone for good" intent |
| 429 Too Many Requests | Rate limited | Handled as a server overload signal |
The 404 versus 410 question gets more attention than the mechanics justify. In Google’s documented handling, both fall into that “content doesn’t exist” bucket and both eventually drop a URL from the index. The practical difference is one of stated intent and, at the margin, timing: a 410 declares the resource permanently gone, and Google has indicated it can fall out of the index a little sooner than a 404, on the order of a couple of days in some cases rather than instantly. For URLs that are definitively removed, such as deleted products or retired promotions, 410 is the honest signal. For URLs that might return, such as a temporary outage or a page under construction, 404 is the safer one, because a 410 tells Google not to bother checking again.
The 429 code is the exception in this range. Google does not read it as a client error at all; it treats a 429 as a sign the server is overloaded and slows its crawl rate in response. That makes 429 an accurate answer to genuine load, but for deliberately shaping crawl behavior, Search Console settings and robots controls are the more predictable levers.
The 5xx server error range #
The 5xx range means the server failed. Google responds to sustained server errors by temporarily slowing its crawl rate, keeping indexed URLs for a while and dropping them if the errors persist.
| Code | Meaning | SEO implication |
|---|---|---|
| 500 Internal Server Error | Generic server failure | Crawl slows; Google retries later |
| 502 Bad Gateway | Upstream server failed | Handled like 500 for crawl purposes |
| 503 Service Unavailable | Temporarily unable to serve | The right code for planned maintenance |
| 504 Gateway Timeout | Upstream timed out | Handled like 500 for crawl purposes |
The one 5xx code with a deliberate use is 503. Paired with a Retry-After header that tells Google when to come back, a 503 says the site is down but returning, so Google eases off during the window and resumes afterward. The mistake to avoid is serving a maintenance page with a 200 status: Google reads that as real page content and can index the maintenance notice in place of the actual page, which tends to hurt rankings until it recrawls. For unplanned outages, 5xx codes are accurate but should be brief, and a CDN that caches a 5xx and serves it for hours can stretch a short outage into a real problem.
Soft 404s, in brief #
A soft 404 is a page that returns 200 but carries “page not found” or “no results” content. Google detects these heuristically and then treats the URL as if it had returned a real 404, but only after spending crawl budget to discover the mismatch. Common sources are empty search-result pages, out-of-stock product pages, and filtered category pages with nothing left to show. The fix is to return a genuine 404 or 410 when the content is truly absent, while still showing users a friendly message. Distinguishing and remediating soft versus hard 404s is its own topic; here it is enough to know the status code underneath should reflect the real situation.
How the codes feed indexing, and how to check them #
Google’s indexing pipeline uses status codes as inputs to several decisions at once. Discovery uses 200 to consider a page and 4xx or 5xx to withhold or remove it. Crawl rate falls under sustained 5xx and 429 responses. Canonical selection follows 301 to the target and can leave 302 pointing back at the original. The codes never act alone: a page can return 200 and still be dropped by a noindex directive, and a page can return 301 to a target that has its own problems. Status codes are part of the picture, not the whole of it.
When a page is not ranking, the codes are an early checkpoint. Request the URL with curl or dev tools to see the status it actually returns, then run URL Inspection in Search Console to see the status Google saw most recently and how the Pages report classifies it (crawled but not indexed, soft 404, redirected, and so on). If server logs are available, the sequence of codes Googlebot has seen over time fills in the rest. The combination usually names the problem: a URL that returns 200 to curl but reads as a soft 404 has a content issue, one returning 302 where 301 was intended explains why signals never transferred, and one flickering between 200 and 503 explains an unstable crawl rate. Between audits, the discipline that watches performance metrics is worth pointing at status codes too, since CDN dashboards, synthetic checks on top pages, and Search Console alerts all surface a 4xx or 5xx spike before it becomes a ranking mystery.
FAQ #
Does a 410 remove a page from Google faster than a 404?
Not dramatically. Google’s documentation treats them the same, as signals that the content is gone, and both eventually deindex. In practice a 410 can drop out slightly sooner because it states the removal is permanent, but the difference is small and not guaranteed. Use 410 when a page is gone for good and 404 when it might come back.
Is it fine to leave a redirect as a 302 if it works?
It works for users, but a 302 is a weak signal for Google and can leave the original URL as the canonical version, so ranking signals may not move to the target. For a permanent move, use 301 (or 308 where the request method must be preserved).
What status code should I use during site maintenance?
A 503 with a Retry-After header. That tells Google the outage is temporary and when to return, so it slows crawling during the window rather than indexing a maintenance page served under a 200.
Does a 200 always mean my page will be indexed?
No. A 200 makes a page eligible, but indexing still depends on content quality, canonical selection, noindex directives, and other signals. A successful status code clears one gate, not all of them.
Pick the code that tells the truth about the page. The URLs whose codes match their real state get evaluated accurately; the ones whose codes lie get evaluated slowly, wrongly, or not at all. Most ranking surprises trace back to one or two URLs returning the wrong code for what they actually are, and once the diagnosis is done, the fix is usually a single line of configuration.