ネットサービスとかGoogleとか豆知識とか。

Index > SEO > .htaccessでパラメータつきのURLをパラメータなしのURLにリダイレクトする方法
SEO
2011年08月28日 18:49

.htaccessでパラメータつきのURLをパラメータなしのURLにリダイレクトする方法

  • このエントリーをはてなブックマークに追加
  • ... PV
スポンサード リンク

最近よくGoogleアラートで見覚えのないページが通知されてきていました。具体的には、このブログのトップページのURLに更新日時がパラメータ(クエリ)としてくっついたものです。

(例) http://blog.fkoji.com/?08271006

こんなURLをこのブログからリンクさせた記憶はなく、アクセスログを調べてみると、とあるサイトからこのパラメータつきのリンクが貼られていることが分かりました。

ただのbotからのアクセスなら構わないのですが、サイトからリンクされているゆえにGooleがインデックスしてしまい、重複コンテンツとなってしまいちょっと困ります。

そこで.htaccessを使ってパラメータなしのURLにリダイレクトさせることにしました。

参考にしたページはこちら。

» .htaccess hack: remove query strings from URLs

具体的には次のようにしました。この例では、パラメータが8桁の数字だった場合に限って、パラメータなしにリダイレクトさせています。

RewriteEngine on
RewriteBase /
RewriteCond %{QUERY_STRING} ^\d\d\d\d\d\d\d\d$
RewriteRule ^(.*)$ /$1? [R=301,L]

4行目で「$1」の直後に「?」をつけるのがミソで、こうすると「?」だけ残るかと思いきや「?」も取り除かれたURLにリダイレクトされます。

もしもパラメータの形式によらずにパラメータなしのURLにリダイレクトさせたいなら3、4行目は次のように書きます。

RewriteCond %{QUERY_STRING} !=""
RewriteRule ^(.*)$ /$1? [R=301,L]

ただしこの書き方では、ページングで「?page=」などのパラメータを利用していた場合などにアクセスできなくなってしまい、あまり推奨できません。

そういう場合には実際に利用しているパラメータだけ対象外とすることもでき、たとえば次のように書きます。

RewriteCond %{QUERY_STRING} !=""
RewriteCond %{QUERY_STRING} !^page=.*
RewriteRule ^(.*)$ /$1? [R=301,L]

しかし、サイト内で利用されている全てのパラメータを把握するのはなかなか難しいので、なるべくリダイレクトの対象にしたいパラメータに特化して、RewriteCondを記述するほうが望ましいでしょう。