ブログのパーマリンク(URL)を変更した際、古いURLから新しいURLへ読者や検索エンジンを正しく誘導するために.htaccess
ファイルでリダイレクト設定を行う場合があります。
しかし、その設定方法を少し間違えるだけで、サイトの表示速度やSEO評価に悪影響を与える「リダイレクトチェーン」や、ページが表示されなくなる「無限ループ」といった問題を引き起こす可能性があります。
この記事では、複数世代のURL変更が重なった際に陥りがちなリダイレクトの罠と、SEOに最も効果的な設定方法を解説します。
.htaccessの基本動作:ルールは「上から」が絶対
まず、Apache(ウェブサーバー)が.htaccess
ファイルをどのように読み込むかを知っておく必要があります。答えはシンプルで、上から順番にルールをチェックし、最初に条件が一致したものを実行します。
そして、多くのリダイレクトルールに付いている[L]
フラグは、「Last(最後)」を意味し、「このルールを実行したら、これ以降のチェックは終了しなさい」という命令です。
つまり、一度条件にマッチすれば、それより下にどんなルールが書かれていても無視される、というのが大原則です。
陥りがちな罠:「2段階リダイレクト(リダイレクトチェーン)」
サイト運営が長くなると、URLの変更が複数回発生することがあります。例えば、以下のような変更です。
- 2021年の変更:
/excel-repetition/
→/2665/
- 2024年の変更:
/2665/
→/excel-find-and-delete.../
この時、何も考えずにリダイレクトルールを追記していくと、.htaccess
ファイルは以下のようになります。
Apache
# 2024年の設定
RewriteRule ^2665$ /excel-find-and-delete-duplicate-data-with-the-same-value-easy/ [R=301,L]
# 2021年までの設定
RewriteRule ^excel-repetition//$ /2665/ [R=301,L]
この設定はエラーにはなりませんが、最も古いURL (/excel-repetition//
) にアクセスがあった場合、サーバー内部では次のような2段階の処理が発生します。
/excel-repetition//
→ /2665/
→ /excel-find-and-delete.../
これが「リダイレクトチェーン」です。
なぜリダイレクトチェーンは避けるべきなのか?
この「寄り道」は、ユーザーと検索エンジンの両方にとって非効率です。
- ユーザー体験の悪化: リダイレクトの回数が増えるほど、ページの表示にわずかな遅延が生まれます。
- SEO評価への影響: Googleのクローラーは、サイトを巡回するためのリソース(クロールバジェット)が限られています。不要なリダイレクトは、この貴重なリソースを無駄遣いさせ、新しいページの評価が確定するまでに時間がかかる可能性があります。
「Googleのデータベースに残っている古いURLを、一段階ずつ丁寧に教えてあげるべきでは?」と考える方もいるかもしれませんが、301リダイレクト
は「恒久的な移転」を伝える強い指示です。
郵便局に何度も転居届を出すのではなく、「古い住所AもBも、最終的な引っ越し先はCです」と一度で伝えるのが最も親切で確実なのです。
解決策:すべての古いURLから「最終目的地」へ直接リダイレクト
解決策はシンプルです。すべての古いURLを、1回のジャンプで最終的なURLに集約させます。
先ほどの例では、以下のように設定します。
Apache
# 最終的なURLへのリダイレクト(推奨)
# 中間URLからのリダイレクト
RewriteRule ^2665$ /excel-find-and-delete-duplicate-data-with-the-same-value-easy/ [R=301,L]
# 最も古いURLからも直接リダイレクト
RewriteRule ^excel-repetition/?$ /excel-find-and-delete-duplicate-data-with-the-same-value-easy/ [R=301,L]
こうすることで、どの古いURLにアクセスがあっても、寄り道することなく一瞬で最新のページにたどり着くことができ、SEO評価もスムーズに引き継がれます。
【要注意】絶対に避けたい「無限リダイレクトループ」
最後に、最も危険な設定ミスを紹介します。それは、2つのルールがお互いを指し合ってしまう「無限リダイレクトループ」です。
Apache
# 無限ループを引き起こす悪い例
RewriteRule ^page-a$ /page-b/ [R=301,L]
RewriteRule ^page-b$ /page-a/ [R=301,L]
この場合、page-a
→ page-b
→ page-a
→ page-b
… とリダイレクトが無限に繰り返され、最終的にブラウザは「ERR_TOO_MANY_REDIRECTS」などのエラーを表示してページを開くことができません。
まとめ
.htaccess
でのリダイレクト設定は、サイトの歴史が積み重なるほど複雑になりがちです。定期的に設定を見直し、すべての古いURLが最終目的地へ直接向かうよう整理することで、ユーザーにとっても検索エンジンにとっても親切なサイトを維持しましょう。