410 Gone
Применение
Получив сообщение об ошибке 410 Gone, клиент понимает, что адрес когда-то был действительным, но ресурса больше не существует. Такой ответ возвращается после того, как ресурс — например, документ, доступный в рамках ограниченного по времени предложения, — истёк. Если сервер не считает удаление окончательным, вместо этого используется 404.
Этот код состояния полезен при обслуживании сайта и сигнализирует клиентам, что ссылки на ресурс следует убрать. Ответ по умолчанию кэшируем. Клиенты и промежуточные узлы сохраняют 410 и без явных директив Cache-Control. Корректно работающие клиенты не повторяют запрос — в отличие от 404, где повтор может позже оказаться успешным.
Типичные сценарии использования — истёкшие акции, устаревшие конечные точки API и заархивированный контент, удалённый безвозвратно.
Влияние на SEO
Поисковые системы вроде Google не индексируют URL со статусом ответа 410. Ранее проиндексированные URL будут удалены из результатов поиска. Страницы, возвращающие этот код, не расходуют краулинговый бюджет. Google обрабатывает 404 и 410 одинаково. Оба кода удаляют контент из индекса с одинаковой скоростью. Возврат 200 с содержимым об ошибке или перенаправление удалённых URL на главную страницу вместо ответа 410 создаёт soft 404, что расходует краулинговый бюджет и подрывает доверие к серверным сигналам сайта.
Пример
Клиент запрашивает ресурс, и сервер отвечает 410 Gone, поскольку акция завершилась и контент больше недоступен.
Запрос
GET /holiday-promotion-Jan-2021.pdf HTTP/1.1
Host: example.com
Ответ
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 появляется неожиданно, проверьте конфигурационные файлы сервера на предмет непреднамеренных правил. В Apache поищите в httpd.conf и .htaccess записи RewriteRule с флагом [G] (Gone) или директивы Redirect gone. В nginx посмотрите, нет ли return 410 внутри блоков location в конфигурации сервера. Плагины CMS и недавние обновления иногда добавляют правила 410 без предупреждения. Отключите недавно установленные плагины, чтобы локализовать источник.
Если удаление намеренное, обновите карты сайта, исключив этот URL, и уберите внутренние ссылки, ведущие на ресурс.
В WordPress плагины вроде Redirection или Yoast SEO управляют ответами 410 через административный интерфейс, без прямого редактирования серверных файлов.
Если удаление непреднамеренное, восстановите ресурс или его замену и возвращайте 200. Когда страница-замена существует по другому URL, перенаправление 301 уместнее, чем 410.
Примеры кода
.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