Google は 404 と 410 を異なる方法で処理し、URL を大量に廃止する場合、その違いは重要です。簡潔に言うと、404 は「見つかりません、後でもう一度試してください」を意味し、410 は「なくなりました、二度と戻りません」を意味します。Googlebot は 404 に数週間再アクセスしてからインデックスから削除します。410 は数日で削除します。マイグレーションの途中で、数千個の URL が永遠に消えるべき状況にある場合、正しいコードを選ぶとクリーンアップを数週間短縮できます。
各コードが実際に意味すること
404 Not Found は、要求された URL にリソースが存在しない場合のデフォルトレスポンスです。サーバーは「この URL は現在リソースがありません」と言っています。その意味合いは許容的です。その URL は後でリソースを持つかもしれません、タイプミスかもしれません、リソースが移動してだれかがリダイレクトの配信を忘れたかもしれません。404 は広い範囲です。
410 Gone は明示的な廃止コードです。サーバーは「この URL はリソースを持っていました、永遠に削除されました、再度問い合わせないでください」と言っています。これはドアを閉める信号です。Google は明示的に文書化しています。410 は 404 よりもインデックスから URL を削除する強い信号として解釈されます。
Googlebot が各コードをどのように処理するか
404 の動作。Googlebot が 404 に遭遇すると、URL を見つからないとしてマークしますが、クロールキューに保持します。ボットは減速スケジュール(24 時間、その後 7 日、その後 30 日、その後 90 日)で URL に再アクセスします。URL が最終的に再び 200 を返した場合、それは復活します。このサイクルは数ヶ月続きます。URL は Search Console の Coverage レポートに「見つかりません(404)」の下に期間中表示されます。
410ステータス。Googlebotは410を検出すると、そのURLを永続的に廃止済みとしてマークし、数日以内にインデックスから削除します。そのURLはSearch Consoleに「法的申し立てにより削除されたページ」または「ソフト404」として一時的に表示されます(Googleの解釈による)。その後消えます。クロールキューはそのURLへのアクセスを停止します。
機能的な違いは、インデックス汚染が数日で解決するか数ヶ月続くかです。
404ではなく410を選ぶべき場合
- マイグレーションの整理:新しいサイトに存在せず、意味的に相当するページもないURL。410を使用してください。それらは削除されたのです。
- 削除されたブログ投稿:意図的に廃止した古いコンテンツ。確信がある場合は410を使用。同じスラッグで復活する可能性がある場合は404を使用。
- 廃止された商品ページ:販売していないSKU。商品が永続的に廃止された場合は410を使用。復活する可能性がある場合は404を使用。
- URLパターンの廃止:例えば、フォーラムが廃止されたため/forum/*を廃止する場合。パス全体に410を使用。
- 過去のハッキングやCMSエラーからインデックスに紛れ込んだジャンクURL。410を使用。
404が正しい選択肢の場合
- タイプミスと実在しないURL:404が慣例的な応答です。410は誤りです。なぜならそのURLは元々コンテンツを持っていなかったからです。
- 再公開予定のコンテンツ:URLが復活する可能性があれば、404はGoogleが再度見つけられるようドアを開けておくことになります。
- 一時的に利用不可のページ:ここでは404は不適切です。503とRetry-Afterヘッダーを使用してください。ただしそれがない場合、曖昧なケースでは404が安全なデフォルトになります。
一般的なプラットフォームで410を設定する方法
Vercel(vercel.json)
リライトまたはステータスコードルールを追加します。最もクリーンなパターンは/410エンドポイントを用意し、廃止されたURLをそこにstatusCode 410でリライトする方法です。vercel.jsonはネイティブにリダイレクトをサポートしていますが、任意のURLへのステータスコードリライトはサポートしていないため、パターンとしては、廃止リスト内の任意のURLに対してnew Response(null, { status: 410 })を返すNext.jsミドルウェアを使用します。
Netlify(netlify.tomlまたは_redirects)
_redirects構文を使用します:/retired-url 410! — 末尾の感嘆符が強制ステータスフラグです。またはnetlify.tomlではstatus = 410とともに[[redirects]]ブロックを使用します。
Apache(.htaccess)
Redirect gone /retired-url — またはRewriteRuleを[G]フラグで使用します:RewriteRule ^retired-url$ - [G,L]。
Nginx
location ブロック内で URL パターンにマッチする場所に return 410; を指定します。一括パターンの場合は location ~ ^/old-pattern/ { return 410; } を使用します。
スケールでこれが重要な理由
10,000 個の廃止された URL を 404 と 410 に 50:50 で分割しているサイトでは、410 側はカバレッジレポートから 2 週間以内に削除されますが、404 側は 3~6 ヶ月間カバレッジレポートに残ります。404 セットは、インデックス対象の URL に充てるべき Googlebot のクロール予算を占有します。より大規模なサイトではその予算への影響は測定可能です。廃止に使う予算が少なければ、新しいコンテンツに割ける予算が増えます。
マイグレーションパターン
マイグレーション後の整理の 3 つのステップです。ステップ 1: Search Console、Ahrefs、旧サイトマップからすべての URL を取得します。ステップ 2: 各 URL を 4 つのバケットのいずれかに分類します。(a) 新しい URL にマップされる → 301 リダイレクト、(b) 新しいスラッグに名前変更 → 301、(c) 完全に廃止 → 410、(d) ステータスが曖昧 → 404。ステップ 3: リダイレクト・410・404 ルールを vercel.json または .htaccess に記述し、新しいコンテンツと同じデプロイで展開します。マイグレーション前の URL がルールセットに含まれていない場合はビルドを失敗させるビルド時 SEO リンターも組み込みます。
知っておくべき 451 コード
451 Unavailable For Legal Reasons は、法律により削除が義務付けられたコンテンツに使用します。これは稀で限定的です。DMCA テイクダウン、URL 全体が廃止される場合の GDPR 削除権、裁判所命令などです。Google はこれを 410 と同様に解釈しますが (インデックスから削除)、法的シグナルが重要です。法的背景が適用される場合のみ使用してください。
まとめ
完全な廃止には 410 を使用します。本当に見つからない、または曖昧なコンテンツには 404 を使用します。2 週間対 6 ヶ月のインデックス整理の差は、数千 URL を超えるすべてのマイグレーションで現れます。修正は vercel.json、netlify.toml、または .htaccess の 1 つのルールです。カットオーバー時に正しく設定すれば、ローンチ後の整理作業を避けられます。これは誰もが予算化しておくべきものです。
関連記事: 廃止されていないが移動した URL の場合は 301 対 302 対 307 対 308 という関連する判断が必要です。410 が必要なマイグレーション整理には、リダイレクトコードの決定も含まれます。その枠組みについてはリダイレクト戦略の記事を参照してください。