HTTP 404 vs 410 — Not Found vs Gone Status Code Comparison
http 404 vs 410: Not Found means the resource may exist later, while Gone signals permanent deletion. Learn how Google indexing, CDN caching, and SEO are affected.
Quick Cheat Sheet
| Aspect | 404 Not Found | 410 Gone |
|---|---|---|
| Permanence | Unknown / temporary | Intentional, permanent |
| SEO signal | "Try again later, maybe" | "Deindex this URL" |
| Cacheability (default) | Not cacheable by default | Cacheable by default |
| Common use | Generic missing resource | Sunset endpoints, deleted users |
The Semantic Difference
404 Not Found is the catch-all "no resource at this URI" response. The server isn't promising the resource never existed — it might exist tomorrow, it might be a typo, it might have moved without a redirect.
410 Gone is a stronger statement: the resource did exist and has been intentionally and permanently removed, with no forwarding address. Per RFC 9110 § 15.5.11, 410 is "primarily intended to assist the task of web maintenance by notifying the recipient that the resource is intentionally unavailable."
SEO and Crawler Behavior
This is where the difference really matters in production:
- Google treats 404 and 410 similarly for indexing, but it deindexes 410 URLs slightly faster — typically within days vs. weeks.
- Bing has historically been more aggressive about respecting 410.
- For deleted user profiles or sunset blog posts you want gone from search, 410 is the correct signal.
Caching Behavior
By default, 410 is cacheable (RFC 9110 § 15.5.11), while 404 is not. This means a 410 response can be cached by CDNs and browsers without explicit Cache-Control headers, reducing origin load on permanently dead URLs.
When to Use 410 in Practice
- A user permanently deletes their account →
/users/{id}should return 410, not 404 - You sunset an API version →
/v1/*returns 410 with aDeprecationheader pointing to v2 - A blog post or product page is permanently removed (not moved) → 410
For temporary outages, neither code is correct — use 503 Service Unavailable instead.
Why Most Apps Just Use 404
Tracking which URLs were "intentionally" deleted vs. "never existed" requires a tombstone table, which most apps don't bother with. That's fine — 404 is an acceptable default. Reach for 410 only when you have a clear maintenance/SEO reason.
Real-World Use Case
A SaaS app that lets users delete their public profile should hard-delete the database row and ensure /u/{username} returns 410 Gone (with a tombstone record). This tells Google to drop the URL from the index quickly and lets your CDN cache the gone-state, vs. a 404 that crawlers will retry for weeks.
Look Up Any Status Code
Related Comparisons
HTTP 401 vs 403 — Unauthorized vs Forbidden Status Code Comparison
Confused about http 401 vs 403? Learn the exact difference between Unauthorized and Forbidden, when each is returned, and how Express, Stripe, and GitHub APIs use them.
HTTP 301 vs 302 — Moved Permanently vs Found Comparison
http 301 vs 302: 301 is permanent and transfers SEO link equity, 302 is temporary. Learn the right choice for redirects and how Google, browsers, and CDNs treat each.
HTTP 301 vs 308 — Permanent Redirect & Method Preservation Comparison
http 301 vs 308: both are permanent redirects, but 308 strictly preserves the request method (POST stays POST). When to choose each for APIs vs web pages.
HTTP 405 vs 501 — Method Not Allowed vs Not Implemented Comparison
http 405 vs 501: 405 means this method isn't allowed on this resource, 501 means the server doesn't implement the method at all. With Allow header guidance.