IRORIBATA

その他あれこれ

検索ロボット対応

2008年8月8日
サイトを開設するとすぐに検索ロボットがアクセスしてきます。
IRORIBATAは検索ロボットさんに対しては、わざわざ読みやすいようにページの表示の仕方を変えてあげています。


サイトを開設して初期の頃、アクセスカウンターがぐんぐん上がりはじめました。
そんなに読む人がいるとは思えないんだがナーとHTTPサーバーのログを見ると、大半は検索ロボット(サーチエンジン)のアクセスでした。

実をいうと私もサイト検索は頻繁に利用するので、せっかくだからロボットさんに読みやすいようにしてやって上位に掲載してもらおうと思い立ちました。

検索ロボットへの対応
まず、下段の検索ロボット判定コードで検索ロボットか否かを判定します。
IPアドレス、接続ホスト名、User Agentの3つで判定しています。
これは私がアクセスログを見て都度追加してきた2008年8月現在のリストです。

ふつうの状態ではサイトの記事はフレーム、Cookie、JavaScriptを使って表示を制御しています。
これでは一部のロボットは記事ページに到達できません。(でも当初からgoogleはしっかり記事をよんでインデックスしていましたが。)

検索ロボットと判定したら、以下のようにしています。
(1) フレームを使わず、まずサイトのINDEX(ページタイトル)のみを表示。
(2) ページタイトルに通常のアクセスのURLをリンクし、そのURLでロボットには記事ページのみを表示。
(3) 拡大写真やコメントを表示しないなどの多少の表示制限。
(4) アクセスログがわかりやすいように色分け。 など。

実際にロボットにどう表示されているかは以下をクリックすると見れます。
…ただし以下のページからさらに先に進むとその先ずっと表示制限モードになります。
なるべくすぐにブラウザの「戻る」ボタンでお戻りください。
  → インデックスページ
  → このページ
でもこのページではちがいがわからないので写真の入ったページを表示させてみます。
拡大写真が表示されないのとコメント部分も表示されません。
  → 写真の入ったページ

以下検索ロボットの判定コード。つくった当初のものですが。

検索ロボット判定コード
// 検索ロボットの検出。2008年8月8日現在
// 正規表現以外の正規表現のメタ文字( ^ . \ + * ? [ ] ( ) $ など)は
// \でエスケープすること。
function bot_check()
{
  $bot_ip_list = array(
    '^66\.35\.255\.', // TrendMicro
    '^66\.180\.82\.', // TrendMicro
    '^128\.241\.20\.', // TrendMicro
    '^150\.70\.84\.', // TrendMicro
  );
  $bot_host_list = array(
    'asianetcom\.net$',
    '\.ask\.com$',
    'copilot\.thunderstone\.com$',
    '\.crawl\.yahoo\.net$',
    'crawl11\.pub\.colo-fo\.brn1\.verisign\.com$',
    'cuill\.com$',
    '\.exabot\.com$',
    '\.googlebot\.com$',
    '\.inktomisearch\.com$',
    '\.irl\.cs\.tamu\.edu$',
    'msnbot\.msn\.com$',
    'picsearch\.com$',
    '\.pingdom\.com$',
    'search\.tnz\.yahoo\.co\.jp$',
    '\.search\.live\.com$',
    '\.teoma\.com$',
    '\.yahooresearchcluster\.com$',
  );
  $bot_agent_list = array(
    'Ask Jeeves/Teoma',
    'Baiduspider\+',
    'BecomeJPBot',
    'bot/',
    'bot@bot\.bot',
    'compatible; Yahoo! Slurp;',
    '/~crawler/',
    '\(\+Empirius bot\)',
    'Exabot/',
    'Googlebot/',
    'ichiro/',
    'IRLbot/',
    'libwww-perl/',
    'Microsoft-WebDAV-MiniRedir/',
    'MJ[0-9\.]+bot',
    'Mnogosearch',
    'msnbot',
    'Netcraft Web Server Survey',
    'PEAR-crawler',
    'Pingdom\.com/tools',
    'Pingdom GIGRIB',
    'psbot/',
    'SurveyBot/',
    'Shim-Crawler',
    'Sogou Orion Spider/',
    'TMCrawler',
    'Twiceler',
    'Wget/',
    'Y!J-DSC',
    'Y!J-VSC',
    'Y!J-PSC',
    'Y!J-NSC',
    'Y!J-SRD',
    'Yeti/',
    'yetibot@naver\.com,',
    'YodaoBot/',
  );

  $ip = $_SERVER['REMOTE_ADDR'];
  $host = isset($_SERVER['REMOTE_HOST'])?$_SERVER['REMOTE_HOST']:'';
  $agent = isset($_SERVER['HTTP_USER_AGENT'])?$_SERVER['HTTP_USER_AGENT']:'';

  foreach($bot_ip_list as $bot_ip)
  {
    if(ereg($bot_ip, $ip))
    {
      return(TRUE);
    }
  }
  if($host)
  {
    foreach($bot_host_list as $bot_host)
    {
      if(ereg($bot_host, $host))
      {
        return(TRUE);
      }
    }
  }
  if($agent)
  {
    foreach($bot_agent_list as $bot_agent)
    {
      if(ereg($bot_agent, $agent))
      {
        return(TRUE);
      }
    }
  }
  else
  {
    return(TRUE);
  }
vreturn(FALSE);
}