2008-11-14 10:02:43
URL統一によるSEO② -mod_rewrite編-
テーマ:SEO
同一ページが複数のURLでインデックスされてしまうという現象はしばしば起こます。
たとえば、http://www.example.com/でインデックスさせたいのに、
① http://www.example.com/index.html
や
② http://example.com/
でもインデックスされてしまうという現象です。
①のように、index.html付きと/切りの両ページがインデックスされてしまう場合、
現在は検索エンジンの進化により同一ページとしてみなされることが多いようですが、
まだ完璧ではないようです。
また、②のようにwww付きとwww無しの両ページがインデックスされてしまうと、
現在の検索エンジンでは別URLとして認識されてしまいます。
これらは、以前の記事 でも紹介したように、統一する必要があります。
今回は、この現象を、mod_rewrite を用いて解決する方法を取り上げます。
まず、①のindex.html付きのURLを/までに書き変える方法ですが、
このようになります。
1行目は、mod_rewriteを使うためのおまじないです。
さて、2行目ですが、
「RewriteCond」は、「ここから先は次の条件の時だけ通りますよー」という意味です。
ここでは、
に以下の条件
が適用されるということになります。
.htaccessに上記の3行だけを記述すれば、①の問題は解決してしまいます。
(URLは環境に合わせて書き換えてください)
さて、②のindex.htmlの有り・無しを統一する方法ですが、
mod_rewriteで設定しようとすると無限ループをしてしまい、
なかなか直せず苦戦している方が多いようです。
この問題も、RewriteCondが解決してくれます。
具体的な記述方法ですが、
となります。
これも、RewriteCondで「○○○/index.html」でのアクセスの時のみ
その下のRewriteRuleが適用されるようにしています。
これら2つの記述をあわせ、
と.htaccessに書けば、①、②の対策を施したサイトの出来上がりです。
もちろん、
サイト内リンクのURLを統一する
ということも、必ず行ってください。
[参照・引用]
教えて!goo
【URL統一】/index.htmlへのアクセスを /で終わるURLに
(坪 昌史)
たとえば、http://www.example.com/でインデックスさせたいのに、
① http://www.example.com/index.html
や
② http://example.com/
でもインデックスされてしまうという現象です。
①のように、index.html付きと/切りの両ページがインデックスされてしまう場合、
現在は検索エンジンの進化により同一ページとしてみなされることが多いようですが、
まだ完璧ではないようです。
また、②のようにwww付きとwww無しの両ページがインデックスされてしまうと、
現在の検索エンジンでは別URLとして認識されてしまいます。
これらは、以前の記事 でも紹介したように、統一する必要があります。
今回は、この現象を、mod_rewrite を用いて解決する方法を取り上げます。
まず、①のindex.html付きのURLを/までに書き変える方法ですが、
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(example\.com)(:80)? [NC]
RewriteRule ^(.*) http://www.example.com/$1 [R=301,L]
このようになります。
1行目は、mod_rewriteを使うためのおまじないです。
さて、2行目ですが、
「RewriteCond」は、「ここから先は次の条件の時だけ通りますよー」という意味です。
ここでは、
%{HTTP_HOST} → リクエスト時のホスト名(http://○○○/の部分)が
^(example\.com)(:80) → "exmaple.com"の時
(※"\"は「.(ドット)」の直前に必要です。)
に以下の条件
^(.*) → 全てのURLを
http://www.example.com/$1 → このURLに書き換える
($1には、アクセスしてきた"/"以降のURLが入ります)
が適用されるということになります。
.htaccessに上記の3行だけを記述すれば、①の問題は解決してしまいます。
(URLは環境に合わせて書き換えてください)
さて、②のindex.htmlの有り・無しを統一する方法ですが、
mod_rewriteで設定しようとすると無限ループをしてしまい、
なかなか直せず苦戦している方が多いようです。
この問題も、RewriteCondが解決してくれます。
具体的な記述方法ですが、
RewriteEngine On
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://www.example.com/$1 [R=301,L]
となります。
これも、RewriteCondで「○○○/index.html」でのアクセスの時のみ
その下のRewriteRuleが適用されるようにしています。
これら2つの記述をあわせ、
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(example\.com)(:80)? [NC]
RewriteRule ^(.*) http://www.example.com/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://www.example.com/$1 [R=301,L]
と.htaccessに書けば、①、②の対策を施したサイトの出来上がりです。
もちろん、
サイト内リンクのURLを統一する
ということも、必ず行ってください。
[参照・引用]
教えて!goo
【URL統一】/index.htmlへのアクセスを /で終わるURLに
(坪 昌史)




