【ITP対応】サードパーティCookie利用の自前アクセス解析でITP対策した件

2017年、広告業界を震撼させたiOSのITP。要するにサードパーティCookieを実質ブロックするものですが、自前のアクセス解析でもろに影響が出ていたので対応してみました。

ITPのトラッカー判定について簡単に言うと…

まずITPのトラッカー判定はドメイン単位で行われています。仕様はいろいろまとまっていますが、どうやら普通の個人ブログであっても回避が難しい印象でした。

・判定対象とするドメインのiframeが設置されるドメイン数
・判定対象とするドメインからのリダイレクト先ドメイン数
・判定対象とするドメインのリソース(計測タグなど)のドメイン数
(※これらは何れもリソースロードの度に更新される)

(中略)リソースのドメイン数が4に達した時点で、トラッカー判定される
https://www.mm-lab.jp/report/itp_specification_and_behavior

例えば、「YouTube埋め込み」「Twitter埋め込み」「Googleアナリティクス(などのアクセス解析)」「Googleアドセンス(などの広告枠)」を設置するだけで4つになる(という理解で良いのかな?)ためITP適用対象のドメインとなるそうです。これは辛い。

参考:ITPのBANを早速試しました

トラッカー判定されるとどうなるの?

jQueryのajaxに慣れている人に分かりやすく言うと、外部ドメインのサーバへ、データは正常に送れるけどfailが返る感じです。返却値にCookieを利用していなくても(?)ダメっぽい感じでしたね。何をすればNGになるのか、正確な所まではわかっていません。

var url  = 'http://(外部ドメイン)';
var data = window.document.cookie;

$.ajax({
    type: 'POST', dataType: 'json', url:url,
    data: {data: data}, async: async, timeout: timeout,
    cache: false, crossDomain: true, xhrFields: {withCredentials: true}
}).done(function(data){
    //普通はここが通る
    alert('Cookieが空だったので新規登録しました。あなたのIDは'+data.id+'です。')
}).fail(function(e) {
    //サーバにはデータが届いてるんだけどエラー(何も返却されない)
    alert('サーバが死んでるかITPにやられたようです。')
});

なお、デベロッパーツールで見ると、

「[Error] Failed to load resource: 操作を完了できませんでした。プロトコルエラー」

と表示されます。

結局どうしたか?

検証した感じ、サードパーティだけ即ブロックされるケースや、ファーストパーティのCookieさえもブロックされるケースも確認できました。今まで通りサードパーティCookieを使うのは難しそうだったので、私の場合は上記コードのfail中で判定する形としました。

上記どれが適用となるかは、検証する環境によって都度変わってしまったため、非常に不安定と言えます。これに24時間ルール(24時間後にサードパーティCookieが削除される、未確認だけど一番有名なやつ)も混ざるので、相当カオスな感じになりますね。

今後は、サードパーティCookieを使った計測はリスクが大きんじゃないでしょうか…。

以上となります。