Hatena::ブログ(Diary)

diaの備忘録

2010年06月03日

検索エンジンがどうやってクリック履歴を追っているのか調べてみた

上記のグリモンを実装するために、検索エンジンがどうやってクリック履歴を追っているか調べてみました。まずは、一般的な検索の流れは以下のとおりです(よね)。

簡略化したフロー

  1. ユーザが好きなキーワードで検索する
  2. aタグの一覧が表示される
  3. aタグの一覧には何らかのトレースする仕組みが入っている <- ここがわからない
  4. aタグからリンク先に飛ぶ
  5. (これの繰り返し)

HTML+JavaScriptの勘所

接続ログをみてみると、だいたいの勘所が見えてきました。下記に列挙してみます。

Google
<a onmousedown="return clk(this.href,'','','res','1','','0CBgQFjAA')" class="l" href="http://d.hatena.ne.jp/DianthuDia/"><em>diaの備忘録</em></a>
<!-- 接続しにいくURLは
http://www.google.co.jp/url?sa=T&source=web&ct=res&cd=1&ved=0CBgQFjAA&url=http%3A%2F%2Fd.hatena.ne.jp%2FDianthuDia%2F&ei=fvUGTJX1LsuXcZe91JUO -->
window.clk = function (e, f, g, k, l, b, m)
{
    if (document.images)
    {
        var a = encodeURIComponent || escape, c = new Image, h = window.google.cri++;
        window.google.crm[h] = c;
        c.onerror = (c.onload = (c.onabort = function ()
        {
            delete window.google.crm[h]
        }));
        if (b && b.substring(0, 6) != "&sig2=") {
            b = "&sig2=" + b;
        }
        c.src = ["/url?sa=T", "\x26source\x3dweb", f ? "&oi=" + a(f) : "", g ? "&cad=" + a(g) : "", "&ct=", 
        a(k || "res"), "&cd=", a(l), "&ved=", a(m), e ? "&url=" + a(e.replace(/#.*/, "")).replace(/\+/g, 
        "%2B") : "", "&ei=", "fvUGTJX1LsuXcZe91JUO", b].join("")
    }
    return true;
};
Bing
<a onmousedown="return si_T('&amp;ID=SERP,5035.1')" href="http://d.hatena.ne.jp/DianthuDia/"><strong>diaの備忘録</strong></a>
<!-- 接続しにいくURLは
http://www.bing.com/fd/ls/GLinkPing.aspx?IG=7707d14150bf4d3997e7c7b8385f22df&ID=SERP,5035.1 -->
function si_T(a)
{
    if (document.images) {
        _G.GPImg = new Image;
        _G.GPImg.src = _G.gpUrl + 'IG=' + _G.IG + a;
    }
    return true;
}

どちらもImgタグのsrcにトレース用のURLをセットして、強制的にブラウザにリクエストを投げさせているみたいです。なるほど、これならばユーザーに気づかれずにトレースできますね!

Yahoo! Japan

<a href="http://wrs.search.yahoo.co.jp/;_ylt=A3yTKijU.wZMm4YAqDWDTwx.;_ylu=X3oDMTEyNTZucDQ1BHBvcwMxBHNlYwNzcgRzbGsDdGl0bGUEdnRpZANqcDAwMDU-/SIG=120h03u8f/EXP=1275612500/*-http%3A//d.hatena.ne.jp/DianthuDia/20081114/p1" >
イヤホンの巻き方 - <b>dia</b><b></b><b>備忘録</b></a>

のようにリダイレクタをはさんでいるようです。hrefが検索の度に変わると、先程の記事に記載したように訪問済みかどうか判断出来ません。私のスクリプト はこのYahoo! Japanの仕様を、他のエンジンのやり方を参考に変更したものです。

トラックバック - http://d.hatena.ne.jp/DianthuDia/20100603/1275529732