リダイレクト:301(恒久的なURL変更)

Design
スポンサーリンク

301リダイレクト

恒久的にURLを変更になる場合は、301リダイレクト設定をして旧URLへのアクセスを新URLに誘導できる。

「このURLへのアクセスは、これからずっと永遠に次のURLに飛ばしてね」という転送設定なので、次のような場合には301リダイレクトを設定しよう。

  • サイトのドメインを変更する場合
  • httpからhttpsに変更する場合(SSLを導入した場合)
  • ウェブページのURLを変更した場合

301リダイレクトはサイト全体にも、ディレクトリ単位やウェブページ単位でも設定できる。

301リダイレクトのメリット

旧URLの評価(被リンクなど)をそのまま引き継げるので、SEOの観点からも301リダイレクトを設定するメリットがある。

リダイレクト設定をしないと、旧URLへのアクセス時にファイルが存在しませんというエラー(404エラー)になってしまうため、サイト/ウェブページへのアクセスチャンスを逃してしまう。もったいない。

また、SSLを導入しても導入前のURLがそのまま存続してしまうため、SEO的によろしくない。301リダイレクトでURLを正規化するのがベストだ。

とは言え、301リダイレクトはネガティブ評価もそのまま引き継ぐので、この点は要注意。ネガティブ評価を引き継ぐくらいならリダイレクトを設定しないという結論もあり得る。旧URLの評価はきっちり検証しておこう。

302リダイレクトとの違い

リダイレクトには301の他に302という設定もある。

301は恒久的な転送であるのに対し、302リダイレクトは一時的な転送だ。このため、302リダイレクトの場合は旧URLの評価は引き継がない。URL評価をもとのURLに残したまま転送先のURLをインデックスさせる設定なので、SEO的には302リダイレクトを使う意味は無い。

「いずれ近いうちに元のURLに戻すからね。インデックスする際はそのつもりでいてね」と検索エンジンに伝えるための転送設定だと思えばよい。「一時的」の定義は明確ではないが、過去にGoogleエンジニアは1~2週間程度と発言している。301と302の使い分けにあたっては、おおむねこれを目安とするのが良い。

301リダイレクトの書き方

リダイレクトは、.htaccessに転送ルールを書き込むことで設定できる。
レンタルサーバによっては.htaccessを使えないこともあるようなので要チェック(私は.htaccessが使えないレンタルサーバに出くわしたことがないのだが…。)

具体的な書き方をケースごとにまとめてみよう。

SSLを導入して、httpからhttpsに恒久的にリダイレクトする

変更前URL: http://example.com
変更後URL: https://example.com

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

<各行の解説>
1行目: URLの書き換え処理を有効にする
2行目: 書き換え条件は、HTTPSが有効でない場合
3行目: 書き換え規則は、https://example.com/に転送する[恒久的転送、適用ルール終了]

特定のページから特定のページへ恒久的にリダイレクトする

変更前URL: http://example.com/old_page.html
変更後URL: http://example.com/new_page.html

RewriteEngine on
RewriteRule ^old_page.html$ http://example.com/new_page.html [R=301,L]

<各行の解説>
1行目: URLの書き換え処理を有効にする
2行目: 書き換え規則は、old_page.htmlをhttp://example.com/new_page.htmlに転送する[恒久的転送、適用ルール終了]

複数のページについて転送設定する場合は、2行目を参考にして3行目、4行目と追記すればよい。RewriteEngine onはURL書き換え処理を有効にするという宣言なので、繰り返し記述する必要はない。

特定のディレクトリから特定のディレクトリに恒久的にリダイレクトする

変更前URL: http://example.com/old_dir/
変更後URL: http://example.com/new_dir/

RewriteEngine on
RewriteRule ^old_dir(.*)$ /new_dir$1 [R=301,L]

<各行の開設>
1行目: URLの書き換え処理を有効にする
2行目: 書き換え規則は、old_dirを/new_dirに転送する[恒久的転送、適用ルール終了]

<注意>
URLのディレクトリ部分だけを書き換える処理なので、old_dir配下のファイル名とnew_dir配下のファイル名が異なる場合には404エラー(ファイル存在せず)となるので注意すること。新旧ディレクトリ内のファイル名が同一でディレクトリ名称だけが変わる場合にはこの書き方でOK。

www.あり/なしの統一(URLの正規化のひとつ)

同じコンテンツが複数のURLで表示されることがある。例えば、http://example.com/とhttp://www.example.com/で同じサイトトップページが表示されるということ。

しかし、www.のあり/なしを検索エンジンはそれぞれ異なるページとして認識するため、ページに対する評価が分散してしまう可能性がある。「このページの正しいURLはこれですよ」と統一することを「URLの正規化」と呼ぶ。URLを正規化することで検索エンジンの混乱(?)を回避でき、ページ評価も統一できる。

www.あり/なしはURL正規化のひとつの例で、他にもいくつかのパターンがある。例えば、http://example.com/とhttp://example.com/index.htmlなど。正規化については、別のページで詳しく説明する(予定)。

www.ありに統一する方法

http://example.com を

に統一

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(example\.com)(:80)? [NC]
RewriteRule ^(.*) http://www.example.com/$1 [R=301,L]

<各行の解説>
1行目: URLの書き換え処理を有効にする
2行目: 書き換え条件は、example.com のhttp通信の場合(なお、大文字小文字は区別せず)
3行目: 書き換え規則は、http://www.example.com に転送する[恒久的転送、適用ルール終了]

<正規表現について(バックスラッシュ)>
「正規表現」は文字列の集合を一つの文字列で表現する方法で、メタ文字を使って…(ってチンプンカンプンだな)。

ざっくりいうと、( )内のドメインを「エグザンプル ドット コム」と認識させるためにドットの前にバックスラッシュ(\)を入れなければならないということ。
「.(ドット)」は正規表現のメタ文字として「任意の1文字」を表すという使われかたもする文字。
なので、例えば、
/こんにち./ と書くと、
こんにちは
こんにちわ
こんにちも
などを表してしまう。
これを回避するために、( )内のドメインの「ドット」の前にバックスラッシュを入れるというわけ。

<書き換え条件のオプション NC>
2行目末尾の[NC]は、No Case(大文字小文字を区別しない)という条件のこと。

www.なしに統一する方法

http://www.example.com を

に統一

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.example\.com)(:80)? [NC]
RewriteRule ^(.*) http://example.com/$1 [R=301,L]

<各行の解説>
1行目: URLの書き換え処理を有効にする
2行目: 書き換え条件は、www.example.com のhttp通信の場合(なお、大文字小文字は区別せず)
3行目: 書き換え規則は、http://example.com に転送する[恒久的転送、適用ルール終了]

バックスラッシュとNCについては、上述の通り。

まだまだいろいろありますが、とりあえず今日の備忘録はここまで。

タイトルとURLをコピーしました