コンバージョントラッキング
ユーザーがサイトでコンバージョンしたときにポストバックを送信する方法 - CPAキャンペーンが正しくアトリビューション・課金するために必須です。
CPAキャンペーンでは、ユーザーがコンバージョンしたことを当社が知るのは、 you あなたが教えてくれたときだけです。その仕組みが postbackです:ユーザーがあなたのサイトで目的の行動をしたら、あなたのサーバーが当社サーバーに短いリクエストを送信し、当社は元のクリックに対してコンバージョンを記録します。この配線がないと、CPAキャンペーンはクリックを配信しても課金されません - どのクリックが顧客になったのか、当社には知るすべがないからです。
このページでは配線を順に説明します。開発作業は約15分、SDKは不要です。
流れ
- ユーザーがパブリッシャーのサイトであなたの広告をクリックします。
- 当社のアドサーバーが
?efaid=<click_id>をリンク先URLに追加し、ユーザーをそこへリダイレクトします。クリックIDは、このクリックに固有の24文字の16進文字列です。 - あなたのランディングページが次の値を取得します:
efaid(URLパラメータ)を保存します - 通常は、ページ遷移をまたいで生き残るセッションクッキーに入れます。 - ユーザーがコンバージョンに当たる行動(登録、購入、インストール)を完了したら、あなたのサーバーが次へポストバックを送信します:
https://ads.efind.com/serve/postback.php?efaid=<click_id>. - 当社はクリックを照合してコンバージョンを記録し、クリック発生時に有効だった入札額で課金します。
ステップ1:取得する efaid ランディングページで
ユーザーがあなたのサイトに到達したときのブラウザのURLは、次のようになります:
https://example.com/landing?efaid=ee40d35706798218cce42929
次のパラメータを取り出します: efaid そして保存します。複数ステップのファネルでも生き残るため、クッキーが最も一般的な選択です。JavaScriptの例:
const url = new URL(window.location); const efaid = url.searchParams.get('efaid'); if (efaid) { document.cookie = `efaid=${efaid}; path=/; max-age=${30*24*60*60}; SameSite=Lax`; }
または、ランディングページをサーバー側で制御しているならPHPで:
<?php if (!empty($_GET['efaid']) && preg_match('/^[a-f0-9]{24}$/', $_GET['efaid'])) { setcookie('efaid', $_GET['efaid'], time() + 30*24*60*60, '/', '', true, true); }
efaid は、保存が続く限りしか生き残りません。到達からコンバージョンまでの間にクッキーを消したユーザーはアトリビューション不能になります。ほとんどのプラットフォームでこれによる約5〜10%の漏れが見られます - オープンなウェブで商売をするコストです。ステップ2:コンバージョン時にポストバックを送信
サーバー側でコンバージョンが発生した瞬間に、保存しておいた値とともに当社のポストバックURLへGETを1回送信します: efaid:
PHP
$efaid = $_COOKIE['efaid'] ?? ''; if ($efaid !== '') { $url = 'https://ads.efind.com/serve/postback.php?efaid=' . urlencode($efaid); // Fire and forget - don't block the user's request on this. @file_get_contents($url, false, stream_context_create([ 'http' => ['timeout' => 2, 'ignore_errors' => true] ])); }
Node.js
const efaid = req.cookies.efaid; if (efaid) { fetch(`https://ads.efind.com/serve/postback.php?efaid=${encodeURIComponent(efaid)}`) .catch(() => {}); // fire-and-forget }
Python
import requests efaid = request.COOKIES.get('efaid') if efaid: try: requests.get(f'https://ads.efind.com/serve/postback.php?efaid={efaid}', timeout=2) except requests.RequestException: pass
cURL(テスト用またはシェルベースのスタック向け)
curl -s "https://ads.efind.com/serve/postback.php?efaid=$EFAID"
代替:ピクセル方式(サーバーアクセス不要)
サーバーサイドのポストバックを送信できない場合 - SaaSのランディングページやシンプルなサンキューページでよくあります - は、1×1の画像ピクセルを代わりに使えます。コンバージョン確認ページ(Shopifyの「ありがとうございました」ページ、Wixの注文確認など)のHTMLにこれを置いてください:
<img src="https://ads.efind.com/serve/pixel.php?efaid=YOUR_EFAID_HERE" width="1" height="1" alt="" style="display:none">
テンプレートで置き換える必要があります: YOUR_EFAID_HERE を保存済みの値に。ほとんどのeコマースプラットフォームには、注文メタデータ付きのカスタムHTMLを挿入する方法があります。ピクセルはサーバーポストバックよりやや信頼性が落ちます(広告ブロッカー、サードパーティリクエストを遮断するブラウザ)が、設定は簡単です。
レスポンスの形式
postback.php はJSONを返します。 pixel.php は画像を返しますが、ヘッダーにデバッグ情報を追加します - ブラウザの開発者ツールで連携を確認するのに便利です。
JSONの形
{ "ok": true, "recorded": true, "reason": null } ← conversion logged ✓ { "ok": true, "recorded": false, "reason": "already_recorded" } ← duplicate fire (no harm) { "ok": true, "recorded": false, "reason": "not_found" } ← efaid doesn't match a click { "ok": true, "recorded": false, "reason": "bad_click_id" } ← malformed efaid { "ok": true, "recorded": false, "reason": "window_expired" } ← click was over 30 days old
HTTPステータスは結果にかかわらず常に200です。成功か否かのシグナルは次にあります: recorded。連携では次を成功として扱ってください: recorded: true それ以外の状態は「送信したが記録されなかった」として扱います - たいていは問題ありません(「no」の理由のほとんどは運用上正常です)。
連携のテスト
- ダッシュボードでテストキャンペーンを設定します(入札額は任意 - 下書きキャンペーンのテストコンバージョンには課金されません)。
- パブリッシャーのサイトから、または当社アドサーバーのURLから直接、広告をクリックして次を控えます:
efaidランディングURLに付加された値。 - ポストバックが送信される形でコンバージョンフローを実行します。
- ダッシュボードのキャンペーン詳細ページを確認します - コンバージョンの数値が1分以内に増えるはずです。
- 同じ値で同じポストバックをもう一度送信します:
efaid- 数値は2回目には増えないはずです(冪等)。
重要な挙動
- Idempotent. 同じポストバックを2回送信しても(ネットワークの再試行、開発ミス)安全です - 最初の1回だけがカウントされます。
- 入札額はクリック時点で確定します。 クリック後、コンバージョンポストバックの前に入札額を変更しても、クリック発生時に有効だった入札額を使います。これによりパブリッシャーの経済性が安定します。
- 30日間のウィンドウ。 30日より古いクリックのポストバックは黙って無視されます。コンバージョンファネルが特別に長い場合はご相談ください - 広告主ごとにウィンドウを延長できます。
- ボットのクリックにはefaidが付きません。 当社の重複排除レイヤーは、明白なリロードスパムや単純なクリックボットをクリック時点でフィルタリングします。それらのリダイレクトには次が含まれないため:
efaid、ポストバックの対象がありません。これがあなたの広告費を守ります。