308リダイレクト(メソッドを維持する恒久的な移動)

リクエストを恒久的に転送し、新しいURLでも元のメソッドとリクエストボディを維持することをクライアントに求めるHTTPステータスコードです。

308は、リクエストを恒久的に転送し、新しいURLでも元のメソッドとリクエストボディを維持することをクライアントに求めるHTTPステータスコードです。このガイドでは、実際のレビューで重要になる判断、確認方法、限界に絞って解説します。

308リダイレクトが制御すること

HTTP 308は、リクエストのメソッドが重要になる場面のために定義された、恒久的なリダイレクトです。レスポンスは新しい転送先を示し、仕様に準拠したクライアントに、メソッドやボディを変えずにそこでリクエストをやり直すよう指示します。そのため、APIのエンドポイントやフォームのハンドラーを恒久的に移動し、POST、PUT、PATCH、DELETEのセマンティクスを維持したい場合に役立ちます。アプリケーションのデータを書き換えたり、転送先を検証したり、ルート設計の不備を直したりはしません。GETで開く通常のドキュメントページでは、メソッドを維持する性質は閲覧者にとって意味がないため、運用上は301のほうが分かりやすい選択です。

308リダイレクト(メソッドを維持する恒久的な移動)の判断ポイントを整理した図です。

変更の意図からステータスを選ぶ

番号を選ぶ前に、恒久的かどうかを決めます。308は旧アドレスが置き換えられたことを示し、307はメソッドを維持する一時的な移動を示します。301も恒久的な移動を表しますが、従来のクライアントの動作では、GET以外のリクエストがGETに変わることがあります。検索エンジンは、恒久的なリダイレクトを評価統合のシグナルとして説明しています。ただし、ステータスコードだけでは、クロールや正規URLの選択がいつ変わるかは保証されません。転送先、内部リンク、canonicalタグの方針、クロール時のレスポンスを確認し終えるまで、旧URLは移行リストに残します。

恒久的な移動の実装とテスト

まず、旧エンドポイント、最終的なエンドポイント、理由、担当者を並べた小さなURLマップを作ります。廃止するメソッド依存のルートごとに、関連する後継ルートへの直接の308を1つ設定します。関係のないリクエストをホームページへ送ってはいけません。本番以外の環境で実際のリクエストメソッドを使ってテストし、リダイレクトを自動でたどらずにレスポンスのステータスとLocationを調べます。次にリダイレクトをたどる設定で繰り返し、最終的なハンドラーが想定どおりのメソッドを受け取ることを確認します。最後に旧URLのリストをクロールし、内部の参照を最終URLに更新して、サーバー側の記録とSearch Consoleの情報は別々に監視します。

  1. 対象のURLまたはページ群と、期待する動作を定義します。
  2. 代表的なURLの一部をテストし、生のレスポンスまたはレンダリング結果を証拠として保存します。
  3. 原因のうち制御できるものを1つずつ直し、同じ範囲を再テストします。
  4. データの欠落を合格とみなさず、不足、例外、追加で確認する項目を記録します。

よくある失敗と確認のポイント

よくある誤りは、308をSEO上のアップグレードとして扱うことです。308は転送方法の判断であり、検索順位を上げる施策ではありません。もう1つの誤りは、ブラウザーでの移動だけをテストすることです。これではGETしか試せず、308が必要になったPOSTやPUTの経路は確認できません。リダイレクトチェーン、ループ、Locationヘッダーの欠落、エラーを返す転送先、古いレスポンスのキャッシュは、それぞれ別に調べます。移行では、廃止するURLをすべて、関連する最終的な転送先1つに対応づけます。作業の完了を宣言する前に、そのマップをクロールしてチェーンとループを取り除きます。何を確認し、何が確認できなかったかを記録します。1回のリクエストが成功しても、ルート全体を確認したことにはなりません。

キャッシュは、別に確認が必要です。恒久的なレスポンスは、設定をロールバックした後も、ブラウザーや中間のキャッシュに残ることがあります。クリーンなクライアントからテストし、必要な場合はレスポンスのキャッシュ指定を記録します。古いクライアントに合わせようとして、ユーザーエージェントだけでリダイレクトを出し分けてはいけません。ルートを再現しにくくなり、クローラーの証拠にも一貫性がなくなります。互換性のためにフォールバックが必要な場合は、どのクライアントに必要かを記録し、通常のリクエスター全員に対する最終URLの方針は変えません。

FAQ

301ではなく308を使うのは、どのような場合ですか?
移動が恒久的で、元のリクエストのメソッドとボディを維持する必要がある場合に308を使います。通常のGETで開くドキュメントのURLなら、301のほうが従来どおりで単純な選択になることが多くあります。
一時的な障害のとき、308は適切なレスポンスですか?
いいえ。一時的な移動には、アプリケーションの動作に合う一時的なレスポンスを選びます。メソッドの維持が重要なら307です。一時的な運用上の変更を、恒久的なものとしてキャッシュさせてはいけません。
308リダイレクトは、どのようにテストすればよいですか?
まず、リダイレクトをたどらずにステータスとLocationを調べます。次に、メソッドに依存する代表的なリクエストを、リダイレクトをたどる設定で繰り返し、最終的なハンドラーが意図したメソッドを受け取るか確認します。
308リダイレクトで、canonicalタグや内部リンクの作業は不要になりますか?
いいえ。内部リンクを最終URLに更新し、canonicalタグ、サイトマップ、インデックス制御の判断は別に確認します。リダイレクトのレスポンスだけでは、移行は完了しません。