410 Gone

Permanent removal of a previously available resource is signaled by the 410 Gone status code. Unlike 404, a 410 confirms the resource once existed and has been intentionally deleted with no expectation of return.

Usage

When the 410 Gone error message is received, the client knows the address was valid at one point, but the resource no longer exists. This is the response returned after a resource, such as a document available as part of a limited-time offer, expires. If the server does not expect the removal to be permanent, 404 is used instead.

This status code is helpful for web maintenance and signals to clients to remove links to the resource. The response is cacheable by default. Clients and intermediaries store the 410 without explicit Cache-Control directives. Well-behaved clients do not retry the request, unlike 404 where a later retry may succeed.

Common use cases include expired promotions, deprecated API endpoints, and archived content permanently removed.

Example

The client requests a resource and the server responds with 410 Gone because the promotion has ended and the content is no longer available.

Request

GET /holiday-promotion-Jan-2021.pdf HTTP/1.1
Host: www.example.re

Response

HTTP/1.1 410 Gone
Content-Type: text/html
Content-Length: 133

<html>
  <head>
    <title>Promotion Expired</title>
  </head>
  <body>
   <p>The promotional period has ended.</p>
  </body>
</html>

410 vs 404

Both codes remove an address from search results and tell a client the resource is unavailable. 410 Gone adds a claim 404 never makes.

410 asserts three things: the resource existed, the removal was intentional, and no replacement follows. The response is a decision rather than an observation, so producing one calls for application knowledge about the address rather than a default handler.

404 stays deliberately silent about the future. A temporary outage, an accidental deletion, and a mistyped address all yield the same answer, and the response commits to nothing. A server with no record of the address has no basis for anything stronger.

Search engines drop both from the index at the same rate, treating the two codes identically, and crawling of a removed address tapers off once the code registers, so neither code drains crawl budget. Neither passes ranking signals onward, so an address holding backlinks or traffic is better redirected with 301 to a successor than removed with either code.

Deleted user accounts, expired listings, and retired products with no equivalent are the cases where 410 is accurate. Everything else is a 404.

How to fix

When a 410 appears unexpectedly, check the server configuration files for unintended rules. In Apache, search httpd.conf and .htaccess for RewriteRule entries with the [G] (Gone) flag or Redirect gone directives. In nginx, look for return 410 inside location blocks in the server config. CMS plugins and recent upgrades sometimes add 410 rules without warning. Disable recently installed plugins to isolate the source.

If the removal is intentional, update sitemaps to exclude the URL and remove internal links pointing to the resource.

In WordPress, plugins like Redirection or Yoast SEO manage 410 responses through the admin interface without editing server files directly.

If the removal is unintentional, restore the resource or its replacement and return 200. When a replacement page exists at a different URL, a 301 redirect is more appropriate than a 410.

Code references

.NET

HttpStatusCode.Gone

Rust

http::StatusCode::GONE

Rails

:gone

Go

http.StatusGone

Symfony

Response::HTTP_GONE

Python3.5+

http.HTTPStatus.GONE

Java

java.net.HttpURLConnection.HTTP_GONE

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_GONE

Angular

@angular/common/http/HttpStatusCode.Gone

See also

Last updated: August 18, 2026