GoogleBotがどんなリンクを辿るのか調べてみた

仕事で検索エンジンのクローラーの挙動について話題になったことがあったので、興味本位に調べてみた。

実験内容は、

「どんな書き方をすると、検索エンジンのクローラーはリンクを辿って次のページをGETするのか?」

やり方は簡単で、いろんなパターンの書き方をしたaタグを並べておいて、GoogleBotにそのページだけ食べさせる。
access_logやインデックスの結果から、どこが辿られたのかを調べる。
# 変なもの食べさせてごめんなさい。消化不良起こさないでね。。。

結果は・・・

<a href="url">ほげほげ</a>

辿られる。これは当然。

<a href="url" rel="nofollow">ほげほげ</a>

辿られない。nofollowは見てくれるんだね。

<a href="javascript:window.open('url', '_blank');void(0);">ほげほげ</a>

辿られる。・・・え!?

<a href="javascript:void(0)" onclick="window.open('url', '_blank');return false;">ほげほげ</a>

辿られる。・・・まじで!?


というわけで、aタグにjavascriptのコードを書いてもGoogleBotはとりあえず読みにくる。
ただ、

  • hoge.html(ファイル名だけ) → 辿られない
  • /foo/hoge.html(/から書いてた場合) → 辿られる
  • http://~/foo/hoge.html(URLをフルで書く) → 辿られる
  • rel="nofollow"をつける → 辿られない

となったので、/が入ってるかどうかでURLかも?判断するみたい。
window.openじゃなく、location.href=でやっても同様の結果だったよ。

あと、こんな意地悪もしてみたけど

<a href="javascript:void(0)" onclick="window.open(['','foo','hoge.html'].join('/'),'_blank');return false;">ほげほげ</a>

さすがにこれは辿らないみたい。
URLをhttp:から書いても辿られなかった。

てことは、JSを動かすわけではないんだね。
hrefだけでなく、onclickも見るって感じ。
検索結果に画面をプレビューする機能ではJSを動かした結果を出していたので、そっちのBotはJSがきいてるみたい。
通常の検索用Botは動かしはしないね。


・・・あれ?じゃあ、さ。
↓JSでこんな関数を書いといてさ

function openHoge(path)
{
  var url = '/foo' + path;
  window.open(url, '_blank');
}

↓こういうHTMLにしたらさ

<a href="javascript:void(0)" onclick="openHoge('/bar/hoge.html');return false;">ほげほげ</a>

もしかして、 /bar/hoge.html を辿りに来るのか!?

・・・ありえる・・・これはよくないなー。。。
もうちょっと実験してみようかな。