RSSリーダーで購読する




フィードメーター - CyberAgent SEO Information


track feed




あわせて読みたいブログパーツ

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を/までに書き変える方法ですが、

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に



(坪 昌史)

Amebaおすすめキーワード