ポストバック、ピクセル、イメージタグ:報酬の根拠にできるのは1つだけ
コンバージョンを報告する3つの仕組みを、エンジニアでなくても頭に入る形で説明し、統合が実際に壊れる6つの原因を挙げます。夜11時にこれをデバッグしたことのあるオペレーターと、技術系のアフィリエイトマネージャーのために。

コンバージョンの報告方法は3つあります。イメージタグ、JavaScriptピクセル、そしてサーバー間のポストバックです。コミッションを払う根拠にできるほど持ちこたえるのはポストバックだけです。プレイヤーのブラウザの協力を必要としないからです。「トラッキングされない」統合のほとんどは、壊れたポストバックではなく、プレイヤーのレコードにクリック識別子がないだけです。
電話はいつも悪い時間にかかってきます。アフィリエイトマネージャーはパートナーからトラフィックを引き上げると迫られ、オペレーターは統合は生きていると言い張り、ダッシュボードはゼロを表示しています。誰かが入金完了ページのフッターにあるタグのスクリーンショットを送ってきて、なぜ動かないのかと聞きます。
動かないのは、それがページのフッターにあるタグだからです。
コンバージョンの報告は小さな問題ですが、間違え方はたくさんあり、その間違え方は10年でほとんど変わっていません。変わったのは、3つのうち2つの仕組みが静かに信頼できなくなったのに、みんながそれを出し続けたことです。この記事は、統合のあとではなく前に、エンジニアに渡すものです。
プレイヤーが入金したと伝える3つの方法
イメージタグ。 いちばん古いものです。ページに1ピクセルの画像を置き、そのソースをトラッキングプラットフォームのURLにします。ブラウザが画像を読み込もうとし、そのリクエストがプラットフォームに届き、リクエストそのものがメッセージです。画像は本当は必要なく、取得すること自体が目的です。必要なのはHTMLだけなので、誰もJavaScriptに触りたがらないテンプレートシステムの中で長く生き延びました。
JavaScriptピクセル。 画像の代わりにスクリプトを使う、同じ発想です。ページ内でスニペットが動き、少し文脈を集めて呼び出しを送ります。より柔軟です。ページが変数に入れた値を読めますし、確認画面の描画を待てますし、実行時にしか分からない入金額を渡せます。同時に壊れやすくもあります。スクリプトが読み込まれること、変数が存在すること、そしてその上でページがエラーを投げていないことに依存するからです。
サーバー間のポストバック。 ブラウザは一切関わりません。バックエンドが重要なイベントを記録したとき、プレイヤーが最初に来たときに渡された識別子を持って、URLへHTTPリクエストを送ります。決済サービスが入金を確定し、システムが取引を書き込み、その同じ経路のどこかで、このプレイヤー、このイベント、この金額、この通貨、と伝えるリクエストが出ていきます。
それが全部です。他の2つより賢くなさそうに聞こえますが、まさにそれが持ちこたえる理由です。
なぜ3つのうち2つが頼れなくなったのか
単一の原因はありません。原因の積み重ねがあり、1つずつなら耐えられたはずのものです。
SafariとFirefoxは既定でサードパーティCookieをブロックし、Firefoxはトラッカーリストに載ったドメインへのリクエストもブロックします。Chromeは今もサードパーティCookieを許可しているので、Chromeでブロックしているのはブラウザではなく広告ブロッカーです。Safariはさらに、スクリプトが書き込んだストレージの保持期間に上限を設けており、場合によっては数日です。つまり、クリック時に書き込んだ状態を入金時に読む仕組みは、通常の検討期間のごく一部で期限切れになります。その上に広告ブロッカーが乗っており、しかも登録前に比較コンテンツを読む層にこそ多く使われています。どれも自分から名乗りません。オペレーターはページが普通に表示されるのを見て、統合は動いていると結論します。
そして、どのブラウザ設定でも直せない部分があります。プレイヤーが職場のデスクトップでクリックし、少し考えて、その晩にスマホから入金する。あるいはウェブで登録し、ブラウザもページもタグも存在しないネイティブアプリの中で入金する。特にスポーツブックでは、入金はクリックではなく試合日程に従い、日程に従ってアプリの中に入っていきます。この2つの経路がどれだけ違う振る舞いをするかを見たいなら、カジノとスポーツブックのトラフィックはまさにこの点で分かれます。
ブラウザが一度も訪れない場所から、ピクセルは発火できません。これはタグの置き場所を工夫しても直りません。
| 気にしていること | イメージタグ | JavaScriptピクセル | サーバー間のポストバック |
|---|---|---|---|
| 発火する場所 | プレイヤーのブラウザ | プレイヤーのブラウザ | 自社のバックエンド |
| 広告ブロッカーに耐えるか | ほとんど無理 | ほとんど無理 | はい、そもそも関係しない |
| 端末をまたいでも耐えるか | いいえ | いいえ | はい |
| アプリ内の入金に耐えるか | いいえ | いいえ | はい |
| 実行時にページの状態を読めるか | いいえ | はい | 該当なし |
| 確定した金額を報告できるか | ページが知っている範囲だけ | ページが知っている範囲だけ | はい、記録システムから |
| 使いどころ | 変更できないレガシーシステム | 同一セッションのシグナルとして、補助的に | お金を決めるものすべて |

知っておく価値のある壊れ方
統合を面白い壊し方をする人はいません。同じ6つの間違いで、ほぼ全部です。
イベントではなくページの読み込みで発火している。 タグが入金完了ページにあるので、そのページが開かれるたびに発火します。プレイヤーが再読み込みしたり、履歴から戻ってきたり、失敗した試行のあとに着地したりすると、そのたびにレポートの中でコンバージョンになります。これは数字を都合よく見える方向に膨らませるので、誰かが疑うまで長く生き延びます。
それは本当にサーバーサイドですか。 バックエンドのフレームワークがテンプレートを描画していても、それはブラウザに実行させるタグを吐いているだけです。リクエストがプレイヤーの端末から出ているなら、どのファイルに書かれていようとブラウザサイドです。テストは1分で済みます。自分のブラウザでスクリプトをブロックして、イベントがそれでも届くかどうかを見てください。
そして、プレイヤーのレコードにクリック識別子がない、という問題があります。これが圧倒的に最も多い失敗で、下に独立したセクションを設けています。
入金が確定する前に報告される。 決済がオーソリされ、ポストバックが出ていき、そのあとで決済が失敗するか取り消される。届かなかったお金にコミッションが付いた状態です。チェックアウトのページが見せている状態ではなく、経理チームが認める状態で発火させてください。
冪等性、あるいはその不在。 ネットワークはタイムアウトします。よくできた送信側はリトライしますし、それは正しい動きです。受け取る側が2回目の試行を1回目と同じイベントだと判別できなければ、そのリトライは2件目のコンバージョンになります。すべてのイベントには、あなたの側から発行する安定した一意の参照が必要です。リトライのたびに同じ値であれば、重複と認識して、2回払うのではなく捨てられます。
イベントは順序が入れ替わって届くこともあります。2つのサービスが独立に発火して片方が速かったために、入金が、それが属する登録より先に届く。互いに依存するイベントには順序を付けるか、それぞれが単独で成り立つだけの文脈を持たせてください。
すべてを決めるただ1つのこと
上に挙げた失敗はどれも午後のうちに直せます。これは直せません。
プレイヤーがトラッキングリンク経由で来たとき、そのリンクに付いていた識別子は、登録の時点でプレイヤーのレコードに保存されなければなりません。セッションではありません。Cookieでもありません。そのアカウントを表すデータベースの行に、メールアドレスと並べて、それを作成するのと同じトランザクションの中で保存します。
それが起きなければ、その先の何ひとつ帰属させられません。プレイヤーは3週間後に入金し、バックエンドは技術的に完璧なポストバックを発火させ、そこには識別子が入っていません。運ぶものが存在しないからです。ポストバックをいくら調整しても直りません。あなたが直しているのはレポートの問題ではなく登録の問題で、修正すべき場所は登録フローです。
関連する習慣が2つあり、多くの言い争いを防ぎます。値が奇妙に見えても識別子は保持してください。あなたが保存しているのはトークンであって、検証しているのではありません。そして30日ではなく、アカウントの生涯にわたって保持してください。対象入金で払うCPAは、入金が条件を満たしたその瞬間にリンクがまだ存在している必要があり、それはクリックから数か月後のこともあります。対象入金や初回入金の語彙があなたの側で曖昧なら、スキーマを書く前にFTD、NGR、CPA、CPL、CPRの用語集に10分使う価値があります。
トラフィックを流す前のテスト
正しい統合テストは退屈で、1時間ほどで終わります。
- 実際のトラッキングリンクをクリックし、普通のプレイヤーと同じように登録を完了します。そのあと自社のデータベースでプレイヤーのレコードを見て、識別子が付いていることを確認します。付いていなければそこで止めてください。この先はすべて演技です。
- 実際のお金を入金します。少額で構いません。EUR 20あれば十分です。テストモードの決済は、イベントを発火させるコード経路をそのまま飛ばすことが多く、それがステージングでは通って初日に落ちる理由です。
- 入金イベントが1回だけ、正しい金額と正しい通貨で、決済が送信された時点ではなく確定したあとに届いていることを確認します。
- 同じイベントを意図的にもう一度送ります。重複として認識され、二重に数えられないはずです。
- 全部をスマホでもう一度繰り返し、アプリがあるならブラウザではなくアプリ内の入金でもう一度繰り返します。
エンジニアの1時間と1件の入金。対するのは、すでにトラフィックを削られていると確信しているアフィリエイトとの1か月分の突き合わせです。トラッキングリンクのQA手順が同じテストのアフィリエイト側を扱っているので、両端を一緒に走らせれば、四半期ではなく午後のうちにずれを見つけられます。
AFFILIFYがオペレーターに求めるもの
統合のリファレンスはaffilify.partners/docsにあり、エンドポイント、パラメーター名、受け付けるイベントタイプが載っています。ブログ記事からではなく、そこで読んでください。最新に保っているのはそのページだからです。
形は小さいものです。イベント名、クリック時に渡された識別子、金額と通貨、そしてあなたのキー。登録、初回入金、以降の入金、収益イベントは、それぞれ別のメッセージです。ディールに紐づくコミッションモデルが、どれが重要かを決めますし、受け取っていないデータに対してプログラムはRevShareを払えないからです。まだモデルを選んでいる途中なら、CPA、RevShare、ハイブリッドが、それぞれがあなたの側に何を必要とするのかを示しています。
はっきり言っておくべきことが2つあります。私たちの側の帰属には多層のフォールバックがあります。それは保険であって、計画ではありません。登録時に保存される識別子はあなたが管理する部分なので、送ってください。そしてトラフィックの品質は継続的に評価されるので、一部のコンバージョンは到着した時点で計上されるのではなく、確認の間は保留されます。それは拒否ではありませんし、アフィリエイトには無言の空白ではなく、その状態が見えます。
識別子を返し、確定したイベントを1回だけ報告し、1時間で実際の入金を使ってテストできるオペレーターは、夜11時の電話をすることはありません。ここでの狙いは、それだけです。
よくある質問
ポストバックとピクセルの違いは何ですか?
ピクセルは、ページが開いている間にプレイヤーのブラウザが発火させます。ポストバックは、イベントが記録された時点で自社のバックエンドが発火させ、ブラウザは関わりません。その違い1つが他のすべてを決めます。ポストバックは広告ブロッカーにもブラウザのCookieポリシーにも影響されず、プレイヤーがノートPCで登録してスマホから入金しても機能し、ページが一度も読み込まれないネイティブアプリの中で入金が起きても機能します。報告する金額も、ページがたまたま知っていた額ではなく、記録システムが保持している額です。
ポストバックと並行して、ピクセルを予備として残せますか?
残せますが、その価値をはっきりさせておいてください。ピクセルが確認できるのは自分に見えるイベントだけで、それは実際に起きたイベントの一部でしかなく、その一部がどれだけの割合なのかはあなたには見えません。2つ目の真実の情報源ではなく、開発中の同一セッションの健全性チェックとして扱い、支払いの突き合わせには絶対に使わないでください。同じイベントで両方が発火する場合、その組を2件ではなく1件のコンバージョンとして認識できるよう、あなたの側から発行する安定した一意の参照がプラットフォームに必要です。
ポストバックは発火しているのに、何も帰属されません。なぜですか?
ほぼ必ず、登録の時点でクリック識別子がプレイヤーのレコードに保存されなかったからです。ポストバックは正しく、時間通りに、有効なキーを持って出ていきますが、突き合わせるものを何も運んでいません。まず自社のデータベースで、実際のプレイヤーの行を1つ確認してください。そこに識別子がなければ、バグはポストバックのコードではなく登録フローにあり、リトライのロジックやエンドポイントの調整をいくら変えても結果は変わりません。
トラフィックを流す前に、ポストバックの統合はどうテストすべきですか?
実際のトラッキングリンクをクリックし、プレイヤーとして登録し、識別子がアカウントの行に載ったことを確認します。次に実際のお金を入金します。テストモードの決済は、イベントを発火させるコード経路を飛ばすことが多いからです。入金が1回だけ、正しい金額と通貨で、決済が確定したあとに届いたことを確認します。同じイベントをわざともう一度送り、重複として捨てられることを確認します。そのあとスマホで、アプリがあればアプリでも繰り返します。1時間と、少額の入金1件です。
