トップページ以外のリンクを禁止したい、というサイトオーナーがいるだろう。
今回は以下の構成のサイトでディープリンクを技術的に禁止する対策を施してみよう。なおPHPやCGI、Pyhoonなどは一切使えない、robot.txtも作成する権限がないこととする。
/home/public_html/index.html
/main
/doc
/contact
/link
public_html直下にはindex.html以外は置かず、その他全てのコンテンツは各フォルダ内に格納したものとしよう。
作業の目的はおおまかに分けて2つ。検索エンジン対策、それから利用者に対する対策の両方とることになる。
まず検索エンジンのクローラの対策。通常、検索エンジンはクローラなどと呼ばれるロボットを使ってWEB上のページを巡回している。
まず、metaタグにロボットの動作を制御する内容を盛り込む(※タグの最初を全角記号にしている)。
トップページは
<META NAME=\"ROBOTS\” CONTENT=\"INDEX,NOFOLLOW\">
その他のページでは
<META NAME=\"ROBOTS\” CONTENT=\"NONE\">
<META NAME=\"ROBOTS\” CONTENT=\"NOINDEX,NOFOLLOW\">
これはトップページだけのアクセスを許可して、トップページにあるリンクを辿ってのクローラのアクセスは禁止する、という意味だ。
続いてトップページ以外のページではアクセス自体を禁止している。
しかしこのmetaタグだけでは実はあまり効力を持たない。というのもGoogleやYahoo!のような大手サイトはこのmetaタグをきちんと読んでくれるのだが、NeverやBaiduなどの「行儀が悪い」検索エンジンはこれをまったく読まずにサイトに侵入してくるからだ。
そのため、警告を無視して侵入して来たエンジンをエラーページへ誘導させるための手順も書いておこう。.htaccessを使用する。
まずはおまじないとして以下の記述をする。
<Files ~ \"^\\.ht\">
deny from all
</Files>
これは「.ht」からはじまるファイル名のファイルへのアクセスを禁止するというもの。
.htaccessの中身が閲覧されることはセキュリティ的に問題があるからだ。今回の例では、アクセスを禁じたつもりが、悪意のあるクローラにとってはどこに大事なコンテンツが隠されているか教えることにもなる。
次に、すべてのアクセス者のUserAgentを取得して、クローラと特定されるアクセスを弾く。
SetEnvIf User-Agent \"crawl\” deny_user
SetEnvIf User-Agent \"search\” deny_user
SetEnvIf User-Agent \"bot\” deny_user
SetEnvIf User-Agent \"Googlebot\” deny_user
SetEnvIf User-Agent \"Slurp\” deny_user
SetEnvIf User-Agent \"msnbot\” deny_user
SetEnvIf User-Agent \"TMCrawler\” deny_user
SetEnvIf User-Agent \"yodao\” deny_user
SetEnvIf User-Agent \"snapbot\” deny_user
SetEnvIf User-Agent \"OutfoxBot\” deny_user
SetEnvIf User-Agent \"sproose\” deny_user
SetEnvIf User-Agent \"never\” deny_user
SetEnvIf User-Agent \"IRLbot\” deny_user
SetEnvIf User-Agent \"Baiduspider\” deny_user
order allow,deny
allow from all
deny from env=deny_user
ErrorDocument 403 http://mysite/index.html
このファイルを、それぞれcontents,doc,contact,linkのフォルダ内に置く。
ちなみに、この方法もまだカンペキではない。というのも、一部のクローラはUserAgentの偽装などの手段を用いてサイトにアクセスしてくるからだ。
また、そういったクローラの対策として多くのwebmasterがIPやホストを利用してアクセスを制限する方法をとるため、新規のIPを取得してクロールしに来るロボットもいる。
カンペキを目指すのなら毎日クローラの情報をチェックしてUserAgentを追加してく(あるいはUserAgentを隠しているものに対してはIPやホスト単位で対策をする)必要が、これでGoogleやYahoo!からのアクセスはカンペキに防げるとだろう。
また、最後の行では、拒否されたユーザーはトップページへリダイレクトされるように設定しているので、トップページに「ディープリンク禁止」の旨を書いておくと良いだろう。(※注意:この方法をとった場合、一部のクローラは何度もトップページ→違うページ→トップページという順番を巡回するかもしれない。アクセスログをよく読み、巡回が起こっている場合は別のファイルへリダイレクトする必要がある)
次は利用者への対応だ。こちらはJavaScriptで対策をしてみよう。
if( document.referrer.length != 0 ) {
if(document.referrer.indexOf(\"mysite.com\") == -1){
alert(\"********************************************************** \\n\\n\” + \"Error !! \\n\\n\\n\” + \"当サイトはトップページ以外のリンク(直リンク、ディープリンク)を禁止しています。\\n\\n\\n \” + \"直リンクしているサイトの管理人さんにこのエラーメッセージを教えてあげてください。\\n\\n \” + \"トップページへ自動的に移動します。 \\n\\n\” + \"**********************************************************\");
location.href = \"http://mysite/index.html\”;
}
}
このスクリプトはリファラに他サイトのURLが含まれているアクセスに警告を出し、トップページへ誘導する、というもの。ウイルス対策ソフトがリファラーを隠す問題も考慮している。
実行例はこちら。外部サイトからこのURLへリンクを貼ったとき、アラートは表示される。内部リンクの挙動確認はこちらから。
JavaScriptは携帯に対応していないが、PHPやCGIが使えないためディープリンクができてしまうのだが、PCについてはこれでカンペキだろう。
以上のようにすれば不愉快なディープリンクを防ぐことができる。
ちなみにこのサイトはリンクフリー、ディープリンクも検索エンジンも大歓迎である。好きなところでリンクしてください。




