Perl、PHPでGooglebotを一定の確率ではじく
2007-05-01-2
[Programming]
「動的生成ページへのGooglebot(Googleのクローラ)のアクセス数
が多すぎてサーバに負荷がかかりすぎる問題」に悩まされています。
robots.txt の Crawl-delay は効かないし[2007-03-21-1]、
Googleウェブマスターツールでクロール率を低く設定しても
ある回数よりも下がらないしで困っていました。
アクセス禁止にすれば完全解決なのですが、
それにより検索されなくなるのはファインダビリティが下がって嫌なので、
とりあえずランダムで 503 を返すことで対処しました。
ときどき503が出ることにより、しばらくするとGooglebotが
「サーバが混んでいるんだな」と思ってくれるみたいで、
結果としてクローラのアクセス数が激減、かつ、検索結果からの
アクセス数はそんなに減ってない!
たまたまかもしれないけど、ツイてる!
Perl ではこんな感じに書きます:
PHP ではこんな感じ(ファイルの先頭に):
動作確認は下記コマンドで。
(ref. http://blog.livedoor.jp/dankogai/archives/50672113.html)
が多すぎてサーバに負荷がかかりすぎる問題」に悩まされています。
robots.txt の Crawl-delay は効かないし[2007-03-21-1]、
Googleウェブマスターツールでクロール率を低く設定しても
ある回数よりも下がらないしで困っていました。
アクセス禁止にすれば完全解決なのですが、
それにより検索されなくなるのはファインダビリティが下がって嫌なので、
とりあえずランダムで 503 を返すことで対処しました。
ときどき503が出ることにより、しばらくするとGooglebotが
「サーバが混んでいるんだな」と思ってくれるみたいで、
結果としてクローラのアクセス数が激減、かつ、検索結果からの
アクセス数はそんなに減ってない!
たまたまかもしれないけど、ツイてる!
Perl ではこんな感じに書きます:
if ($q->user_agent() =~ /googlebot/i and rand(1) < 0.5) { print qq(Status: 503 Server Temporary Unavailable\n\n); exit; }
PHP ではこんな感じ(ファイルの先頭に):
<?php if (ereg("Googlebot", $_SERVER["HTTP_USER_AGENT"]) && rand(0,9) < 5) { header($_SERVER['SERVER_PROTOCOL'] . " 503 Service Temporary Unavailable"); } ?>
動作確認は下記コマンドで。
(ref. http://blog.livedoor.jp/dankogai/archives/50672113.html)
lwp-request -mHEAD -H 'User-Agent: Googlebot' http://...
この記事に言及しているこのブログ内の記事