410 Gone: When to Use It Instead of 404
A 410 Gone is an HTTP status code that tells every client a page was removed on purpose and is not coming back. A 404 only says the page was not found. For Google Search the two behave the same, so the 410 earns its place through accuracy and housekeeping, not through a ranking boost.
This post is for site owners, developers and marketers who delete pages: retired products, expired campaigns, old events. It covers what a 410 means, how Google treats it next to a 404, when to choose it, and the exact Apache and nginx rules to serve one. The broader 404 triage is in our 404 errors guide, and the 301 side is in redirects SEO. This page stays on the one decision those two leave open.
On this page
- What does 410 Gone mean?
- How does Google treat a 410 compared with a 404?
- When should you use a 410 instead of a 404?
- Discontinued and out-of-stock products
- How to return a 410 on Apache
- How to return a 410 on nginx
- Mistakes that undo a 410
- Getting 410 Gone and removed pages right
What does 410 Gone mean?
A 410 means the page existed, was removed deliberately, and is likely to stay removed. MDN’s reference for 410 Gone defines it as a client error response indicating that “the target resource is no longer available at the origin server and that this condition is likely to be permanent.”
Three details matter in practice:
- It is a promise. MDN says that if server owners “don’t know whether this condition is temporary or permanent, a 404 status code should be used instead.” A 410 should reflect a decision someone made.
- It is cacheable by default. MDN notes “a 410 response is cacheable by default,” so browsers and proxies may remember it.
- It tells clients to stop asking. Clients “should not repeat requests for resources that return a 410 response,” and site owners “should remove or replace links that return this code.”
That last line is the part owners skip. A 410 is an instruction to clean up the links pointing at it.
How does Google treat a 410 compared with a 404?
Google treats them the same. Its documentation on HTTP status codes and Google crawlers says “all 4xx errors, except 429, are treated the same: Google crawlers inform the next processing system that the content doesn’t exist.” Google also ignores any content returned with a 4xx status, so a handsome 410 page is for people, not for Google.
The diagram below shows what happens after the crawler gets a 4xx response, based on that documentation.
Scroll the diagram sideways to see all of it.
On timing, Google’s page on HTTP status codes says newly encountered 404 pages “aren’t processed” and that crawling of them gradually slows. It gives no deadline for dropping an indexed URL, and it does not say a 410 is faster. Many third-party guides say it is. Treat that as unverified. If you need a page out of results immediately, a 410 is the wrong tool: Google’s Removals tool works quickly but its requests last about six months, so the status code is still what makes the removal stick.
When should you use a 410 instead of a 404?
Use a 410 when you removed the page deliberately, nothing replaces it, and you are confident it will not return. Use a 404 when you are not sure, or when the URL never existed. The table below sorts the common cases.
| Situation | Best response | Why |
|---|---|---|
| Page deleted on purpose, no equivalent | 410 | Signals a permanent, deliberate removal |
| Page replaced by a close equivalent | 301 to that page | Visitors and link value reach the right place |
| Expired promotion or event, will not repeat | 410 | Gone for good, and the page should say so |
| Seasonal page that returns next year | 404 or keep it live | Not permanent, so a 410 would be wrong |
| Mistyped or never-existing URL | 404 | There was never a resource to be gone |
| Product temporarily out of stock | 200, page stays live | The item is expected to return |
| Page exists but is private | 401 or 403, not 410 | Gone means removed, not restricted |
| Page “removed” but still returns 200 with an error message | Fix it: 404 or 410 | A soft 404 confuses crawlers |
Two practical rules sit under that table. First, do not mass-redirect dead URLs to the homepage. Google’s site move guidance warns that redirecting many old URLs to one irrelevant destination “might be treated as a soft 404 error,” as we cover in redirects SEO. Second, if you cannot tell whether a page is coming back, say 404. A wrong 410 is a stronger lie than a wrong 404.
The honest summary for search: switching an existing 404 to a 410 will not change rankings, and you should not spend a sprint on it. Use 410 for new removals where you know the facts, and for batches of retired URLs where a clear rule makes the response easy to write.
Discontinued and out-of-stock products
A discontinued product is the classic 410 case, but only when nothing sensible replaces it. Online stores hit this constantly, and the three situations need three different answers.
Scroll the diagram sideways to see all of it.
Out of stock is not gone. A page for an item that will be back keeps its history and its links, so leave it live and say plainly that it is unavailable. Our e-commerce SEO guide covers product page fundamentals, and product schema is where availability gets expressed in markup.
For a discontinued item with a true successor, a 301 serves shoppers better than a dead end. The “close equivalent” test is the one from redirects SEO: same need, same page type. A discontinued blender redirected to a newer blender passes. The same blender redirected to the store homepage does not.
If no successor exists, serve a 410, and make the page for people useful. Google ignores the body of a 4xx response, but visitors who follow an old link or bookmark still see it. A short message and a link to the category does that job. Then remove or replace internal links, as MDN advises, and drop the URL from the XML sitemap (see XML sitemaps).
How to return a 410 on Apache
On Apache, the G flag on a RewriteRule returns a 410. The Apache documentation for rewrite flags says the flag “forces the server to return a 410 Gone status with the response,” and shows the usual pattern with a dash as the target:
RewriteEngine on
RewriteRule "^oldproduct$" "-" [G,NC]
Apache also notes that G implies L, so the response is returned immediately and no further rules run. Where you place the rule decides how the pattern must be written, so test it on the real URL.
For a plain list of retired URLs without regex, the Redirect directive in mod_alias accepts a gone status. Its documentation says this returns a “Gone” status (410) and that “the URL argument should be omitted”:
Redirect gone "/old-promo/"
Put the rules above any generic rewrite that would catch the same URL, and test with curl -I rather than a browser, since browsers can cache the answer.
How to return a 410 on nginx
On nginx, return 410; inside a location block does it. The rewrite module documentation describes return as stopping processing and returning the given code to the client, and a bare code is valid:
location = /old-promo/ {
return 410;
}
An exact-match location = keeps the rule from catching other URLs. For many retired URLs, a map in the http context keeps the list in one place. The map module documentation shows the syntax: map creates a variable whose value depends on another variable, and without a regex the match is an exact string.
http {
map $uri $is_gone {
default 0;
/old-promo/ 1;
/retired-item/ 1;
}
}
server {
if ($is_gone) {
return 410;
}
}
The if is evaluated per request, and return is permitted inside it. On a managed host, a CDN or a CMS, you may not touch these files. Use whatever rule or plugin the platform offers, then check that the response status really is 410, not a 200 page that says “gone.” Our web development service includes setting this up at the server level so it is tested, not assumed.
Mistakes that undo a 410
A 410 only works if the rest of the site agrees with it. The diagram shows what has to line up, and the list below covers the five mistakes that show up repeatedly.
Scroll the diagram sideways to see all of it.
- A soft 410. The page shows “gone” text but the server returns 200. Google’s HTTP status documentation says Search Console shows a soft 404 when content suggests an error, such as an empty page or an error message. Check the real status code, not the screen.
- Redirecting the 410 URL anyway. A URL cannot be both gone and moved. Pick one.
- Leaving the URL in the sitemap. A sitemap tells Google to look at the page; a 410 tells it there is nothing to see.
- Keeping internal links. MDN says to remove or replace links to a 410 URL. Run a crawl afterward. Our guide to internal linking explains why stale links also hide pages you want found.
- Blocking the URL in robots.txt. A crawler that is not allowed to fetch the URL cannot see the 410 you serve.
Volume matters less than people fear. Each dead URL is still a request, but Google says crawling of newly encountered 404 pages gradually slows, and a 410 falls under the same 4xx handling, so a few hundred removals are no emergency. The wider picture is in crawl budget, and the audit-level view is in technical SEO issues.
If you meet a 410 you did not intend, as a visitor or owner, the fix is the opposite of the above. Check whether the page was removed on purpose. If not, restore it or delete the rule that serves the 410, then test with curl -I. Because 410 is cacheable, a browser or proxy may keep showing the old answer for a while.
Getting 410 Gone and removed pages right
Decide what each removed URL is before you pick a code: moved (301), gone for good (410), unknown (404), or coming back (200). Then make sure the rest of the site agrees: internal links updated, sitemap clean, and the server really returning the status you chose. Google will treat the 404 and the 410 the same, so the work is in the accuracy.
If you are deleting a batch of pages, do it from a list, apply one rule per group, and re-crawl afterward. That is also how we handle removals when we rebuild sites, as part of the web development service: a mapped list of what moves, what dies, and what stays, tested before launch.
Frequently asked questions
What does the 410 HTTP status code mean?
A 410 Gone response means the requested resource is no longer available at the origin server and that this condition is likely to be permanent. It is a client error in the 4xx family. It tells browsers, crawlers and other software that the URL was removed on purpose and has no forwarding address.
What is the difference between an HTTP 410 error and a 404 error?
A 404 says the server cannot find the resource and says nothing about whether it will return. A 410 says the resource existed, is gone, and is likely to stay gone. For Google Search the practical result is the same, because Google handles all 4xx errors except 429 identically.
Does Google drop a 410 page faster than a 404?
Google's documentation does not say so. It states that all 4xx errors except 429 are treated the same: the content is reported as not existing, and URLs already indexed are removed from the index over time. Some third-party guides claim 410 is faster, but Google publishes no timing difference.
How do I fix a 410 Gone error?
First decide whether the page should be gone. If it should exist, restore it or remove the server rule returning the 410. If it should not, replace internal links to it, and if a close equivalent exists, switch the response to a 301 redirect to that page.
Should a discontinued product return a 410?
Only if it is discontinued for good and has no suitable successor. If a close replacement exists, a 301 to it is better for shoppers. If the product is only out of stock, keep the page live with a 200, because the item is expected to return.
Can I turn a 410 back into a live page later?
Yes. Remove the 410 rule and serve the page with a 200. A 410 is a promise that the page is gone, so reversing it should be rare. MDN says clients should not repeat requests for a 410 URL and that the response is cacheable by default, so some clients may keep the old answer for a while.