404 vs 410: which to use for removed pages

·4 min read

In the 404 vs 410 choice, 404 means "not found, maybe for now" and 410 means "gone on purpose, and it's not coming back." For Google Search the difference is close to nothing, because Google treats every 4xx code except 429 the same way and drops the URL from the index either way. Use 410 when you deleted something deliberately and your server makes it easy. Otherwise a correct 404 is fine, and the real mistakes happen elsewhere.

What 410 Gone means

A 410 tells the client the resource existed, was removed on purpose, and is likely to stay removed. RFC 9110, the current HTTP semantics standard, defines it that way and says its main job is web maintenance. It tells whoever holds a link to that URL that the owner wants the link taken down.

A 404 makes no claim about time. The same RFC says a 404 "does not indicate whether this lack of representation is temporary or permanent." It also says 410 is preferred when the server knows the removal is permanent, and 404 should be used when it doesn't know.

404 Not Found 410 Gone
Meaning Nothing here, cause unknown Removed on purpose, likely permanent
Typical source Typos, broken links, deleted pages A rule you wrote for specific URLs
Google indexing Removed from the index Removed from the index
Effect on crawl rate None None
Cacheable by default Yes, heuristically Yes, heuristically

The RFC also says you don't have to mark every removed page as gone, or keep the 410 for any set length of time. It's optional by design.

How Google treats 404 and 410

Google handles 404 and 410 identically. Its documentation on HTTP status codes says all 4xx errors except 429 are treated the same. Google doesn't use the content, removes the URL from the index if it was indexed, and gradually crawls it less often. Newly found 404 URLs aren't processed at all.

Two details in the same document matter in practice. First, 4xx codes other than 429 have no effect on how fast Google crawls the rest of your site, so a pile of 404s won't throttle Googlebot. Second, 429 is the exception. Google reads it as an overloaded server and slows down, the way it does for 5xx errors.

You'll still hear that a 410 gets pages dropped faster. Google's published documentation doesn't say that, so don't plan a cleanup around it. If speed matters, the lever is getting Google to recrawl those URLs, which a status code alone doesn't do.

Google's crawl error troubleshooting page gives the rule that actually decides most cases. If a page moved or has a clear replacement, return a 301. If it was removed with no replacement, return a 404 or 410. Picking between 301 and a 4xx matters far more than picking between 404 and 410. See 301 vs 302 redirects for the redirect side.

When a 410 is worth it

A 410 earns its place when you know the removal is deliberate and you're removing URLs in bulk:

  • Hacked or spam URLs. Injected pages from a compromise should say plainly that they're gone, and a pattern rule covers thousands of them at once.
  • Retired products and expired listings with no close replacement, where you want other sites and tools to stop linking.
  • A pruned section you removed for quality reasons and won't bring back.

Skip it when it costs real work. On most CMS platforms the 404 happens automatically and a 410 needs a plugin or custom rules. That effort buys you nothing in Google, so it's only worth doing if you also care about the signal to other clients.

Never send 410 for something that might come back, such as a sold-out product that gets restocked. And never return 200 with an error message on the page. Google reports that as a soft 404, which is worse than either code. Our soft 404 guide covers how to find those.

How to send a 410 status code

Both servers can send a 410 with one line per URL or pattern.

On Apache, mod_alias's Redirect gone returns 410. Leave out the target URL. For patterns, mod_rewrite's [G] flag does the same.

Redirect gone /old-promo.html

RewriteEngine On
RewriteRule ^discontinued/ - [G]

On Nginx, return 410; works inside a server or location block.

location = /old-promo.html {
    return 410;
}

location ^~ /discontinued/ {
    return 410;
}

Apply the rule, then request one of the URLs and read the status line. Confirm it says 410 and not 200, 301 or a cached 404. Then update your sitemap and internal links so nothing on your own site still points at the removed pages. A 410 tells crawlers the page is gone, but your own links keep sending visitors to it. For what a good error page should contain, read the 404 error guide.

Check what your removed URLs return

Paste your list of removed URLs into the HTTP Status Bulk Checker and it requests each one. For every URL you get the final status code, the first redirect's status and target if there is one, the number of hops and the response time. 4xx and 5xx results are flagged as errors, and you can see in each row whether a URL answered 404 or 410.

A run checks up to 20 URLs, follows at most five redirects per URL and costs 20 credits. It doesn't download page bodies, so it can't spot a soft 404 page that returns 200. If a site's bot protection or rate limit answers instead of the page, the checker reports that URL as not answering rather than guessing its status.

Keep reading