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リダイレクトを使う意味は無い。
302リダイレクトは、「いずれ近いうちに元のURLに戻すからね。インデックスする際はそのつもりでいてね」と検索エンジンに伝えるための転送設定だと思えばよいです。
「一時的」の定義は明確ではありませんが、過去にGoogleエンジニアは1~2週間程度と発言しています。
301と302の使い分けにあたっては、おおむねこれを目安とするのが良いでしょう。
301リダイレクトの書き方
リダイレクトは、.htaccessに転送ルールを書き込むことで設定できます。
レンタルサーバによっては.htaccessを使えないこともあるようなので要チェックです。
具体的な書き方をケースごとにまとめますね。
SSLを導入して、httpからhttpsに恒久的にリダイレクトする(www有り無しのいずれかで統一)
常時SSL化 (https)を導入したら、httpからhttpsへの301リダイレクトを設定しましょう。
同時に、URLの正規化(wwwありまたはwwwなしでの統一)も設定するのが良いです。
URLを明示せずにリダイレクトを設定する:httpをhttpsにして、wwwありで統一
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
URLを明示せずにリダイレクトを設定する:httpをhttpsにして、wwwなしで統一
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ https://%1%{REQUEST_URI} [R=301,L]
特定のページから特定のページへ恒久的にリダイレクトする
変更前URL: http://example.com/old_page.html
変更後URL: http://example.com/new_page.html
RewriteEngine on
RewriteRule ^old_page.html$ /new_page.html [R=301,L]
複数のページについて転送設定する場合は、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]
www.あり/なしの統一(URLの正規化)
同じコンテンツが複数のURLで表示されることがあります。
例えば、http://example.com/とhttp://www.example.com/で同じトップページが表示されることありますよね。
この状態は良くありません。
検索エンジンは、www.のあり/なしをそれぞれ異なるページとして認識するため、ページに対する評価が分散してしまう可能性があります。
URLをwwwありまたは無しで統一(正規化)することで、検索エンジンを混乱(?)させることなく、ページ評価も統一できます。
www.ありに統一する方法
変更前URL: http://example.com を
変更後URL: http://www.example.com に統一
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
<正規表現について(バックスラッシュ)>
「正規表現」は文字列の集合を一つの文字列で表現する方法で、メタ文字を使って…(ってチンプンカンプンだな)。
ざっくりいうと、( )内のドメインを「エグザンプル ドット コム」と認識させるためにドットの前にバックスラッシュ(\)を入れなければならないということ。
「.(ドット)」は正規表現のメタ文字として「任意の1文字」を表すという使われかたもする文字。
なので、例えば、
/こんにち./ と書くと、
こんにちは
こんにちわ
こんにちも
などを表してしまう。
これを回避するために、( )内のドメインの「ドット」の前にバックスラッシュを入れるというわけ。
<書き換え条件のオプション NC>
2行目末尾の[NC]は、No Case(大文字小文字を区別しない)という条件のこと。
www.なしに統一する方法
変更前URL: http://www.example.com を
変更後URL: http://example.com に統一
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [R=301,L]
以上 .htaccess で 301リダイレクトを記述する方法の説明でした。
ご参考になれば幸いです♪