見出し画像

Meta広告・Facebook広告 CAPI重複イベント除外設定の方法(一例をご紹介)

お疲れ様です。あどまるです。

今回は、Meta広告のコンバージョンAPI(以下CAPI)でブラウザーイベントとサーバーイベントの重複を、実際に除外設定した方法の一例をご紹介していきます。

✔︎この記事の対象者

・Meta広告始めたけどCAPIとは何かざっくり知りたい
・CAPI設定したら実CVとの乖離が増えた (管理画面cv > 実cv)
・実際にどうやって除外設定するのか知りたい

✔︎この記事を読まなくても大丈夫な方

・CAPIについて大体知っている
・管理画面と実cvの乖離が80~90%ぐらいに留まっている
・CAPIは実装済で重複除外設定はバッチリ
・Meta広告の猛者の方々

Meta広告CAPIの実装方法はWordpress・Shopifyなどのツール連携やプラグイン利用、サーバーサイドGTMの活用、有料ツールのオプション機能で実装など方法は多くあります。

※サーバーエンジニアに依頼し実装する方法もありますが、ハードルが高すぎるので自分は実装経験がありません…

今回の記事は、CRMツールを用いてCAPI実装したら管理画面CVが2倍になったので重複除外設定を行った体験談になります。

ツールごとに具体的な方法は異なりますが、大枠の概念や設定方法などは参考になるかもと思ったので、この記事を書いてみました。

CAPIを正しく活用することで、以下の様な方々の参考にもなるかもです。

・CPA・ROASを改善したい
・成果を維持しつつ更に伸長させたい
・管理画面と実CVの乖離率を改善したい
・データを活用した施策を実行したい

分かりやすさ重視で書いたので、なんとなくイメージを掴んでいただけたら幸いです。

それでは参ります!

※Xもやっているのでお気軽にフォローいただけると嬉しいです🙋https://twitter.com/adoadomaru01

CAPI (Conversion API)とは?

CAPIとは結局何?と思いますよね。CAPIとは

3rdパーティクッキーを使用せずに、広告主の1stパーティデータを用いてCV計測する技術

のことです。
Meta広告のCV計測は以下2つの方法で行われます。

ピクセル(ブラウザイベント):3rdパーティクッキーを活用してCV計測
CAPI(サーバーイベント):広告主がサーバーに保持している情報でCV計測

※ピクセルはWebサイトに設置、CAPIはサーバー側の設定が必要

図で表すと以下の通り。
※アドエビスさんの記事が分かりやすかったため、引用させて頂きました。

引用元:アドエビス

元々、ピクセルのみでCV計測していた頃は、画像上部の×印がある箇所の
「ユーザーがサイトを閲覧 → クッキー発行 → FB(Meta)サーバーへ送信」
されることで、管理画面上でCVが反映されていました。

このCVした情報を元に、Metaはどんなユーザーに広告を配信するかを決め、その精度が高いためMeta広告ではCPAを抑えて配信できていたんです。

しかし、個人情報の活用に厳しい目が向けられ昨今ではデータ活用に規制の流れが… ITP、ATT、クッキー規制…

※ITP:Safariに実装されているトラッキング防止機能
※ATT:アプリでポップアップが表示されIDFAの取得許可をユーザーに求める機能
※Googleクッキー廃止方針を撤回:記憶に新しいリリース
参考記事:Google、サードパーティークッキー廃止方針を撤回 日経新聞

つまり、「広告媒体社は3rdパーティのデータを活用して広告配信に使うの徐々に辞めていこうぜ」という流れがグローバルで起きているんです。

これまではピクセルを用い3rdパーティクッキーのデータをもとに、広告配信してきたMetaとしては以下のデメリットがあります。

・CV計測が正しくできない
・CVデータの精度が低くなる
・広告成果が悪くなる

これらを改善するための技術がCAPI。3rdパーティクッキーではなく、広告主のサーバー(1stパーティ)からMetaのサーバーに購入者情報を送信し、管理画面にCV反映させることができます。
※以下画像の下部のフロー

引用元:アドエビス

CAPIを実装することで、データの欠損や精度の担保を行い、広告成果を改善することに繋がるんです。

CAPIを設定するとどうなるのか?

CVデータの数や質をMetaが正しく判断できる様になることで、CPAが下がる可能性があります

CPMが下がり、CTRが上がり、CVRが上がる → CPAが下がる

データが正しく送られると、以下の様に青色と緑青色の2本のグラフが表示される様になります。

しかし、ここで注意点があります。
それは、重複除外の設定を行うことです

ピクセルを設置しつつ、CAPIを実装すると3rdパーティと1stパーティの2方面からMetaのサーバーにCVデータが送られます

しかし、Metaのサーバーからすると、この2つのCVデータが同一人物(1人)のCVか異なる人物(2人)なのか判別がつきません。

2つのCVデータは同一人物のCVだと認識させることが必要

そのため、実際は1件しか購入されていないけど、ピクセルとCAPIから合計2件MetaサーバーにCVデータが送られることで、管理画面上は2CVついてしまう( 管理画面CV > 実CV )という現象が起きてしまうんです…

それを解消するために

「ピクセルからのCVとCAPIからのCVは同一人物(1人)のCVだよ」

と伝えてあげることで、Metaサーバーは片方を除外する※ことができます。
これにより、管理画面上のCVと実CVの乖離を減らし、より正確に広告上でデータを活用することができる様になります。

※CVの除外について:ピクセルとCAPIのシグナルにおいて、

・Metaサーバーに先についたシグナルが優先される
・サーバーシグナルがMetaサーバーに先についたが、過去48時間以内にブラウザーシグナル(ピクセル)が到達しない場合、サーバーシグナルは破棄されない

など諸々ありますが、かなりディープな部分なので興味がある方は以下の記事を見てみてください。

重複したピクセルイベントとコンバージョンAPIイベントの処理 Meta for developpers

実際に重複除外設定した方法

今回は"重複除外"の方法なので、CAPIの実装方法については深くは触れません。

今回のケースでは、

ECフォースの機能を用いCAPIを実装したが購入イベントの重複発火が発生したため、GTMで除外設定をした

という流れを説明しています。
以下、具体的な流れです!

ゴール:”イベントの重複除外”が「ベストプラクティスを満たしています」を実現。

方法:(基本的には公式ヘルプを参照)

・ピクセルのeventとコンバージョンAPIのevent_nameが一致している。
・ピクセルのeventIDとコンバージョンAPIのevent_idが一致している。

ただ、公式ヘルプは分かりずらいので、以下の様に設定をしたら、正しく重複除外される様になりました。

◆Metaピクセル
event:Purchase
eventID:GTMを使用して、各注文(ユニークの受注)IDをサンクスURLの末尾からJavascriptで取得

例)https://〇〇〇.com?order_id=aaaaaaaa の「aaaaaaaa」を取得してPurchaseイベント eventID に反映される様に設定。

◆サーバー側(CRMツール)
event_name:Purchase
event_id:CRMツール内で各注文(ユニークの受注)に割り振られるIDを関数で取得

{{ order.number }}」という関数で文字列として取得可能

※この関数はCRMツールによって異なる可能性あるので、担当者に確認することをおすすめします

★実際の実装コード★

◆Metaピクセル
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '××××××××××××',{
});
fbq('track', 'Purchase', {currency: 'JPY'},{eventID:'{{cv_order_id}}'});
</script>

●GTMの設定
・GTM内の”変数”を選択
・ユーザー定義変数で「カスタムJavascript」を選択
・名前を決定(画像では「cv_order_id」と設定しています。上記ピクセルeventIDに記載している名前と同じであればOKです)
・コードは下記の通り(URLの/order_id= 以降の文字列をcv_order_idに返しています)

function(){
var cv_order_id = decodeURIComponent(location.search.match(/order_id=(.*?)(&|$)/)[1]);
return cv_order_id;
}

◆サーバー側(CRMツール)

{
"data": [
{
"event_name": "Purchase",
"event_time": "{{ unix_time }}",
"action_source": "website",
"event_source_url": "{{ request.url }}",
"event_id": "{{ order.number }}",
※ここでサーバー内の各受注IDをevent_idとして返しています
"user_data": {
"external_id": "{{ order.hashed_id }}",
"em": "{{ order.hashed_email}}",
"ge": "{{ order.hashed_gender }}",
"db": "{{ order.hashed_birth}}",
"ln": "{{ order.hashed_name01 }}",
"fn": "{{ order.hashed_name02}}",
"ph": "{{ order.hashed_tel }}",
"zp": "{{ order.hashed_zipcode}}",
"st": "{{ order.hashed_prefecture }}",
"ct": "{{order.hashed_address }}",
"country": "{{ order.hashed_country }}",
"client_ip_address": "{{ request.remote_ip }}",
"client_user_agent": "{{ request.user_agent }}"
},
"custom_data": {
※content_name,contentsなど
{% endfor %}
],
"value": {{ order.total }},
"currency": "JPY"
}
}
],
"access_token": "{{access_token}}"
}

上記の設定で、ピクセルとCAPIのCVが同一のものだとMetaサーバー側で認識し、正しくCV計測(重複除外)される様になりました🙋

正直、慣れていない方からすると「何が書いてあるのかよく分からない…」となると思います💦

もし不明な点があれば、可能な限りお答えさせていただきますので、XのDMからご連絡ください。あどまる

まとめ

いかがだったでしょうか?
Meta広告のCAPIについてなんとなくご理解いただき、そのメリット、重複除外の方法もわかったのではないでしょうか?

(正直よく分からん!というご感想もあるかもしれませんが…)

実際に、自分も1人のWebマーケターとして色々調べていましたが、詳細に解説された情報は見つからずかなり苦労しました。。。泣

そのため、かなりニッチな分野ではあるものの、1人でも多くのMeta広告運用者の方の参考になればと思い記事を書いてみました。

Meta広告の運用において、以下を目指す方々の参考になれば大変嬉しいです。

・CPA・ROAS改善
・成果を維持しつつ更なる伸長
・管理画面と実CVの乖離率改善
・データを活用した施策の実行

もし、Meta広告をはじめ、Web広告の運用代行やWebマーケティング全般の支援をご希望の方がいればXからお気軽にDMください🙆

Xアカウント:あどまる

「少しでもこのnoteが役に立った!」という方はXでリポストやコメントをいただけると大変嬉しいです…😭 

最後までお読みいただきありがとうございました!


この記事が気に入ったらサポートをしてみませんか?