Reference guide · http-status · Published 2026-08-15 · 4 min read
HTTP 410 gone and permanent removal
HTTP 410 gone explained: the permanent removal signal, why it beats 404 for dead content, and how to return 410 for deleted pages on Apache, nginx and WordPress.
- ·What 410 means
- ·410 vs 404
- ·How to return 410
What a 410 means
A 410 Gone is a permanent, deliberately chosen variant of 404. The server states "I used to have this URL and it will never come back", which in practice tells crawlers and clients that a later return is unlikely. It saves the crawler from keeping a soft-return, drops the URL from the crawl queue, and keeps humans from a dead "not found" that looks like an oversight.
The difference is intent. A 404 means "no resource here", which is also said for a typo, a build gap, or a page you may never have had. A 410 means "this exact resource existed and is finished", and it is the accurate signal for a defunct product, a removed offer, or a page you merged and killed.
410 versus 404 in one view
| Question | 404 Not Found | 410 Gone |
|---|---|---|
| Resource existed once? | Maybe, unknown | Yes, and it is gone |
| Likelihood of return | Unknown | None, permanent |
| What the crawler learns | Nothing special | Drop this URL, do not expect a return |
| Effect on users | Generic dead page | Clear: the content is ended (if you add copy) |
| Example | Typo URL, removed page you keep quiet about | Retired product page, killed offer page |
Both are absolute results: no redirect, no equity to give to a new URL. When the next best page is the new home of that content, 301 is the better answer than 410, since it hands value to a live page.
When to use a 410
- A product, service, or offer ended and there is no true replacement page worth inheriting.
- You finally killed duplicate, thin, or obsolete pages after a site merge.
- The page was published for a short campaign and now holds no linking value.
- A page can never be resurrected in a useful form (a price deck, a past class).
Choose 410 over 404 when you want the crawler to be forced: you are telling the index to drop the page, and want the signal to hold.
When NOT to use a 410
- If you intend to rebuild the page later, return 404 or a temporary status, not a permanent 410.
- If the content moved, 301 is the correct answer.
- If the page was a typo or a peak that should never have been indexed, a 404 or an explicit noindex is enough; 410 for every stray URL adds operational noise.
How to return a 410
# Apache: by path
Redirect 410 /old-page/
# nginx
location = /old-page/ {
return 410;
}
In WordPress, a 410.php template, or a redirect plugin that supports custom status codes, issues 410 for the slug list. On Cloudflare, a Worker or a Bulk Redirect before the origin serves 410 for a rule set.
Verify the status
curl -I https://example.com/killed-page/
HTTP/2 410
Check the response in the browser DevTools network tab too: a WordPress theme can override status and return 200 with the "not found" text, a soft 410 that defeats the purpose.
Operational order
- List the slugs and confirm none has an essential backlink profile worth redirecting.
- Confirm the best next action per slug: either 301 to the new home (if it exists) or 410 (if it does not).
- Add the rules per the server type and verify with
curl. - After a week, pull the crawl of the old URLs from Search Console or your log and confirm the Gone status is what the crawler saw.
Prevention
- Keep a "redirect-able" sheet alongside the kill list, so the default is not "every dead page becomes 410".
- When a commercial page dies, ask two questions first: does the new page exist and does the old page still have equity? If either answers yes, use a 301.