menu
Webを活用してお客様のビジネス課題を解決します。札幌・東京を拠点にWebコンサルティングをコアにした、Web制作・システム開発・サーバ構築会社です。

リダイレクトに301を安易に使うべきではない理由

シェア
ツイート
シェア
ブックマーク
タイトルとURLをコピー

最終更新日:2025/05/14   公開日:2025/05/07

はじめに

ウェブサイトを運営していると、さまざまな理由でリダイレクトを設定する必要が出てきます。リダイレクトには種類があり、一般的には 301(Moved Permanently)と 302(Temporary Redirect)が使用されます。

ウェブ上で検索すると「リダイレクト = 301前提」、「リダイレクトは301を使うべき」といった記事が見つかりますが、技術的な観点から見ると、301は非常に慎重に扱うべきものであり、安易に使用すべきではありません。

本記事では、その理由について詳しく解説します。

2つのリダイレクトの違いと301のデメリット

リダイレクトにはレスポンスコードが設定されており、301 は「永続的な URL 移転」を、302 は「一時的な URL 移転」を示します。

このうち 301 は「永続的」であることが問題であり、一度レスポンスとして返されると、多くのブラウザやキャッシュシステムで「有効期限なし」としてキャッシュされてしまいます。この挙動は Cache-Control ヘッダーの有無に関係なく、一度でも 301 を受け取ったら、それ以降はずっとリダイレクト先へ自動的にアクセスするという挙動になります。 そのため、301 リダイレクトに万が一誤りがあった場合、キャッシュが削除されるまで永続的に誤ったリソースへアクセスし続けることになります。

さらに厄介なのは、このキャッシュがサービス提供者側から解除できないという点です。 ユーザーにキャッシュの削除をお願いするしか方法がなく、それにはユーザー側に一定の情報リテラシーが必要です。 また、ユーザーごとの個別対応になってしまうため、どの程度の範囲に影響が出ているかを正確に把握できないという点も大きな問題です。

301リダイレクトを設定した場合の実害例

301リダイレクトを利用することで、以下のような実害が発生したことがあります。 この問題は 301 ではなく、302 リダイレクトを利用していれば簡単に防げた問題でもあります。

実害1:メンテナンス時の誤設定によるアクセス不能

あるとき、特定のページをメンテナンスするために、一時的にメンテナンスページへリダイレクトする設定を行いました。 しかし、このときに 301 リダイレクトを使用してしまったため、該当機能にアクセスしたユーザーのブラウザには、永続的なリダイレクトとして記憶されてしまいました。

その結果、メンテナンス終了後もブラウザが自動的にメンテナンスページへリダイレクトし続けるという状態になり、正常な機能ページにアクセスできない問題が発生しました。

実害2:サイト切り戻し時のキャッシュが引き起こすリダイレクトループ

サイトリニューアルに際して、旧URLから新サイトへ301リダイレクトを設定しました。 しかし、新サイトに問題が発覚し、旧サイトに切り戻す対応を行ったところ、一度でも旧サイトにアクセスしたユーザーのブラウザでは301のキャッシュが残っており、引き続き新サイトにリダイレクトされ続けてしまいました。

この結果、旧サイト ⇄ 新サイト間でのリダイレクトループが発生し、ユーザーがどちらのサイトにも正常にアクセスできなくなるという深刻なトラブルに発展しました。

ここではサイト全体の例を挙げましたが、同様の問題は特定ページ単位でも簡単に起こり得ます。

実害3:ウェブシステム連携に致命的な不具合が発生する

ウェブシステムが一時的に301リダイレクトを返してしまった場合でも、そのリダイレクトはクライアント側(主にブラウザ)に永続的に記録されてしまいます。

たとえば、かつて /feature/ というURLに対して、何らかの事情で一時的に別のページへ301リダイレクトを返していたとします。 その後、旧機能を廃止し、新たな機能を同じ /feature/ パスで再実装した場合、問題が発生します。

過去に /feature/ にアクセスしたことのあるユーザーのブラウザは、301のキャッシュにより新しい /feature/ にアクセスせず、以前のリダイレクト先に自動的に飛んでしまうのです。 この結果、新機能にアクセスできないユーザーが一部に発生するという状況が生まれます。

この問題の厄介な点は、遅効性の問題である同時に、再現性がないことです。 特定のユーザーのブラウザにだけキャッシュが残っているため、開発者やテスト環境では問題が再現せず、原因が特定できないままトラブルが長期化することがあります。

なぜ301リダイレクトが利用されるのか

301リダイレクトを推奨しているのは、主にSEO界隈の古い記事や解説です。 かつては「リダイレクト元のSEO評価(いわゆるスコア、PageRank)を完全に引き継ぐには、301を使うべき」と広く言われてきました。

しかし、2016年にGoogleが『301も302もPageRankを引き継ぐ』と明言しており、それ以降は両者の扱いに実質的な違いがないと考えられています。 にもかかわらず、このGoogleの発表を踏まえていない古い記事が今も検索に引っかかることがあり、誤った形で301が推奨され続けていると考えています(もちろん、新しい記事ではどちらを使っても良いと述べられている記事も多いです)。

また、301は「永続的なリダイレクト」であるため、クライアント(ブラウザや検索エンジン)に強いキャッシュを与え、通信効率の向上を期待できるという側面もあります。 しかしこの ”永続化” は提供者側の制御を離れてしまうため、誤った設定をすると後から修正ができなくなるという諸刃の剣です。 この点があまり周知されていないこともなんとなくで 301 を利用してしまう理由の1つかと思います。

まとめ

この記事では、301リダイレクトを安易に使用すべきではない理由について解説しました。

たとえば .htaccess の設定で L=301 と記述したり、フレームワーク側の仕様(例:WordPress で siteurl とアクセス元のドメインが異なる場合など)によって、意図せず301リダイレクトが発生しているケースは少なくありません。

しかし、現在において301のメリットは限定的であり、デメリットの方がはるかに大きいと私は考えています。 ネットワークリソースが潤沢となり、CDNやHTTP/2などによって転送効率が大幅に向上しているため、キャッシュによる効率化の恩恵が相対的に減少しているためです。  そのため、プロジェクトでリダイレクトには一切301を利用しない(何か明確な決定があった場合にのみ301を使う)という分かりやすい方針をプロジェクト内で決めた方が良いと考えます。

繰り返しになりますが、301は一度設定すると“自身では制御できない範囲にURL変更を宣言してしまう”非常に強力かつ危険な仕組みです。 そのため、301を使用する際には、「本当に永続的に変更して問題がないのか?」「将来URLを元に戻す可能性はないのか?」をよく検討したうえで、慎重に判断すべきでしょう。