直接回答
リダイレクトチェーンとは、リダイレクトが連続して続く状態(A → B → C)のことで、リダイレクトループとは、すでに訪れたURLに戻ってくるチェーンのことです。そのため、ブラウザは「リダイレクトが多すぎます」で停止します。どちらを修正する場合も、URLをたどって各ホップを確認し、最初のリダイレクトを最終URLへ直接向け、トラフィックを元に戻すルールを削除してください。
ステップ1: URLを追跡する#
Redirect CheckerにURLを入力します。すると、各ホップとそのステータスコードが一覧表示され、チェーン、平文HTTPを経由するホップ、恒久リダイレクトが必要な箇所での一時的なリダイレクト、そしてループが示されます。ターミナルから追跡することもできます:
bashcurl -sIL http://old-site.com/pricing | grep -iE '^(HTTP|location)'
HTTP/1.1 301 Moved Permanently
location: https://old-site.com/pricing
HTTP/2 301
location: https://www.old-site.com/pricing
HTTP/2 301
location: https://new-site.com/pricing
HTTP/2 200この例は3ホップのチェーンです。同じlocation行がcurlが「Maximum redirects followed」で停止するまで繰り返される場合、それはループです。
ステップ2: チェーンを1ホップに整理する#
- 最終URL、つまり200を返すURLを書き留めます。
- RedirHubで、Links内の最初のURLのリンクを開き、https://と正しいホスト名(wwwあり/なし)を付けたその最終URLを宛先に設定します。多くのリンクを一度に変更するには、それらを選択して一括バーを使用するか、CSVをインポートします。
- 途中のリダイレクトは、ほかのサイトがまだそれらへリンクしている場合は残しておいて構いませんが、それらもすべて最終URLへ直接向けてください。
- URL をもう一度たどってください。301 が 1 回、そのあとに 200 が表示されるはずです。
追加のホップが 1 つ増えるたびに、ページの読み込みが始まる前に完全な往復が 1 回分追加されます。また、Google は URL に対して設定された上限を超えるとそこで追跡をやめるため、ホップは 1 回にするのが理想です。
ステップ 3: ループの原因を特定する#
| 表示される内容 | Cause | Fix |
|---|---|---|
| http → https → http → https … | 一方のルールが HTTPS を強制し、別のルール(多くの場合 CMS または CDN 上)がトラフィックを HTTP に戻します。 | HTTPS のルールを 1 つだけ残し、もう一方を削除してください。CMS のサイト URL は https://. で始まっている必要があります。 |
| www → non-www → www … | 2 つのシステムが正規ホスト名について一致していません。たとえば、レジストラは www に転送し、サイトは裸のドメインへリダイレクトしています。 | 1つのホストを選んでください。すべてのリダイレクトとサイト自身のURL設定をそのホストに設定します。 |
| Cloudflare の背後でのみループする | SSL/TLS モードが Flexible です。Cloudflare はオリジンに HTTP で接続し、オリジンは HTTPS にリダイレクトし、Cloudflare は再び HTTP で要求します。 | オリジンに有効な証明書がある場合は、Cloudflare の SSL/TLS を Full(strict)に設定してください。 |
| old-site.com → old-site.com/new → old-site.com/new … | ドメイン全体のリダイレクトが同じドメイン上のパスを指しているため、宛先が再び同じリダイレクトに一致します。 | 別のホストへリダイレクトするか、移動が必要な URL についてはドメイン全体のリダイレクトをパスリンクに置き換えてください。 |
| A → B → A | 2つのパスリダイレクトが互いを指し合っており、URL を元に戻した後によく発生します。 | そのうちの1つを削除するか、別の場所へ向け直してください。 |
| 一部の訪問者に対してのみループする | 遷移先サイトの Cookie、言語、またはデバイスのルールが、元に戻すようにリダイレクトしています。 | プライベートウィンドウで追跡し、遷移先サイトでそのルールをテストしてください。 |
ステップ 4: 再確認してキャッシュをクリアする#
ブラウザは 301 リダイレクトをキャッシュするため、すでに修正したループが自分のブラウザでは表示され続けることがあります。プライベートウィンドウまたは curl でテストし、必要に応じてブラウザのキャッシュをクリアしてください。
今すぐ URL を追跡する 公開URLならどれでも、すべての遷移先、ステータスコード、そして修正すべき問題を確認できます。
リダイレクトチェッカーを開くまだ解決しませんか? DNS と HTTPS の問題については 新しいリダイレクトのトラブルシューティング を、リクエストがどのようにリダイレクト先を見つけるかについては マッチング を参照してください。
よくある質問
チェーンは、最終的に機能するページに到達する複数のリダイレクトです(A → B → C)。ループは、すでに訪れたURLに戻ってしまうため終わりません(A → B → A)。そのため、ブラウザはERR_TOO_MANY_REDIRECTSを表示します。
各ホップは遅延を増やし、GoogleはURLごとに限られた回数のホップしかたどりません。最初のリダイレクトを直接最終URLに向ければ、両方の問題を避けられます。
URLをたどって、どの2つのURLが繰り返されているかを確認し、その間でトラフィックを送るルールの一方を削除するか、宛先を変更します。最も一般的な原因は、競合するhttp/httpsまたはwwwのルールと、CloudflareのFlexible SSLモードです。
ドメイン全体のリダイレクトではできません。ドメイン内のすべてのパスに一致するため、自分自身の移動先にも一致してループしてしまいます。移動するURLにはパスリンクを使うか、別のホストにリダイレクトしてください。
