Audit my site
Technical SEOIntermediateChecked against Google docs · Oct 2026

HTTP status codes for SEO: soft 404, 404 vs 410 and server errors

The status code is the first thing Googlebot reads, before any content. It decides whether a page is indexed, followed, dropped or crawled more slowly, so it has to tell the truth about the page.

Author: Eugene Serbin, Head of SEO at Semalt Updated: 30 October 2026 Reading time: 22 min Visuals: 4

In short

Every response your server sends Googlebot starts with a status code, and the first digit decides what Google does next: 2xx goes on to indexing, 3xx is followed, 4xx is dropped and 429 or 5xx makes Google crawl more slowly. A page that says “not found” but returns 200 is a soft 404, and Google leaves it out of search anyway. Most status code problems come down to one fix: make the code tell the truth about the page.

What a status code tells Googlebot

When Googlebot requests https://example.com/shoes/, the server answers with a three-digit HTTP status code before it sends any content. Browsers mostly ignore it. Googlebot does not: the code decides whether the content is used, whether a redirect is followed, whether the URL stays in the index and how fast Google crawls the rest of your site.

The first digit is the class, and the class matters more than the exact number. Several codes in a class lead to the same result for Google. Search Console only reports problems with some of them: “Search Console generates error messages for status codes in the 4xx—5xx range, and for failed redirections (3xx).”

Map · Status code classes and what Googlebot does
What Googlebot does with each class of status code 2xx: content is passed to indexing, indexing is possible but not guaranteed, error-like pages become soft 404. 3xx: Google follows up to 10 redirect hops and processes the target; 301 and 308 are strong signals, 302 and 307 weak. 4xx: content is ignored, no effect on crawl rate except 429, URLs are not indexed and indexed ones are removed. 429, 5xx and network errors: crawling slows down; indexed URLs are kept at first and dropped if errors persist. ResponseWhat Googlebot doesWhat happens in the index 2xx success 3xx redirect 4xx client 429 · 5xx 200 201 204 301 302 308 404 410 403 503 · DNS Passes the content on to indexing Follows the redirect, up to 10 hops Ignores the content Slows down crawling for the site Can be indexed The target is processed Not indexed Kept at first Error message or empty page: soft 404 Content of the final target is used No effect on crawl rate (except 429) Network and DNS errors count the same but not guaranteed 301/308 strong, 302/307 weak indexed URLs are removed dropped if errors persist
Four classes, four behaviours. The exact code inside a class rarely changes the outcome for Google.

What Google officially says

“For Google Search, an HTTP 2xx (success) status code doesn't guarantee indexing.”

Google Search Central — How HTTP status codes affect Google's crawlers

“All 4xx errors, except 429, are treated the same”

Google Search Central — How HTTP status codes affect Google's crawlers. Google adds: “Newly encountered 404 pages aren't processed.”

“5xx and 429 server errors prompt Google's crawlers to temporarily slow down with crawling.”

Google Search Central — How HTTP status codes affect Google's crawlers

A few more direct quotes from the same documentation set that shape everything below:

2xx: success (200, 201/202, 204)

200 OK

This is the code every live page should return. Google passes the content to the indexing pipeline, but “The indexing systems may index the content, but that's not guaranteed.” A 200 only gets the page considered. Whether it is indexed depends on the content, duplicates and other signals.

There is one trap. Google looks at what the page says, not only at the code: “If the content suggests an error for Google Search, an empty page or an error message, Search Console will show a soft 404 error.” A 200 on a Product not found page does not keep that page in search. It just makes the problem harder to see.

201 Created and 202 Accepted

These rarely appear on normal pages. For both, “Google waits for the content for a limited time, then passes on whatever it received to the next processing step (which is product specific).” If your pages return them, something in your application or CDN is misconfigured. Pages should return 200.

204 No Content

“Google wasn't able to receive any content and therefore can't process it.” A 204 is fine for an API endpoint or a tracking pixel. It is wrong for any URL you want in search.

3xx: redirects and 304

For every redirect, “Any content Google receives from the redirecting URL is ignored, and the final target URL's content is processed instead.” What changes between codes is how strongly Google treats the target as the new main URL.

301 and 308: permanent

For a 301, “Google follows the redirect, and Google systems use the redirect as a strong signal that the redirect target should be processed.” A 308 is listed as “Equivalent to 301.” Use one of them for every permanent move: a new URL structure, http to https, a merged page. The difference between them is for other clients: a 308 tells the client to repeat the same HTTP method (for example POST), while a 301 does not promise that.

302 and 307: temporary

For a 302, Google's crawlers follow it but “Google systems use the redirect as a weak signal that the redirect target should be processed.” A 307 is “Equivalent to 302.” Use them only when the move really is temporary, such as a short campaign or a page under repair. A temporary redirect left in place for months sends a mixed message about which URL should be shown in search.

303 See Other

A 303 is typically used after a form submission to send the browser to a result page. Google follows it like other redirects; it has no special use for SEO.

304 Not Modified

A 304 is not a redirect. It is the answer to a conditional request (If-Modified-Since or If-None-Match) and means the resource has not changed. Then “Google crawlers signal the next processing system that the content is the same as last time it was crawled.” Supporting 304 saves your server work on pages that rarely change, which matters most on large sites.

Hop limit and redirect errors

“By default, Google's crawlers follow up to 10 redirect hops.” Do not treat 10 as a target: Google also says to “Avoid long redirect chains, which have a negative effect on crawling.” Point every old URL straight at its final destination. In Search Console, a failed redirect is reported as Redirect error: a chain that was too long, a loop, a URL that grew past the maximum length, or a bad or empty URL in the chain.

Pick the code that matches the meaning even when Google treats two codes alike: “Use the status code that's appropriate for the redirect so other clients (for example, e-readers, other search engines) may benefit from it.”

4xx: client errors

The rule for the whole class is short: “In the case of Google Search, Google doesn't index URLs that return a 4xx status code, and URLs that are already indexed and return a 4xx status code are removed from the index.” The content of a 4xx response is ignored, so the text of your error page plays no role in search.

404 Not Found and 410 Gone

These are the normal answers for a page that does not exist. A 404 is not a sign of a bad site. The Page indexing help says: “404 responses are not necessarily a problem, if the page has been removed without any replacement.”

Do not expect Google to forget a 404 URL right away. Google “will crawl it less and less often”, and states that “there is no way to tell Googlebot to permanently forget a URL”. Old URLs found in links or old sitemaps can keep appearing in your logs long after you removed them. That is normal and costs very little: “Google won't forget a URL that it knows about, but a 404 status code is a strong signal not to crawl that URL again.”

401 Unauthorized and 403 Forbidden

A 401 asks for a login. A 403 refuses access. Both keep the page out of the index. Google points out a common misuse of 403: “Googlebot never provides credentials, so your server is returning this error incorrectly.” If you see public pages under 403 in Search Console, look at your firewall, WAF, bot protection or CDN rules, which often block Googlebot by mistake.

Both codes are also sometimes used to slow Google down. That does not work: “Don't use 401 and 403 status codes for limiting the crawl rate.” and “The 4xx status codes, except 429, have no effect on crawl rate.”

400 and other 4xx codes

A 400 Bad Request, 405, 411 and other client errors are treated like 404. In Search Console they appear as URL blocked due to other 4xx issue. On a page that should be indexed they usually mean the server rejects something in Googlebot's request, such as a header or a URL parameter.

404 vs 410: which one to use

For Google the answer is simple: both lead to the same result, because all 4xx codes except 429 are treated the same. Google's own guidance for removed pages lists them side by side: “If you removed the page and there's no replacement page on your site with similar content, return a 404 (not found) or 410 (gone) response (status) code for the page.” The real decision is not 404 or 410. It is error code or redirect.

301

The page moved, or there is a clear replacement: the same product under a new URL, a merged article, the successor model.

410

You removed the page on purpose and it is not coming back. It states that intent for people and other tools that read it. Google handles it like a 404.

404

The URL never existed, was mistyped, or was removed without a replacement. The default for anything unknown.

200

The page still has a purpose, for example a product that is only temporarily out of stock. Keep it live.

What you should not do is send every removed URL to the home page. A redirect to an unrelated page does not help users, and in practice Google often reports such redirects as soft 404s. Redirect only when the target genuinely replaces the old page. Otherwise return a 404 or 410.

429 and 5xx: when the server cannot cope

429 Too Many Requests

A 429 is the one 4xx code that behaves like a server error. Google reads it as “a signal that the server is overloaded” and slows down. That makes it useful for a short, controlled slowdown. It becomes a problem when a CDN, WAF or rate limiter returns 429 to Googlebot all the time. Then Google crawls less and less of the site, and pages that keep returning 429 can drop out of the index like pages with a 5xx.

500, 502 and 503

Server errors have two effects. The first is on crawling: for a 500, “Google decreases the crawl rate for the site. The decrease in crawl rate is proportionate to the number of individual URLs that are returning a server error.” So a broken template that fails on thousands of URLs slows crawling of the whole site, not just those URLs. When the errors stop, “Once the server starts responding with a 2xx status code, Google gradually increases the crawl rate for the site.”

The second is on the index: “For Google Search, already indexed URLs are preserved in the index, but eventually dropped.” A short outage does little harm. A page that keeps failing for days is at risk: “if Googlebot observes these status codes on the same URL for multiple days, the URL may be dropped from Google's index.”

DNS and network errors

Timeouts, reset connections and DNS failures happen before there is any status code at all. Google treats them like 5xx errors and reacts faster: “already indexed URLs that are unreachable will be removed from Google's index within days.” The usual causes are mundane. “DNS errors are most commonly caused by misconfiguration, but they may be also caused by a firewall rule that's blocking Google DNS queries.” Check your A and CNAME records, your name servers and any firewall rules that might block Google's IP ranges.

When robots.txt returns 5xx

A server error on /robots.txt affects the whole site, not one URL. “For the first 12 hours, Google stops crawling the site but keeps trying to fetch the robots.txt file.” After that, “for the next 30 days Google will use the last good version”. Make sure robots.txt is served as a simple static file that keeps working when the rest of the application is down.

Soft 404: what it is and how to fix it

A soft 404 is a mismatch between code and content. The server says 200, but the page says, or looks like, not found. Google adds: “In some cases, it might be a page with no main content or empty page.” The consequence is clear: “Such pages are excluded from Search.” And they still cost you crawling: “soft 404 pages will continue to be crawled, and waste your budget.”

Google lists these technical causes:

In practice you will also meet these: a CMS that shows This product is no longer available with 200; empty category and tag pages; removed pages redirected to the home page or to a generic category; thin pages with almost no main content; and single-page apps whose router shows a “not found” view while the server answers 200 for every path.

Decision tree · A URL is flagged as Soft 404
How to fix a soft 404 If the content is gone with no replacement, return 404 or 410 with a useful custom error page. If it moved or has a clear replacement, use a 301 redirect to the equivalent page. If the page has no real main content, such as an empty category, add content or return 404 or 410. If it has real content, fix how it renders for Googlebot: blocked resources, failed JavaScript or error text, then validate the fix. YesYesNo NoNoYes Is the content gone, with noreplacement on your site? Has it moved, or is there aclear replacement? Does the page have realmain content? Return 404 or 410301 redirectAdd content, or 404/410 with a useful custom error pageto the equivalent pagee.g. empty category, no results Fix how it renders for Googlebot blocked resources, failed JS, error text
Start with what the page should be, then make the status code and the content agree with that.

Google describes the same three branches:

  1. The page and content are no longer available. Return 404 or 410. Google's reason: “These status codes indicate to search engines that the page doesn't exist and you don't want search engines to index the page.”
  2. The page or content is now somewhere else. “If your page has moved or has a clear replacement on your site, return a 301 (permanent redirect) to redirect the user.”
  3. The page and content still exist. Then Google probably saw a broken version: “If an otherwise good page was flagged with a soft 404 error, it's likely it didn't load properly for Googlebot, it was missing critical resources, or it displayed a prominent error message during rendering.” Run the live test in URL Inspection, open View tested page, and check the screenshot and rendered HTML. Look for CSS or JavaScript blocked in robots.txt, API calls that fail for Googlebot, and error banners such as Something went wrong.

Soft 404 in single-page apps

When routing happens in the browser, the server often cannot return a real 404. Google offers two ways out: “Use a JavaScript redirect to a URL for which the server responds with a 404 HTTP status code (for example /not-found).” or “Add a <meta name="robots" content="noindex"> to error pages using JavaScript.” If you render on the server, the better fix is to have the server return 404 for unknown routes in the first place.

Custom 404 pages, empty categories and out-of-stock products

A good custom 404 page

“Custom 404 pages are created solely for users.” So design them for people: say clearly that the page was not found, keep your normal header and navigation, link to the home page, popular sections and search, and give people a way to report a broken link. Then check the one thing that matters for Google: the page must be served with a 404 status, not a 200 and not a redirect to /404.html that returns 200.

Empty categories

A category with no products and no text is exactly the “page with no main content” Google flags as a soft 404. Decide by what happens next:

Out-of-stock products

Google's guidance for temporarily unavailable products is to keep the page: “It's better to still allow that page, and mark it out of stock.” Keep the 200, show the availability clearly, set the availability value in your Product structured data to out of stock, and offer alternatives. For a product discontinued for good, 301 to its direct successor if there is one; if not, return 404 or 410.

✓ Keeps the URL working for search

  • Temporarily out of stock: 200, marked out of stock
  • Discontinued with a successor: 301 to the successor
  • Custom error page served with 404
  • Seasonal category with text and links: 200

✕ Creates soft 404s or loses pages

  • “Product not found” text with 200
  • Every removed product redirected to the home page
  • Empty category with no content at 200
  • Temporarily unavailable product removed with a 404

Maintenance mode: 503 and Retry-After

For a short planned outage, return 503 Service Unavailable on every page instead of the content. Google's guidance: “If you need to urgently disable the site for 1-2 days, then return an informational error page with a 503 HTTP response status code instead of all content.” You can add a Retry-After header with a delay in seconds or a date:

HTTP/1.1 503 Service Unavailable
Retry-After: 120

# or an absolute date and time in UTC
Retry-After: Wed, 21 Oct 2026 07:28:00 GMT

The same rules apply in reverse for longer closures. A 503 left for many days puts URLs at risk, so for a long closure Google recommends something else: “If you need to disable the site for a longer time, then provide an indexable home page as a placeholder for users to find in Search by using the 200 HTTP status code.” Also keep in mind that during a 503 “it's not possible for Google's systems to refresh titles, descriptions, metadata, or structured data”.

How to check status codes

Do not trust what the browser shows: an error page and a working page look the same in the address bar. Check the status line itself. The quickest tool is curl -I, which prints only the response headers. Google uses the same approach to confirm a 503: curl -I -X GET "https://www.example.com/".

Code · Annotated curl -I output (illustrative)
# 1. A redirect: -I shows headers only, -L follows every hop
$ curl -IL https://example.com/old-shoes
HTTP/2 301                                ← status line: permanent redirect
location: https://example.com/shoes/      ← where it points

HTTP/2 200                                ← final target works: one hop, good
content-type: text/html; charset=UTF-8
cache-control: max-age=3600              ← caching rules for this response
last-modified: Tue, 27 Oct 2026 09:00:00 GMT ← lets a crawler ask for a 304

# 2. Maintenance: force a GET, since some servers answer HEAD differently
$ curl -I -X GET https://example.com/
HTTP/1.1 503 Service Unavailable          ← temporary: Google slows down and retries
retry-after: 3600                         ← suggested retry in seconds

# 3. Only the code, handy in scripts
$ curl -s -o /dev/null -w "%{http_code}\n" https://example.com/missing-page
404
Read the first line of each block: it is the status code Googlebot sees, whatever the page looks like in a browser.

Other ways to check:

Search Console statuses and what to do

The Page indexing report groups non-indexed URLs by reason. These are the ones caused by status codes. The “meaning” column quotes the help page; the fix is practice.

Table · Page indexing statuses: meaning and fix
StatusWhat Google says it meansWhat to do
Server error (5xx)“Your server returned a 500-level error when the page was requested.”Check server logs at the crawl time, fix the failing template or upstream service, add capacity if errors appear under load.
Redirect errorA chain that was too long, a loop, a URL past the maximum length, or a bad or empty URL in the chain.Trace the chain with curl -IL and point the first URL straight at the final one.
Soft 404“This means that it returns a user-friendly "not found" message but not a 404 HTTP response code.”Follow the decision tree above: 404/410, 301, more content, or a rendering fix.
Blocked due to unauthorized request (401)“The page was blocked to Googlebot by a request for authorization (401 response).”Expected for private pages. For public pages, remove the login requirement or the password on that section.
Not found (404)“404 responses are not necessarily a problem, if the page has been removed without any replacement.”Ignore real removals. Fix internal links and sitemap entries to 404s; 301 URLs that moved.
Blocked due to access forbidden (403)“Googlebot never provides credentials, so your server is returning this error incorrectly.”Check firewall, WAF, bot protection and CDN rules for blocks on Googlebot.
URL blocked due to other 4xx issue“The server encountered a 4xx error not covered by any other issue type described here.”Find the exact code with URL Inspection or curl; often a 400 or 429 from a rate limiter.
Page with redirect“This is a non-canonical URL that redirects to another page.”Usually nothing. Make sure the target is the page you want and remove the old URL from links and sitemaps.
Not every status here is a problem: a 404 for a removed page and a redirect for a moved page are the system working as intended.

Two details help when reading the report. It shows recent 404s only: “the Page indexing report shows only URLs that have shown 404 errors in the past month.” And a URL may still be listed after you fixed it, because the report reflects the last crawl. Confirm the fix with the URL Inspection live test, then use Validate fix on the issue so Google rechecks the group.

Check the status codes on your site

OurSEO Tools crawls up to 1,000 pages and records the status code, canonical, indexability and load time of every URL, so you can find 404s, redirects and server errors in one run.

69-point checklistTechnical crawlContent analysis

Common mistakes

FAQ

Does a 200 status code mean the page will be indexed?

No. Google says “For Google Search, an HTTP 2xx (success) status code doesn't guarantee indexing.” A 200 only means the content will be considered. Quality, duplicates and other signals decide the rest.

Is 410 removed from the index faster than 404?

Do not count on it. Google says all 4xx codes except 429 are treated the same, and lists 404 and 410 together for removed pages. Use 410 if you want to state that the removal is deliberate; either code works.

Do many 404 errors hurt my rankings?

404s for pages you really removed are normal: “404 responses are not necessarily a problem, if the page has been removed without any replacement.” Fix the ones that matter: internal links to 404s, important pages returning 404 by mistake, and moved pages that should redirect.

How long can my site return 503 during maintenance?

Google's guidance is 1–2 days for an urgent shutdown. For longer, keep an indexable home page at 200 that explains the situation. Never return 503 for robots.txt.

Why is a page flagged as Soft 404 when it has content?

Usually because Google saw a broken version: resources blocked by robots.txt, a failed script or API call, or an error message during rendering. Check the screenshot in the URL Inspection live test.

Should I return 429 to control Googlebot?

Only as a short emergency measure. Google treats 429 like a server error and slows down, but returning it for days risks URLs being dropped. If crawling overloads your server, find the cause, such as endless filter URLs, and fix it.

Sources

Quotes checked against the official pages on 30 October 2026.