リダイレクトの設計で重要なのは、301か302かを暗記することではありません。利用者が到達すべき最終URLを決め、検索エンジン、ブラウザ、APIクライアント、キャッシュが同じ意図を受け取れるように、状態コード、Location、内部リンク、canonical、サイトマップ、検証証拠を一つの変更計画へまとめることです。
先に結論
通常ページの恒久移転は301。メソッド維持が必要なら307・308を使い分ける
会社サイトや記事URLを恒久的に変更し、旧URLへ戻さないなら301が基本です。フォーム送信、API、Webhookのように転送後も同じHTTPメソッドと本文を送る必要がある場合は、一時なら307、恒久なら308を検討します。POST完了後に結果ページをGETで見せるなら303、元URLへ戻す一時的な案内なら302が候補です。
削除したページに同等の代替がない場合は、無関係なトップページへまとめて転送せず、404または410を返します。どのコードでも、旧URLから最終URLへ直接1回で到達させることが実務上の基準です。
リダイレクトとは?SEOとユーザー体験での役割
HTTPリダイレクトは、サーバーが3xx状態コードとLocationヘッダーを返し、別のURLを参照するようクライアントへ伝える仕組みです。URL変更、HTTPからHTTPSへの統一、ドメイン移転、一時的な退避、フォーム送信後の画面遷移などに使います。
Google検索では、301と308は転送先を正規URLとみなすための恒久的なシグナル、302・303・307は元URLを検索結果に残す意図を示す一時的なシグナルとして扱われます。ただし、リダイレクトだけで順位や置換時期が保証されるわけではありません。内容の対応、内部リンク、canonical、サイトマップ、クロールと再処理を含めて判断されます。
認証・権限・障害対策の代わりにしない
ログイン要求、権限不足、存在しない資源、サーバー障害を3xxで隠すと、原因と責任境界が不明になります。認証は401・403、削除は404・410、障害や保守は適切な5xxと案内を別に設計します。
転送理由と終了条件を変更票へ書く
恒久か一時か、転送先は同等か、メソッドを維持するか、クエリを残すか、誰がいつ解除するかを先に決めます。状態コードはその結論を表すものです。
301・302・303・307・308の違いを比較
選び方は「恒久か一時か」と「転送後も同じメソッドと本文を使うか」の2段階です。通常のGETページだけでなく、ログイン、決済、API、Webhook、ファイル送信まで対象に含めてください。
| コード | 期間 | 転送後のメソッド | Google検索での主な意味 | 代表的な用途 | 注意点 |
|---|---|---|---|---|---|
| 301 | 恒久 | POSTがGETへ変わる実装がある | 転送先を正規URLとみなすシグナル | 通常ページ、記事、カテゴリ、ドメインの恒久移転 | キャッシュされ得る。旧URLへ戻す予定がないか確認 |
| 302 | 一時 | POSTがGETへ変わる実装がある | 元URLを検索結果に残す意図 | 短期メンテナンス、期間限定の一時表示 | 解除日、元URLの復帰、正規URLの維持を管理 |
| 303 | 一時 | 転送先をGETまたはHEADで参照 | 一時転送として扱われる | POST成功後の完了・結果ページ | 二重送信、失敗時の再送、結果URLの公開範囲 |
| 307 | 一時 | メソッドを変更してはいけない | 元URLを検索結果に残す意図 | 一時的なAPI・Webhook・アップロード先変更 | 本文、認証、Cookie、署名、CORS、転送先を実測 |
| 308 | 恒久 | メソッドと本文を維持 | 転送先を正規URLとみなすシグナル | 恒久的なAPI・送信先・HTTPS正規化 | 長期キャッシュと古いクライアントの対応を確認 |
301と302は歴史的なクライアント挙動により、POSTがGETへ変更される場合があります。メソッド変更を許容できない処理では、307または308を選び、実際に利用するクライアントで確認します。
目的別:どのリダイレクトを選ぶか
迷ったときは、コード一覧から選ぶのではなく、次の順序で要件を絞ります。GETページと送信処理を同じ規則で扱わないことが重要です。
よくある目的と推奨候補
URLスラッグの変更
旧ページと新ページの内容が同等で、元へ戻さないなら301。内部リンクとcanonicalを新URLへ更新します。
HTTPからHTTPSへ統一
Webページ中心なら301が一般的です。APIを含みメソッド維持を明確にしたい場合は308も候補ですが、全クライアントを検証します。
短期メンテナンス
元URLへ戻すなら302または307。ただし本来の障害・保守応答として503とRetry-Afterが適切な場面もあります。
フォーム送信完了
POSTの処理結果を保存した後、303で完了ページへ送り、更新による再送信を避けます。
SEOで失敗しないURL対応表とサイト移転手順
サイト移転では、実装前に旧URLと最終URLを対応付けます。ページだけでなく、画像、動画、JavaScript、CSS、PDFなど、外部から参照される資産も対象です。サイトマップ、アクセスログ、Search Console、CMS、被リンクのあるURLを組み合わせて一覧化します。
旧URLを漏れなく収集する
サイトマップ、サーバーログ、アクセス解析、Search Console、CMSの公開一覧、外部リンクを確認します。季節ページや古いキャンペーン、画像・PDFも忘れないでください。
利用者の目的が同じ最終URLへ一対一で対応付ける
記事から同じ記事、商品から後継商品、統合した複数ページから統合先へつなぎます。同等ページがなければ404・410にし、無関係なトップページへ集約しません。
新サイト側の検索シグナルを更新する
新URLの自己参照canonical、hreflang、内部リンク、サイトマップ、構造化データ、OG URLを新URLへ揃えます。旧URLを指す信号を残さないよう、対応表を使って一括確認します。
サーバー側の恒久転送を最終URLへ直接設定する
URL変更を伴う恒久移転では301または308を使い、A→B→CではなくA→Cへ送ります。CDNとWebサーバーなど複数層に同じ規則を重ねないでください。
公開前後に全URLを試験し、Search Consoleで監視する
状態コード、Location、最終応答、主要操作、404・5xx、転送回数を記録します。ドメイン移転ではChange of Addressの対象も確認し、新URLのサイトマップを送信します。
待ち時間と障害点が増え、古い規則の削除も難しくなります。
既存の旧URLも含め、すべての入口を現在の最終URLへ更新します。
リダイレクトループ・チェーンの原因と直し方
ループは設定文1行だけで起きるとは限りません。CDN、ロードバランサー、Webサーバー、CMS、アプリがそれぞれスキーム・ホスト・パスを正規化すると、利用者から見えない条件が循環します。最初に「どの層が最終決定を持つか」を一つ決めます。
転送の責任層を一つにする
HTTPS化、www有無、末尾スラッシュ、旧パスのどれをCDN、Webサーバー、アプリが担当するか一覧化し、同じ判断を重複させません。
完全一致と例外を広い規則より先にする
ACME検証、ヘルスチェック、管理画面、Webhook、特定の廃止URLを先に評価し、その後にディレクトリ・ホスト全体の規則を適用します。
TLS終端後のプロトコル認識を確認する
ロードバランサーでTLSを終端すると、背後のApacheやアプリはHTTPと認識する場合があります。X-Forwarded-Protoは、管理するプロキシが外部値を上書きし、バックエンドへの直接接続を制限できる構成でのみ信頼します。
転送グラフで自己参照と循環を検出する
URLを頂点、Locationを辺として、A→A、A→B→A、複数ホップを機械的に検出します。代表URLだけでなく、URL対応表の全行を対象にします。
最終URLの信号を一つに揃える
リダイレクト先、内部リンク、canonical、hreflang、サイトマップ、構造化データが別URLを指していると、転送が正しくても処理が遅れます。
TLS終端と転送ヘッダーの信頼境界が不一致。
外部値を破棄し、責任層を一つに限定。
Apache・NGINX・PHPでのリダイレクト設定例
設定例はそのまま貼り付けず、正規ホスト、TLS終端、既存ルール、クエリ、アプリの基準URLに合わせてください。変更票には、構文検査、差分、再読み込み、即時復旧のコマンドを残します。
Apache:単純な転送はRedirectを優先する
HTTPからHTTPSへの全体転送は、専用のポート80 VirtualHostに置くと責任範囲が明確です。単純な転送でmod_rewriteを増やすと、条件順と例外の把握が難しくなります。
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://example.com/
</VirtualHost>
ディレクトリ単位の恒久移転では、元パスの後続部分を新パスへ引き継ぐかを確認します。
Redirect permanent /old/ https://example.com/new/
%{HTTPS}だけで判定するとループすることがあります。X-Forwarded-Protoを使う場合は、管理下のプロキシが毎回値を上書きし、バックエンドへ直接到達できない構成を前提にします。NGINX:単純な転送はreturnで終了させる
単一URLの転送は完全一致のlocation =とreturnで狭く定義します。広い正規表現のrewriteを追加する前に、既存のserver・location優先順位を確認してください。
location = /old-page/ {
return 301 https://example.com/new-page/;
}
server {
listen 80;
server_name example.com www.example.com;
return 308 https://example.com$request_uri;
}
通常のWebページだけなら301が広く使われます。308はメソッドと本文を維持するため、APIや送信処理を含む構成で有力ですが、古いクライアントを含む利用環境で確認します。
PHP・CMS:サーバー設定を触れない場合の最小例
アプリ層の転送は、業務状態に依存する場合やサーバー設定へアクセスできない場合に限定します。出力前にヘッダーを設定し、処理を終了します。ユーザー入力を無検証でLocationへ連結しないでください。
<?php
header('Location: https://example.com/new-page/', true, 301);
exit;
curl・ブラウザ・ログでリダイレクトを検証する方法
ブラウザで最終ページが表示されても、途中に302やチェーンが混ざっている、POSTがGETへ変わった、別ホストへ認証情報を送ろうとしている可能性があります。最初の応答、全ホップ、最終状態、実操作、ログを分けて保存します。
GETで最初の応答とLocationを確認する
curl -IはHEAD要求です。GETと同じ設定が返るとは限らないため、本文を捨ててレスポンスヘッダーを取得する方法も併用します。
curl -sS -D - -o /dev/null \
'https://old.example.com/path?ref=test'
全ホップ、最終URL、転送回数を確認する
curl -sS -L --max-redirs 10 -o /dev/null \
-w 'final_url=%{url_effective}\nstatus=%{http_code}\nredirects=%{num_redirects}\n' \
'https://old.example.com/path'
期待値は、原則として転送回数1、最終URLが対応表どおり、最終状態が200などの正常応答です。最大転送回数へ達した場合は、ループ、循環、不要な正規化を疑います。
POST・APIは検証環境とテスト資格情報で送る
curl -sS -v -L --max-redirs 5 \
-H 'Content-Type: application/json' \
--data '{"test":true}' \
'https://staging.example.com/old-endpoint'
curlは-LでPOSTを追跡すると、301・302・303の後は通常GETへ切り替え、307・308では同じメソッドを再送します。--post301などで挙動を強制できますが、それはクライアント設定であり、サーバーの状態コード選択を置き換えるものではありません。
状態コード、Location、Cache-Control、Vary、Cookie、正規ホスト、エンコード、クエリ。
Chrome・Edge・Safari、戻る、更新、ブックマーク、ログイン、フォーム、決済、ダウンロード。
メソッド、本文、Content-Type、Authorization、Cookie、署名、CORS、タイムアウト、再送。
URL対応表の全行、3xx、404、5xx、外部ホスト、転送回数、Search Console、サイトマップ。
--location-trustedは安易に使わないでください。 別ホストへのリダイレクトでも認証情報やCookieを送れるようにするため、検証対象と送信先を完全に管理している場合に限定します。解除・ロールバックとキャッシュ対策
一時転送は、開始時点で終了日時と解除担当を決めます。恒久転送も、誤設定や想定外の影響に備えて、設定だけでなく内部リンクと検索信号を同じ版へ戻せる復旧計画が必要です。
証拠を保存し、追加変更を止める
発生時刻、URL、全状態コード、Location、レスポンスヘッダー、ブラウザ、ログ、直前差分を保存します。原因が分からないまま別の転送を重ねません。
責任層の規則だけを既知状態へ戻す
CDN、ロードバランサー、Webサーバー、アプリのうち、決定権を持つ層の新規規則を無効化し、構文検査後に再読み込みします。
キャッシュを対象URLだけ無効化する
CDNの全消去を避け、影響URLを限定します。ブラウザが記憶した301・308はサーバー側から完全に消せないため、新しいプロファイル、プライベートウィンドウ、未使用URLでも確認します。
内部リンクと検索信号を同じ復旧版へ戻す
canonical、hreflang、サイトマップ、構造化データ、内部リンクを変更していた場合は、リダイレクトだけでなく同じ変更単位で復元します。
同じURL対応表と試験項目で再検証する
最初の応答、全ホップ、最終状態、GET、POST・API、主要操作、ログを再確認し、原因、影響、残るキャッシュ、再発防止を記録します。
公開前・公開後のリダイレクトチェックリスト
担当者が同じ結果を再現できることを完了条件にします。「ブラウザで開けた」だけでは完了にしません。
設計
- 転送理由、恒久・一時、終了条件、担当者がある
- 旧URL、最終URLまたは404/410が一対一で対応している
- メソッド、本文、クエリ、Cookie、認証情報の扱いを決めた
- 例外、規則順、責任層、復旧設定を文書化した
- 新URLの内容が旧URLの目的と対応している
実装
- 旧URLから最終URLへ原則1回で到達する
- 完全一致・例外が広い規則より先に評価される
- CDNとWebサーバーで同じ規則を重複させていない
- Locationへ外部入力を直接連結していない
- 構文検査、差分、再読み込み、復旧コマンドを保存した
検証
- 最初の状態コードとLocationをGETで確認した
- 全ホップ、最終URL、最終状態、転送回数を記録した
- POST・API・Webhookのメソッドと本文を安全な環境で試した
- Chrome・Edge・Safariとモバイルで主要操作を確認した
- ログにループ、外部誤転送、404、5xxがない
SEO・公開後
- 内部リンク、canonical、hreflang、構造化データを更新した
- 新URLのサイトマップを送信し、旧URLを監視している
- ドメイン移転時のSearch Console手続きを確認した
- 一時転送の解除日、恒久転送の維持担当がある
- 一般に少なくとも1年間、必要なら長期維持できる
2026年7月時点の一次資料と更新方針
HTTP仕様、検索エンジン、Webサーバー、検証ツールは更新されます。利用中の製品バージョンの公式文書と設定検査コマンドも照合してください。本記事は2026年7月29日に以下を再確認しました。
Google Search Central
- リダイレクトとGoogle検索:301・308を恒久、302・303・307を一時のシグナルとして説明。
- URL変更を伴うサイト移転:URL対応表、直接転送、canonical・内部リンク・サイトマップ、監視、維持期間を確認。
HTTP標準
- RFC 9110:HTTP Semantics / Redirection:301・302・303・307・308の意味、メソッド、キャッシュ性を確認。
Webサーバー
- Apache HTTP Server:Redirecting and Remapping:Redirect優先、TLS終端、X-Forwarded-Protoの信頼条件、例外を確認。
- NGINX:ngx_http_rewrite_module:returnの構文、利用可能な状態コード、処理順を確認。
検証ツール
- curl man page:--location、--max-redirs、301・302・303と307・308でのPOST追跡挙動を確認。

Finite Field 編集部の更新方針検索上の扱いはGoogle Search Central、状態コードの意味はRFC、設定例は各サーバーの公式文書、検証挙動はcurl公式文書を優先します。画面や仕様が変わった場合は、取得日と本文を更新します。
リダイレクトでよくある質問
301と308はどちらを使えばよいですか?
どちらも恒久的な移転を示します。通常のGETページでは301が広く使われます。POST、API、Webhookなどで転送後もメソッドと本文を維持する必要がある場合は308を検討し、利用するクライアントで実測してください。
302と307の違いはセキュリティですか?
セキュリティ強度の違いではありません。どちらも一時転送ですが、307は自動転送時にメソッドを変更してはいけない状態コードです。302はPOSTがGETへ変わるクライアント実装があるため、送信処理では要件を確認します。
303はどのような場面で使いますか?
フォームや注文処理などのPOST完了後に、結果ページをGETで表示させるPost/Redirect/Getパターンで使います。更新時の二重送信を避けやすくなりますが、処理の成功・失敗と再送設計は別に必要です。
削除したページをすべてトップページへ転送してよいですか?
同等の代替ページがない場合は一括転送しません。利用者の目的と合わない転送は混乱を招き、Googleからsoft 404として扱われる可能性があります。代替がなければ404または410を返し、エラーページから検索や関連ページへ案内します。
リダイレクトチェーンは何回まで許容されますか?
理想は旧URLから最終URLへの1回です。Googlebotは複数ホップをたどれますが、Googleは直接の転送を推奨し、避けられない場合も理想的には3回以下、5回未満に抑えるよう案内しています。
サイト移転後の301や308はいつまで残しますか?
Googleは一般に少なくとも1年間の維持を案内しています。外部リンク、ブックマーク、古い資料からのアクセスを考えると、恒久移転では技術的に可能な限り長く残す方が安全です。
curl -Iが成功すれば検証は完了ですか?
完了ではありません。-IはHEAD要求であり、GETやPOSTの挙動と一致するとは限りません。最初の応答、全ホップ、最終応答、GET、POST・API、認証、Cookie、主要ブラウザ操作、ログまで用途に応じて確認します。
301を解除すればすぐ元のURLへ戻せますか?
ブラウザや中間キャッシュが301・308を保持している場合があり、サーバー設定を戻しても同じ利用者では古い転送が続くことがあります。担当層の規則、CDNキャッシュ、内部リンク、canonical、hreflang、サイトマップを同じ復旧版へ戻し、新しいセッションでも再試験します。
まとめ:正しいリダイレクトは、状態コードではなく対応表と検証で決まる
恒久か一時か、メソッドと本文を維持するか、利用者の目的が同じ最終URLかを決めます。旧URLから最終URLへ一段で転送し、内部リンク、canonical、hreflang、サイトマップを揃えます。公開前はGETとPOSTを分けて検証し、公開後はログとSearch Consoleを監視します。
一時転送には解除日、恒久転送には維持担当と復旧経路を設定してください。301・308はキャッシュと検索処理が残り得るため、「後で戻せばよい」ではなく、限定試験と切り戻しを含めて設計することが重要です。