はてなブックマークボタンが行動情報の取得をしている、という話

この辺の話でしょうか。

マイクロアド版とオプトアウト版のdiffを取ると、こんな感じ。

$ diff bookmark_button.js bookmark_button_wo_al.js
745,755d744
<
< (function () {
<     var domains = 'www.toyokeizai.net member.toyokeizai.net excite.co.jp exblog.jp mainichi.jp jp.msn.com *.jp.msn.com itmedia.co.jp bizmakoto.jp atmarkit.co.jp eetimes.jp ednjapan.cancom-j.com ednjapan.com barks.jp www.asahi.com *.asahi.com jp.techcrunch.com japanese.engadget.com jp.autoblog.com celebrity.aol.jp www.nikkei.com *.nikkeibp.co.jp japan.cnet.com japan.zdnet.com builder.japan.zdnet.com japan.gamespot.com www.re-source.jp www.yomiuri.co.jp groupon.jp';
<     var pattern = '^(?:' + domains.replace(/\./g, '\\.').replace(/\*\\\./g, '(?:[^.]+\\.)+').replace(/\s+/g, '|') + ')$';
<     if (isLocal || !/^https?:$/.test(location.protocol) || new RegExp(pattern).test(location.hostname)) return;
<     window.mad_partner_id = '6';
<     var script = E('script', { type: 'text/javascript', src: '//send.microad.jp/js/conv0000.js' });
<     var anchor = document.getElementsByTagName('script')[0] || document.getElementsByTagName('head')[0].firstChild;
<     anchor.parentNode.insertBefore(script, anchor);
< })();
<

で、これは何をやってるのかというと。

  • var domains : 行動情報の取得対象外となるホスト一覧
  • var pattern : domainのリストを正規表現に変換
  • if (isLocal ... : はてなのテスト環境、HTTP(S)以外のプロトコル、取得対象外ホストかどうかの判定。いずれかに該当すれば行動情報は取得しない
  • var script, anchor : scriptタグ、なければheadタグの上(最初)に http://send.microad.jp/js/conv0000.js を埋め込む

ちなみに isLocal の判定はこの辺。

var isLocal = /\.hatena\.ne\.jp:3000$/.test(location.host);

で、conv0000.js では何をやってるのかというと。

var mad_host="http://track.send.microad.jp";
if(document.location.protocol=="https:"){
	mad_host="https://send.microad.jp";
}
var var_client_id='';
if (typeof(mad_client_id) != 'undefined') {
	var_client_id="&clientid="+mad_client_id;
}

var var_group_id='';
if (typeof(mad_group_id) != 'undefined') {
	var_group_id="&group="+mad_group_id;
}

var var_partner_id='';
if (typeof(mad_partner_id) != 'undefined') {
	var_partner_id="&partnerid="+mad_partner_id;
}

var var_user_key='';
if (typeof(mad_user_key) != 'undefined') {
	var_user_key="&userkey="+mad_user_key;
}

var var_demographics='';
if (typeof(mad_demographics) != 'undefined') {
	var_demographics="&demographics="+mad_demographics;
}

var var_attributes='';
if (typeof(mad_attributes) != 'undefined') {
	var_attributes="&attributes="+mad_attributes;
}

var encode_url="prereferrer="+escape(document.referrer);
var mad_query=encode_url+var_client_id+var_group_id+var_partner_id+var_user_key+var_demographics+var_attributes;

var mad_url=mad_host+"/track.cgi?"+mad_query;
var mad_target=new Image();
mad_target.src=mad_url;

最近のWeb技術にはさっぱり疎いのですが、IMGタグにCGI埋め込みとかWeb1.0時代のTipsが現在も使われてるんですね。

mad_attributes というのが良く分からないけど、その他のmad_*は特にきな臭い感じではなさそう。あと、その他に送信されるのはreferrerのようです。

はてなブックマークボタンは、2011年9月1日より興味関心に基づく広告の掲載を目的とした行動情報の取得(個人情報以外)をしています。
この行動情報は株式会社マイクロアドのプラットフォームを利用し、Cookie を用いて取得されます。

はてなブックマークボタンを表示する - はてなブックマークヘルプ

cookie って document.cookie で取得するんじゃなかったっけ?最近は window.* にエクスポートされるようになってるのだろうか。javascriptはよく分からないな。それとも、javascriptじゃなくて track.cgi 側でやってるのかな?

ともかく重要なのは、bookmark_button.js を読み込んでるページを見た時点で影響があるということ。はてブを使わなきゃおっけー、とか思ってる人は注意したほうがいいんじゃないかな。まあ知らんけど。

追記

現在はマイクロアドへの行動情報の提供自体を廃止しているようです。

機能自体を停止しちゃうと行動情報の提供そのものが悪だと思われちゃう可能性があるなあ。ま、自分としては、しないに越したことはないけど。広告が最適化されようとも関係ないしね。