HTTPQUERY
日本語

410 Gone

使い方

410 Gone のエラーメッセージを受け取ったとき、クライアントはそのアドレスがかつては有効だったものの、リソースがもはや存在しないと認識します。これは、期間限定の提供の一部として利用できた文書などのリソースが期限切れになったあとに返されるレスポンスです。サーバーがその削除を恒久的なものと見込んでいない場合は、代わりに 404 が使われます。

このステータスコードは Web サイトの保守に役立ち、そのリソースへのリンクを削除するようクライアントに伝えます。このレスポンスはデフォルトでキャッシュ可能です。クライアントと中間装置は、明示的な Cache-Control ディレクティブがなくても 410 を保存します。あとで再試行すれば成功しうる 404 とは異なり、行儀のよいクライアントはリクエストを再試行しません。

一般的なユースケースには、期限切れのプロモーション、非推奨の API エンドポイント、恒久的に削除されたアーカイブコンテンツなどがあります。

SEO への影響

Google のような検索エンジンは、410 のレスポンスステータスを持つ URL をインデックスしません。以前にインデックスされていた URL は検索結果から削除されます。このコードを返すページはクロールバジェットを消費しません。Google は 404 と 410 をまったく同じように扱います。どちらも同じ速度でコンテンツをインデックスから削除します。410 で応答する代わりにエラーコンテンツを伴う 200 を返したり、削除された URL をホームページへリダイレクトしたりすると、ソフト 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 で [G](Gone)フラグを伴う RewriteRule のエントリや Redirect gone ディレクティブを探します。nginx では、サーバー設定の location ブロック内の return 410 を探します。CMS のプラグインや最近のアップグレードが、警告なく 410 のルールを追加することがあります。最近インストールしたプラグインを無効化して原因を切り分けます。

削除が意図的なものであれば、その URL を除外するようサイトマップを更新し、そのリソースを指す内部リンクを削除します。

WordPress では、Redirection や Yoast SEO といったプラグインが、サーバーのファイルを直接編集することなく管理画面から 410 レスポンスを管理します。

削除が意図しないものであれば、そのリソースまたはその後継を復元して 200 を返します。別の URL に代替ページが存在する場合は、410 よりも 301 リダイレクトのほうが適切です。

コードリファレンス

.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