1分で読了連携

Salesforceのリンククリックトラッキング:クリックをContactレコードに記録する

Salesforceは自社が送信したメール内のクリックしか追跡しません。ショートリンクのクリックをレコードに記録する3つの方法と、メール以外でも機能する唯一の方法を解説します。

Marius Voß
DevRel · edge infra
ショートリンクのクリックがWebhookとして届き、SalesforceのContactとCampaign Memberに紐づくクリックレコードになる様子

Salesforceがクリックを記録するのは、そのリンクをSalesforce自身が送信した場合だけです。Account Engagementは自社のメール内のURLを書き換えてクリックを見込み客に紐付け、カスタムリダイレクトはそれを他所に貼り付けたリンクにまで拡張します。ネイティブにできることは、これで全部です。

それ以外に会社が送るものは何であれ、CRMにクリックを残しません。担当者が自分のメールボックスから送るフォローアップ、SMSシーケンス、カンファレンス会場のQRコード、有料広告、パートナーのニュースレター - すべて見えません。このギャップを埋めるには、自社で保有するトラッキングリンクと、Salesforceに書き込むWebhookが必要です。そして面白い判断が求められるのは、どう送るかではなく、何を書き込むかの方です。別のCRMで同じ問題を扱った記事として、HubSpotのリンククリックをコンタクトタイムラインに反映するが統合の形を解説しています。

ネイティブツールがカバーする範囲

仕組みは2つあり、どちらもSalesforceが送信したメッセージに限定されています。

Account Engagementのメールリンクトラッキングは、各リンクをトラッカーサブドメイン経由で書き換えるので、クリックはメールを送られた見込み客に対して記録されます。よく機能しますが、それはそこだけの話です。

カスタムリダイレクトはもう一歩進んだ仕組みです。トラッキングURLを生成してバナーやSNS投稿、ドキュメントで使うと、クリックが見込み客のアクティビティとして表示されます。この有用性を左右する制約が2つあります。同じ見込み客からの繰り返しクリックは一定期間内でスロットリングされるため、件数は意図的に生の合計値ではありません。そして特定の見込み客への帰属は、訪問者が既に識別済みであることに依存します。コールドトラフィックの場合、これはクリックが人物と紐付かないまま記録されることを意味します。

Marketing Cloudにも同じ原則に基づく独自のトラッキングリンクモデルがあります。自分が送信したものを計測する、という原則です。

これは批判ではありません。あくまでスコープの話であり、そのスコープを知ることで、3つ目のルートが何のためにあるのかが正確にわかります。

ギャップとその埋め方

パターンは短いものです。短縮ツールが各クリックでWebhookを発火します。エンドポイントがそれを受信し、検証し、レコードに変換します。

3つの実装上の選択が、これが週末で終わる作業になるか、繰り返し発生するインシデントになるかを分けます。

直接書き込むのではなく、Platform Eventをパブリッシュしてください。Platform Eventは、取り込みと「クリックが何を意味するか」という判断を切り離します。統合側はLink_Click__eをパブリッシュするだけで、それがCampaign Memberを更新するのか、タスクを作成するのか、あるいはこのキャンペーンでは何もしないのかは、サブスクライバー側が決めます。マーケティングがクリックによって何をトリガーすべきかの方針を変えたときも、Webhookコンシューマーではなく、Flowを編集するだけで済みます。

ペイロードを信頼する前に署名を検証してください。エンドポイントは定義上パブリックです。共有シークレットに対してHMACをチェックし、一致しなければ拒否し、自分が発行したものと照合せずにリクエストボディからContact IDを取り出すことは絶対にしないでください。

クリックIDで重複排除してください。Webhookの配信はタイムアウト後にリトライされるため、同じクリックが2回届くことがあります。IDを保存し、書き込みを冪等にしてください。そうしないと、1回のタップから同一のクリックレコードが4件もContactに残るような事態になります。リンクAPIのレート制限と冪等性では、アウトバウンド側での同じ規律を解説しています。

ショートリンクへのクリックが署名付きWebhookとPlatform Eventを通過し、Salesforceのクリックレコードとキャンペーンメンバー更新に至る流れ

クリックを人物に正直に紐付ける

統合がこっそり嘘をつきがちなポイントなので、はっきり述べておく価値があります。

クリックが運ぶ情報は、そのリンクが運んでいた情報だけです。受信者ごとに個別のショートリンクを生成していれば、ペイロードは受信者を特定でき、自信を持ってそのレコードに書き込めます。400人が同じリンクを受け取っていた場合、手元にあるのは400件のクリックと、名前のないデータであり、どんなに巧妙なジョインを組んでもそれらを取り戻すことはできません。

だからユースケースごとに判断してください。アウトバウンドシーケンスや1対1のフォローアップなら、メッセージがキューに入るタイミングでAPI経由で生成する受信者ごとのリンクが正当化されます。広範なキャンペーンではそうはいかず、キャンペーンレベルの件数こそが誠実なアウトプットです。キャンペーンごと、媒体ごと、リンクごとのクリックを、個人ではなくCampaignオブジェクトに紐付けます。B2B営業チーム向けURL短縮ツールでは、受信者ごとのバージョンが元を取れる場面を解説しています。

絶対にやってはいけないのは、IPアドレスやタイミングの一致から身元を推測することです。それはパイプラインレポートを汚染するほど頻繁に間違っており、欧州ではわざわざ弁明したくなるような処理判断でもあります。

今まさに構築しようとしていますか?Elidoのwebhooksはすべての配信に署名し、バックオフ付きでリトライします。そしてドキュメントのwebhookリファレンスには、これからマッピングすることになるクリックペイロードのフィールド一覧があります。

何を、どこに書き込むか

4つの書き込み先があり、必要な検討量が少ない順に並べます。

  • カスタムクリックオブジェクト。 ContactとCampaignへのルックアップを持つClick__cに加え、リンク、キャンペーンパラメータ、国、デバイス、タイムスタンプ。これが長期的に使える選択肢です。レポーティングは高速なまま、アクティビティフィードも読みやすいままです。
  • Campaign Memberステータス。 初回クリックでメンバーをSentからRespondedに移行させることは、既存のすべてのキャンペーンレポートにそのまま反映されるため、ここで最も有用な自動化です。
  • タスク。ただし控えめに。 担当者がフィードでそのタッチに気づくべき高価値なリンクには有用です。デフォルトの選択肢としては最悪で、週に数千件のタスクが他のすべてを埋もれさせてしまいます。
  • Contact上のロールアップフィールド。 最終クリック日と累計件数は維持コストが低く、担当者が関連リストを開かなくても大半の質問に答えられます。

キャンペーンパラメータは、後でパースするのではなくフィールドにマッピングしてください。クリックレコード上のutm_campaignがあれば、セールスオペレーションのレポートは何ともジョインすることなくキャンペーンごとにグループ化できます。

Salesforceのクリックトラッキングをセットアップする4つのステップ:Platform Eventの作成から署名検証、キャンペーンメンバーの自動化まで

ボリュームは誰も計画していない制約

クリックはバーストで到着します。5万人へのニュースレターは最初の10分間で数千件のクリックを生み出し、素朴な統合はそのひとつひとつをAPI呼び出しに変換してしまいます。

Salesforceの組織には1日あたりのAPI割り当てがあり、Platform Eventのパブリッシュにも独自のクォータがあります。この計算はローンチ中ではなく、その前にやっておく価値があります。1分あたりのピーククリック数を自分の割り当てと照らし合わせると、たいていクリックごとの書き込みは収まらないという答えになります。

抜け道は3つあり、推奨順に並べます。閾値イベントだけをパブリッシュし、CRMにはすべてのクリックではなく3回目のクリックだけを知らせる。自分側で集計し、キャンペーンレベルのレポーティング用に1時間ごとのサマリーを書き込む。あるいはバッチ処理で、イベントを短時間保持してからまとめて挿入する。クリックトラッキングにおけるWebhook対ポーリングでは、ボリュームがまったく逆方向を示唆する場合のトレードオフを解説しています。

これが失敗するのをちょうど一度だけ見たことがあります。ローンチ当日の午前9時のことでした。プレッシャーの中での修正は、事前に設計しておいた修正よりも常に粗くなるものです。

信頼する前にテストする

5つのチェックを行ってください。署名付きのテストクリックを送り、キャンペーンが紐付いたレコードになることを確認します。同じクリックを2回送り、レコードが1件だけになることを確認します。未知のContactへのクリックを送り、例外を投げるのではなく帰属先不明の行として着地することを確認します。誤った署名でペイロードをリプレイし、拒否されることを確認します。そして低ボリュームで実際のキャンペーンを実行し、同じ期間について短縮ツール側の件数とレコード件数を突き合わせます。数パーセントの差は配信リトライが落ち着く過程によるもので、30パーセントの差はバグです。

コーナーストーン記事シリーズを読む

この記事はintegrationsクラスターに属しています。レポーティング側のコーナーストーン記事はマーケター向けURL短縮ツール、ペイロードの形式を詳しく扱っているのはリンクイベント向けWebhookです。

ブログ内の関連記事

よくある質問

Salesforceはリンククリックをネイティブに追跡しますか?

Salesforceが送信したリンクのクリックだけを追跡します。Account Engagementはメール内のリンクをトラッカーサブドメイン経由で書き換え、クリックを見込み客に記録します。カスタムリダイレクトを使えば、それ以外の場所に配置したリンクにも同じ仕組みを拡張できます。担当者自身のメールボックス、SMSキャンペーン、印刷されたコードなど、これらのツールの外で送られたものは、Salesforce上で一切クリックとして記録されません。

Account Engagementのカスタムリダイレクトとは何ですか?

Account Engagement内で生成されるトラッキングリンクで、クリックを見込み客レコード上のアクティビティとして記録します。バナー広告、SNS投稿、他所でホストされているファイルに向いています。実際には2つの制限が重要です。同じ見込み客による繰り返しのクリックは短い期間内でスロットリングされること、そしてリンクが人物を特定できるのは訪問者が既にクッキーで識別されている場合に限られることです。

ショートリンクのクリックをSalesforceに取り込むにはどうすればよいですか?

短縮ツールからSalesforceへWebhookを送信し、レコードを書き込みます。すっきりしたパターンは、Platform Eventをパブリッシュして、それをどう扱うかはサブスクライバー側に判断させることです。そうすれば、クリックはカスタムオブジェクトの行、タスク、あるいはCampaign Memberのステータス変更として着地しますが、統合側はそのどれになるかを知る必要がありません。署名を検証し、クリックIDで重複排除し、負荷がかかる状況ではバッチ処理してください。

特定のContactにクリックを紐付けることはできますか?

そのリンクがそのContact専用のものだった場合に限られます。400人にクリックされた単一のキャンペーンリンクは、400件の匿名クリックを生むだけで、ペイロードの中身が何であってもそれは変わりません。人物レベルのアトリビューションが重要な場合は受信者ごとにリンクを生成し、そうでない場合はキャンペーンレベルのレポーティングで妥協してください。

クリックはタスクにすべきですか、それともカスタムオブジェクトにすべきですか?

実際のボリュームが出てきたらカスタムオブジェクトです。タスクはアクティビティタイムラインに表示されるので便利ですが、週に数千行に達するとノイズになり、ストレージも肥大化します。連絡先とキャンペーンへのルックアップを持つカスタムクリックオブジェクトなら、レポーティングは高速なまま保たれ、アクティビティフィードに触れることなく件数を集計できます。

クリック量がSalesforceのAPI制限に達することはありますか?

すぐに達することがあります。活発なキャンペーンは、小規模組織の1日あたりのAPI割り当てよりも多くのクリックを1時間で生み出すことがあり、クリックごとに1回のAPI呼び出しを書くのは避けるべき間違いです。送信前に集計する、すべてのクリックではなく閾値イベントだけをパブリッシュする、あるいはスケジュールに沿ってバッチ処理するといった対策を取ってください。

Elidoを試す

URLを貼り付けて短縮リンクを取得

登録不要。リンクは30日間有効。永久に保存するには登録してください。

Free、登録不要 · 1日あたり2件

Elidoを試す

EUホスティングのURL短縮サービス。カスタムドメイン、詳細な分析、オープンAPI付き。無料プラン - クレジットカード不要。

タグ
salesforce link tracking
click tracking crm
platform events
custom redirects
webhooks
campaign member

続きを読む