htaccess機能を使ってURLからパラメータを削除する
アクセス解析を見ていると、このサイトのページのURLに「?」の付いたパラメータ(クエリ)があるのに気がつきました。全く身に覚えのないものですが、これがある為にページが表示されないことがあります。また、検索エンジンに重複ページとして認識されるおそれがあります。
URLパラメーターとは
URLパラメーターとは、URLの後ろに「?****」などの文字列がついたものです。 CGI楽天 やPHPで書かれたページによく使われています。
コンピュータプログラムによって、URLのパラメーターを使ってネット上に動的なページを作成することがあります。ネットユーザーの要求によってプログラムが自動的にウェブページに表示する仕組みで、各種の申し込みフォームやアンケートのようなページでよく利用されています。
付加されたURLパラメーターの弊害
外部のサイトからパラメータ付きのリンクが張られていると、それをクリックして私のページに来ると、ページが表示されないことがあります。また、ページが表示されてもパラメーターまで表示されて、検索ロボットにパラメータ付きのリンクとみなされるおそれがあります。
これは重複コンテンツと言って、アドレスが違うのに同じページが表示されることとなります。こうなるとSEOでは不利になります。そこでhtaccessファイルを使ってパラメータのないURLにリダイレクトさせることにしました。
htaccessを使ってPHPファイルの場合のみパラメーターを削除する
次のようなhtaccessファイルでPHPファイルのURLのパラメーターを削除してみました。元々私の作ったページにはパラメーターが付いていませんのでこれで問題はありません。しかし、CGIで作った掲示板にはパラメーターが付いていますので、これを除外する必要があります。
RewriteEngine on RewriteCond %{THE_REQUEST} ^.*\.php RewriteCond %{QUERY_STRING} !="" RewriteRule ^(.*)$ /$1? [R=301,L]
これを実現する為に、2行目でPHPファイルだけに限定しています。3行目で、「%{QUERY_STRING}」を使ってパラメータがあるかどうかを調べています。4行目でパラメータを全て削除しています。「/$1?」とすると、「?」が付いてしまいそうですが、「?」も含めて削除してくれます。
htaccessを使ってPukiWikiのFrontPageのパラメータを削除する
PukiWikiを使っていると、ページを指定しない場合は、デフォルトでURLに次のようなパラメータが付いてきます。
http://hogehoge.jp/index.php?FrontPage
この「index.php」は、「pukiwiki.ini.php」の設定によって消すことが可能ですが、「?FrontPage」を消すのは普通ではできません。そうすると次のように様々なURLで同じページが表示できてしまいます。また、「index.php」を消す設定にしてもPukiWikiの内部ではFrontPageを表示させるには、次の1番目のアドレスしか使えません。
http://hogehoge.jp/?FrontPage
http://hogehoge.jp/index.php?FrontPage
http://hogehoge.jp/index.php
http://hogehoge.jp/
これではSEO上不利なので、.htaccessを使ってPukiWikiのFrontPageのパラメータを削除してみました。また、下記のように「index.php」にアクセスがあった時にトップページのアドレスを指定しない方法も適用します。そうするとアドレスは上記の一番下の短いURLに統一されます。
RewriteEngine on # Remove '?FrontPage' RewriteCond %{QUERY_STRING} ^FrontPage$ RewriteRule ^(.*)$ /$1? [R=301,L]
これを実現する為に、3行目で「%{QUERY_STRING}」を使ってクエリストリングに「FrontPage」が付いているものだけに限定しています。4行目でパラメータを全て削除しています。「/$1?」とすると、「?」が付いてしまいそうですが、「?」も含めて削除してくれます。
htaccessを使ってトップページのアドレスを指定しない方法も適用
トップページのアドレスは普通index.htmやindex.phpのようになっていて、ホームページのアドレスは http://hogehoge.jp/と書いて、indexファイルを指定しないのが普通です。この方法だとindex.htmからindex.php に変更しても、ホームページのアドレスを変更する必要はありません。
しかし、インデックスファイルを指定していなくても、検索にインデックスファイルを含んだページが登録されてしまうことがあります。SEOの点ではこれは好ましくないので、htaccessを使ってトップページのアドレスをindexファイルの無いものに統一しましょう。例えば、 http://hogehoge.jp/index.phpにアクセスがあった場合にhttp://hogehoge.jp/に301で永久転送する方法です。
なお、これは他の設定によっては無限ループの可能性がありますので注意してください。ファイルの拡張子が、index.php または index.htm または index.html の場合は、ファイル名を取り去ってから、この内どれかのファイルがあれば、そこにアクセスします。条件はきびしく指定した方が間違いがありません。
RewriteEngine on RewriteCond %{THE_REQUEST} (^.*/index\.php|^.*/index\.htm) RewriteRule ^(.*)index\.(php|htm) /$1 [R=301,L]
いずれの場合もこれができるのは、パラメータが付いていても付いていなくても、両方でアクセスできる場合か、パラメータが付いている場合はアクセスできなくて、パラメータ無しの場合はアクセスできる場合に限られます。