301リダイレクトと302リダイレクトの違い|設定を直したのに、ブラウザだけが「前のまま」を覚えていた
wwwを外す.htaccessの設定を直したのに、自分のブラウザだけがいつまでも古い行き先を覚えていた。
犯人は301という数字の「恒久的」という意味だった。
wwwを外す作業をしたときの話だ。
「www.autocamp.website」に来た人を「autocamp.website」へ寄せるだけの、地味な.htaccess修正のはずだった。
設定を書いて、ブラウザで確認して、よし通った、と思って次の作業に移った。
ところが数日後、設定の一部にミスを見つけて直した。
直したのに、自分のパソコンのブラウザだけがいつまでも「前の行き先」に飛び続けた。
301と302、まず何が違うのか
どちらも「このURLじゃなくて、あっちを見てね」とブラウザに伝えるステータスコードという点は同じだ。
違うのは、その移動を「恒久的(301 Moved Permanently)」と伝えるか、「一時的(302 Found)」と伝えるかだけである。
意味だけ見ると小さな違いに見える。
僕も最初は、どっちを使っても最終的に同じページに着くんだから大差ない、くらいに思っていた。
ブラウザは「恒久的」を、わりと本気で覚える
自分の.htaccessを直したときに気づいたのは、301を一度受け取ったブラウザは、その組み合わせ(元のURL→行き先)をかなり長く覚えている、ということだった。
デベロッパーツールのNetworkパネルを開いても、リクエストが一覧に出てこない。
サーバーに問い合わせにすら行かず、ブラウザの中だけで前回の行き先へ飛んでいた。
301は「恒久的に移動した」という意味なので、ブラウザからすれば律儀に守っているだけだ。
「もうこのURLに用はない、次からは覚えておいた行き先に直接行きます」というのが301の言っていることで、ブラウザはその言葉どおりに動いていた。
こちらが「ちょっと直したいんだけど」と思っても、ブラウザには関係ない話だった。
結局、シークレットウィンドウで開き直すか、そのURLのキャッシュだけ消すかしないと、自分の目では直った後の姿を確認できなかった。
302で同じことをしても、ここまでしつこくは覚えられない。
302は「今回はたまたまあっちだけど、次にまたこのURLに来たら、そのとき改めて聞いてね」という約束だからだ。
実際に書いたコード
.htaccessに書いたのは、こういう一行だった。
RewriteCond %{HTTP_HOST} ^www\.autocamp\.website$ [NC]
RewriteRule ^(.*)$ https://autocamp.website/ [R=301,L]
[R=301,L]の301の部分を302に変えるだけで、ブラウザの覚え方がまるで変わる。
数字ひとつの違いだが、その数字が「相手にどう覚えてほしいか」の意思表示になっている。
だから今は、302で試してから301にする
この一件があってから、恒久的な移動をする作業でも、最初は302で入れることにしている。
302ならブラウザに強く覚え込まれないので、行き先を間違えていても、直せばすぐ直った状態を確認できる。
数日〜1週間ほど302のまま様子を見て、想定どおりに動いていることを確認できてから、301に切り替える。
301に変えた後は、もう気軽に直せないという前提で動くようにもなった。
検索エンジンもこの移動を「恒久」と受け取って評価を新しいURLへ寄せていくので、301は自分のブラウザだけでなく、検索エンジンにとっても後戻りしにくい宣言になる。
以前このサイトで書いた、wwwありなしが検索エンジンには別の家に見えていたという話(wwwを付けても付けなくても同じページが出ていた。検索エンジンには、それは「別の家」に見えていた)も、最終的にこの301で「同じ家です」と伝え直す作業だった。
「一時的」と「恒久的」、言葉で見れば当たり前の違いなのに、自分の手でブラウザに覚え込まれて初めて、その重みが分かった。
出典
※ ブラウザのキャッシュの挙動は僕の環境(Chrome)で実際に観察したものです。内容は2026年9月10日時点で各ページを確認したものです。
ほかにも書いています
note・スタンプ※noteは運営者が個人で書いているものです。
