Meta広告で問い合わせを取るには、ホームページで誰が問い合わせたかをMetaに知らせる仕組みが要ります。それがMetaピクセルとコンバージョンAPIです。ピクセルはブラウザから、コンバージョンAPIは自社のサーバーから、同じ問い合わせをMetaに送ります。この記事では、2つの違いと両方入れる理由、重複して数えないための設定、GTMとWordPressでのピクセルの入れ方、コンバージョンAPIの入れ方の選び方、イベントマネージャでの確かめ方、ハッシュ化と同意の扱いまでを、見積り依頼を数える「サンプル住まいサービス」の例で通します。前提として、ホームページにGoogleタグマネージャー(GTM)が入っていて、Meta広告のビジネスポートフォリオと広告アカウントがあるものとします。
この記事の内容
先に決めること
ピクセルを入れる前に、何を数えるかを決めておきます。ここが曖昧なまま入れると、あとで広告の最適化の対象を変えるたびに設定をやり直すことになります。
| 決めること | サンプル住まいサービスの答え | 理由 |
|---|---|---|
| 1件と数える行動 | 見積り依頼フォームの送信を「Lead」として送る | 広告セットの成果イベントにする本命 |
| そのほかに送る行動 | 電話番号のタップを「Contact」、LINEの友だち追加ボタンのクリックを「Contact」の別名で送る | 本命ではないが、件数の傾向を見る |
| いつ送るか | フォームの送信が完了したとき(完了ページの表示か送信成功のイベント) | ボタンのクリックで送ると、入力エラーの分まで数える |
| どこから送るか | ピクセル(ブラウザ)とコンバージョンAPI(サーバー)の両方 | ブラウザだけだと取りこぼす |
| 誰が管理するか | 会社のビジネスポートフォリオがピクセル(データセット)を持つ | 代理店が持つと、契約が終わったときに計測ごと失う |
計測の全体の設計、つまりGoogle広告・LINEヤフー広告 検索広告(旧Yahoo!広告)・Meta広告で同じ問い合わせをどう数え分けるかは「広告のコンバージョン計測の設計:問い合わせ・電話・LINEを媒体ごとに数える」に書きました。この記事はそのうちMetaの部分です。
Metaピクセルとコンバージョン APIの違い
| 比べるところ | Metaピクセル | コンバージョンAPI |
|---|---|---|
| どこから送るか | 見ている人のブラウザ(JavaScript) | 自社のサーバーや、つないだサービス |
| 入れ方 | タグを貼る(GTM・WordPressのプラグイン) | パートナー連携・サーバーのGTM・自作 |
| 取りこぼし | 広告ブロック・ブラウザのトラッキング防止・通信の失敗で落ちる | ブラウザの影響を受けない |
| 送れる情報 | ブラウザで分かること(ページ・クリック・Cookie) | フォームの入力内容(ハッシュ化したメール・電話番号)、成約など後から分かること |
| 手間 | 小さい | 中〜大。サーバーかつなぐ仕組みが要る |
Metaの開発者向け資料では、ピクセルに加えてコンバージョンAPIも入れる「冗長な構成」を勧めています。ピクセルだけだと、ブラウザの設定で落ちた問い合わせをMetaが知らないまま配信を続けることになり、学習に使える件数が減ります。コンバージョンAPIを足すと、落ちた分をサーバーから補えます。
両方から同じ問い合わせを送ると、何もしなければ2件と数えられます。これを防ぐのが重複の除外です。
重複の除き方
Metaは、ピクセルから届いたイベントとコンバージョンAPIから届いたイベントで、次の2つが一致したものを同じ1件とみなします。
- イベント名が同じ(ピクセルの
Leadと、コンバージョンAPIのevent_nameのLead) - イベントIDが同じ(ピクセルの
eventIDと、コンバージョンAPIのevent_id)
開発者向け資料では、同じイベントIDの最初のイベントを受け取ってから48時間以内に届いたものが重複の除外の対象です。ピクセルが先に届き、あとからサーバーのイベントが届く形を前提にしています。ピクセルだけ、またはサーバーだけから同じ内容を何度送っても、重複としては除かれません。
つまり、問い合わせ1件ごとに1つの決まったIDを作り、ピクセルとコンバージョンAPIの両方に同じIDを渡すことが要になります。サンプル住まいサービスでは、フォームの送信時にブラウザでIDを作り、隠し項目に入れてサーバーにも渡しています。
一覧:送るイベント
ピクセルで送るイベントには、Metaが名前を決めている「標準イベント」と、自分で名前を付ける「カスタムイベント」があります。広告の最適化に使うなら、標準イベントを使います。
| 標準イベント | 意味 | サンプル住まいサービスでの使い方 |
|---|---|---|
| PageView | ページの表示 | ピクセルの基本コードで全ページに自動で送る |
| ViewContent | 大事なページの表示 | 3つのLPの表示 |
| Lead | 見込み客の情報の送信 | 見積り依頼フォームの送信完了。本命 |
| Contact | 電話・メール・チャットなどでの連絡 | 電話番号のタップ、LINEの友だち追加ボタンのクリック |
| Schedule | 予約 | 現地調査の日程予約を受けるなら |
| CompleteRegistration | 登録の完了 | メールマガジンや会員登録がある場合 |
| SubmitApplication | 申込み | 採用の応募フォームに使う場合 |
電話とLINEを両方Contactで送ると見分けがつかなくなるので、パラメータの content_name に tel と line を入れて区別します。広告の成果イベントにするのはLeadだけにし、Contactは傾向を見るのにとどめます。電話のタップは、実際に電話がつながったかまでは分からないからです。
ピクセルの入れ方
ピクセル(データセット)を作る
- Meta Business Suiteの「すべてのツール」から「イベントマネージャ」を開く
- 左の「データソースをリンク」(または「接続」)を押し、「ウェブ」を選ぶ
- 名前を「サンプル住まいサービス_web」のように入れて作る
- 作ったデータセット(ピクセル)を、会社の広告アカウントに割り当てる
- 表示されたIDを控える。GTMとコンバージョンAPIで使う

GTMで入れる
GTMでは、ピクセルの基本コードを「カスタムHTML」のタグで全ページに入れ、イベントは別のタグで送ります。
- GTMで「タグ」→「新規」を押し、タグの種類で「カスタムHTML」を選ぶ
- 次の基本コードを貼る(
xxxxxxxxは控えたデータセットのID) - トリガーを「All Pages」(全ページのページビュー)にして保存する
<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', 'xxxxxxxx');
fbq('track', 'PageView');
</script>
- 見積り依頼の送信を送るタグを、もう1つ「カスタムHTML」で作る。イベントIDは、フォームの送信時にデータレイヤーへ入れた値をGTMの変数(例:
{{DLV - event_id}})で受け取る
<script>
fbq('track', 'Lead', {content_name: 'estimate_form'}, {eventID: '{{DLV - event_id}}'});
</script>
- このタグのトリガーを、フォームの送信成功(完了ページの表示、またはフォームのプラグインが出す送信成功のイベント)にする
- タグの「詳細設定」で、基本コードのタグが先に動くように「タグの順序付け」を設定する
- GTMの「プレビュー」で、完了ページに進んだときに2つのタグが動くことを確かめてから公開する
フォームの送信時にイベントIDを作ってデータレイヤーに入れる部分は、フォームのページに次のように書きます。同じIDをフォームの隠し項目にも入れておくと、サーバー側のコンバージョンAPIにも同じIDを渡せます。
<script>
document.addEventListener('submit', function (e) {
var id = 'lead-' + Date.now() + '-' + Math.random().toString(36).slice(2, 10);
var hidden = e.target.querySelector('input[name="event_id"]');
if (hidden) { hidden.value = id; }
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({ event: 'estimate_submit', event_id: id });
}, true);
</script>

WordPressで入れる
GTMを使っていないWordPressのサイトでは、Metaのプラグインや、フォームのプラグインのピクセル連携で入れる方法もあります。ただ、GTMとプラグインの両方でピクセルを入れると、PageViewが2回ずつ送られます。サンプル住まいサービスのようにGTMが入っているなら、ピクセルはGTMだけで入れ、WordPress側のピクセルのプラグインは止めます。どこで入っているか分からないときは、ブラウザの拡張機能「Meta Pixel Helper」で、ページを開いたときに同じIDのピクセルが何回動いているかを見ます。
コンバージョンAPIの入れ方の選び方
コンバージョンAPIの入れ方は、大きく3つです。
| 入れ方 | 中身 | 手間と費用 | 向く会社 |
|---|---|---|---|
| パートナー連携 | イベントマネージャの「パートナー連携」から、使っているサービス(WordPress・Shopify・GTMなど)を選んで画面の手順でつなぐ | 小さい。追加の費用はサービスによる | まず試したい。サイトが対応サービスで作られている |
| サーバーのGTM・Conversions API Gateway | サーバー用のGTMのコンテナか、Metaの「Conversions API Gateway」をクラウドで動かし、ブラウザのイベントをサーバーから送り直す | 中。動かすクラウドの利用料が別に掛かる | GTMを使い慣れていて、複数の媒体をサーバーから送りたい |
| 自作(API直接) | フォームの送信を受け取ったサーバーやn8nから、MetaのAPIにイベントを送る | 中〜大。作る人が要る | フォームの中身(メール・電話番号)を送りたい。kintoneの成約も送りたい |
小さな会社なら、まずパートナー連携で入れられるかを見ます。サンプル住まいサービスは、見積り依頼フォームの送信をn8nで受けてkintoneに入れているので、同じn8nのワークフローからコンバージョンAPIに送る自作の形にしました。フォームの入力内容をハッシュ化して送れるので、Metaが送り主のアカウントと照合しやすくなります。

自作で送るときの形
開発者向け資料では、アクセストークンはイベントマネージャのデータセットの「設定」タブ、「コンバージョンAPI」の「手動で設定」にある「アクセストークンを生成」から作ります。このリンクは、ビジネスの開発者の権限がある人にしか表示されません。トークンは1Passwordなどに保管し、n8nの認証情報に入れて使います。
送り先と中身は次の形です。xxxxxxxx はデータセットのIDとトークンで、em(メール)と ph(電話番号)は正規化してからSHA256でハッシュ化した値を入れます。
POST https://graph.facebook.com/v26.0/xxxxxxxx/events?access_token=xxxxxxxx
Content-Type: application/json
{
"data": [
{
"event_name": "Lead",
"event_time": 1793500000,
"event_id": "lead-1793500000000-ab12cd34",
"action_source": "website",
"event_source_url": "https://sample-sumai.example/lp/bath/",
"user_data": {
"em": ["(メールアドレスを正規化してSHA256にした値)"],
"ph": ["(電話番号を正規化してSHA256にした値)"],
"client_ip_address": "203.0.113.10",
"client_user_agent": "Mozilla/5.0 ...",
"fbp": "fb.1.1793400000000.1234567890",
"fbc": "fb.1.1793400000000.xxxxxxxx"
},
"custom_data": {
"content_name": "estimate_form"
}
}
]
}
決まりで気をつけるところは次のとおりです。
| 項目 | 決まり(開発者向け資料) | よくある間違い |
|---|---|---|
| event_id | ピクセルの eventID と同じ値 | サーバーで別のIDを作ってしまい、2件と数えられる |
| event_time | 発生した時刻のUNIX秒。送る時点から最大7日前まで | 7日より古いものが1件でも混ざると、まとめて送った全部がエラーになる |
| 1回に送れる件数 | data に最大1,000件 | 夜にまとめて送る。発生したらすぐ、できれば1時間以内に送るのが推奨 |
| em・ph | 正規化してSHA256でハッシュ化する | 電話番号を 090-1234-5678 のままハッシュ化する |
| client_ip_address・client_user_agent・fbp・fbc | ハッシュ化しない | 全部ハッシュ化してしまい、照合に使えなくなる |
| action_source | ホームページでの行動なら website | 正しく入れることに同意する項目なので、実態と違う値を入れない |
電話番号は、記号と先頭の0を取り、国番号を付けてからハッシュ化します。開発者向け資料には日本の例はありませんが、決まりに沿えば 090-1234-5678 は 819012345678 にしてからハッシュ化します。メールアドレスは前後の空白を取り、すべて小文字にしてからハッシュ化します。fbp と fbc は、ブラウザのCookie(_fbp と _fbc)の値で、フォームの隠し項目に入れてサーバーに渡します。
イベントマネージャでの確かめ方
入れたら、必ず実際に送って確かめます。管理画面に「有効」と出ているだけでは、重複の除外がうまくいっているかまでは分かりません。
テストイベントで確かめる
- イベントマネージャで会社のデータセットを開き、「テストイベント」を開く
- ブラウザのイベントを確かめるなら、ホームページのURLを入れて開き、見積り依頼のテスト送信をする
- 画面に「PageView」「ViewContent」「Lead」が届くかを見る
- サーバーのイベントを確かめるなら、「テストイベント」の画面に表示されるテストコードを控え、コンバージョンAPIのリクエストに
"test_event_code": "TESTxxxxx"を足して送る - 同じ見積り依頼で、ブラウザとサーバーの両方の「Lead」が届き、「重複を除外」の表示が出ているかを見る
- 確かめ終わったら、本番の送信から
test_event_codeを外す
開発者向け資料では、テストコードを付けて送ったイベントも捨てられるわけではなく、そのまま届いて広告の測定に使われます。テスト送信は、社内の人だと分かる名前と会社のメールアドレスで行い、kintoneにも「テスト」と分かる形で入れて、成約の集計から外します。

概要で確かめる
テストが通ったら、数日たってからデータセットの「概要」で次の3つを見ます。開発者向け資料では、送ってから20分ほどで受信を確かめられるとされています。
| 見るところ | 何が分かるか | 目安 |
|---|---|---|
| イベントの受信数と接続方法 | ブラウザとサーバーのどちらから何件届いたか | Leadがブラウザとサーバーの両方から届いている |
| 重複の除外(イベントの詳細) | 重複として除かれた率と、重複除外のキーが入っている率 | 率が低いと警告が出る。IDの渡し方を見直す |
| イベントマッチ品質 | サーバーのイベントの顧客情報が、Metaのアカウントとどれだけ照合できるか | 1〜10の点数。開発者向け資料の目安は6.0以上 |

イベントマッチ品質が低いときは、メール・電話番号・fbp・fbc・IPアドレス・ユーザーエージェントのうち、送れていないものを足します。点数をクリックすると、何を足せば上がるかが表示されます。
集約イベント測定とドメイン認証
集約イベント測定は、iPhoneでトラッキングを許可しない人のイベントを、Metaがまとめて扱う仕組みです。以前は、ドメインごとに使うイベントを選んで優先順位を付ける設定が求められていました。ウェブ向けの扱いはアカウントによって違うので、イベントマネージャに優先順位を付ける画面が出ているかどうかで、やることが変わります。画面が出ていれば、見積り依頼の「Lead」を一番上にします。出ていなければ、設定は要りません。
ドメイン認証は、ビジネスポートフォリオの「ブランドセーフティ」の「ドメイン」で、自社のホームページのドメインを登録して行います。認証のしかたは、HTMLのメタタグを入れる、HTMLファイルを置く、DNSのTXTレコードを足す、のどれかです。サンプル住まいサービスでは、WordPressの画面を触らずに済むDNSのTXTレコードで認証しました。認証しておくと、自社のドメインの持ち主として示せます。

個人情報と同意の扱い
コンバージョンAPIでメールアドレスや電話番号を送るときは、生の値ではなくハッシュ化した値を送ります。ハッシュ化は元に戻せない形に変える処理で、Metaは同じ方法でハッシュ化した自社のデータと照合します。ハッシュ化していても、個人に結びつく情報を外部に送ることには変わりないので、次のことをしておきます。
- プライバシーポリシーに、MetaピクセルとコンバージョンAPIで、閲覧の情報とフォームの入力内容(ハッシュ化したもの)をMetaに送り、広告の配信と効果の測定に使うことを書く
- フォームの送信ボタンの近くに、プライバシーポリシーへの案内を置く
- Cookieの同意のバナーを使っている場合は、同意しなかった人にピクセルを動かさない。ピクセルには
fbq('consent', 'revoke')とfbq('consent', 'grant')で送信を止めたり再開したりする仕組みがある - コンバージョンAPIで送るのは、同意を得ている人の分だけにする。n8nのワークフローで、フォームの同意の項目を見て送るかどうかを分ける
開発者向け資料では、同意の管理などで捨てられたイベントの数も概要に表示されます。同意しなかった人の分が減るのは正しい動きです。
法令で何が求められるかは、個人情報保護委員会の案内と、自社のプライバシーポリシーを作った人に確かめます。ここに書いたのは、運用の現場で最低限揃えている形です。
応用
成約をMetaに戻す
kintoneで成約になった問い合わせを、コンバージョンAPIで別のイベント(たとえばカスタムイベントの Contract)として送ると、Metaは見積り依頼のうち成約した人の傾向を知ることができます。見積り依頼のときと同じメールアドレス・電話番号のハッシュと、external_id(kintoneのレコード番号をハッシュ化したもの)を送ります。ただし、event_time は7日前までしか送れません。現地調査から成約まで2〜3週間かかるなら、成約した日を event_time にして、その日のうちに送ります。
広告の判断はkintoneで
ピクセルとコンバージョンAPIを入れても、広告マネージャの件数とkintoneの件数は一致しません。広告マネージャはアトリビューション設定で決めた日数のあいだの、広告をクリックした人や見た人の行動を広告の成果として数え(日数は広告セットの「アトリビューション設定」で確かめます)、kintoneは問い合わせ日で数えます。運用の現場では、管理画面のコンバージョンは多いのに、kintoneで成約まで追うと受注がほぼゼロの配信先がありました。計測を入れる目的は、広告マネージャの数字を合わせることではなく、Metaに正しい学習の材料を渡すことと、kintoneで判断できるように流入元を残すことです。
できないことと、その代わり
| できないこと | 理由 | 代わりの手 |
|---|---|---|
| ピクセルだけで全部の問い合わせを数える | 広告ブロックやブラウザのトラッキング防止で落ちる | コンバージョンAPIを足す |
| 7日より前の成約を送る | event_time は最大7日前まで | 成約した日にすぐ送る仕組みにする |
| 電話がつながったかをピクセルで数える | ピクセルが分かるのはタップまで | 通話の記録をkintoneに入れ、成約と合わせて判断する |
| 広告マネージャの件数とkintoneを一致させる | 数え方と計上日が違う | UTMで流入元を残し、kintoneで判断する |
| 同意しなかった人の分を補う | 同意しない人の分は送らないのが正しい | 件数が減ることを前提に、kintoneの成約で判断する |
| 作る人がいない状態で自作する | APIの仕様が変わったときに直せない | パートナー連携から始める。作り込みが要るなら代理店や制作会社に頼む |
よく詰まるところ
| 症状 | 原因 | 直し方 |
|---|---|---|
| Leadが2倍に数えられる | ピクセルとコンバージョンAPIでイベントIDが違う、または入っていない | 同じIDを両方に渡す。概要の重複の除外で率を見る |
| PageViewが2回ずつ届く | GTMとWordPressのプラグインの両方でピクセルが入っている | Meta Pixel Helperで確かめ、片方を止める |
| Leadが入力エラーのときも数えられる | 送信ボタンのクリックでイベントを送っている | 送信成功(完了ページの表示)で送る |
| コンバージョンAPIのリクエストが全部エラー | 7日より古いイベントが混ざっている | 古いものを除き、発生したらすぐ送る |
| イベントマッチ品質が低い | メール・電話番号・fbp・fbcを送っていない、またはハッシュ化の前の正規化が違う | 正規化の決まりどおりに直し、送る項目を足す |
| テストのイベントが成果に入った | test_event_code を付けたまま本番で送っている | 本番の送信から外す。テストのレコードはkintoneの集計から外す |
| 「アクセストークンを生成」が出ない | 開発者の権限がない | ビジネスポートフォリオで権限を付けてもらう |
| 広告セットの成果イベントにLeadが出ない | 広告アカウントにデータセットが割り当てられていない、またはLeadが届いていない | 割り当てを確かめ、テストイベントで届くかを見る |
| 代理店が辞めたら計測が止まった | ピクセルを代理店のビジネスポートフォリオで作っていた | 会社のビジネスポートフォリオで作り直し、代理店にはパートナーとして共有する |
次にやること
計測が整ったら、Google広告の計測と揃えて、広告の判断に使います。
- 広告のコンバージョン計測の設計:問い合わせ・電話・LINEを媒体ごとに数える
- Google広告のコンバージョン設定:タグ・電話・拡張コンバージョン・オフラインの取り込み
- Meta広告とは:Facebook・Instagramに出す広告の仕組みと費用
- Meta広告のターゲティング:Advantage+オーディエンス・カスタムオーディエンス・類似オーディエンス