Server-to-Server - Web S2S 実装ガイド

概要

Web Server-to-Server(Web S2S)は、モバイル V1 連携と同じ EVENT エンドポイントを使用して、Web のコンバージョンイベントおよびエンゲージメントイベントをサーバーから直接 Singular に送信します。Web パスは、platform パラメーター p=Web によって区別されます。

Web S2S は ブラウザー支援型アーキテクチャ です。アトリビューションに関連するいくつかの値は、ブラウザーでのみ取得可能です。 location.href document.referrer 、およびブラウザーの userAgent は、バックエンドで再構築することはできません。軽量なクライアントサイドスニペットがこれらの値を収集し、エンドポイントを直接呼び出すか、またはそれらをバックエンドに転送し、バックエンドが S2S 呼び出しを行う必要があります。

Web には SESSION エンドポイントはありません 。最初の __PAGE_VISIT__ コンバージョンイベントがモバイルの launch 呼び出しに代わり、その訪問のアトリビューションのベースラインを確立します。

Web S2S は、認証、エンコーディング、および共通パラメーターの規約を、S2S スイートの他の部分と共有します。 S2S 基本ハブ および EVENT エンドポイントリファレンス を参照してください。


エンドポイント

Web S2S は、モバイル V1 EVENT エンドポイントと同じホストおよびパスを使用します。リクエストを Web アトリビューションパス経由でルーティングするには、 p=Web を設定します。

GET https://s2s.singular.net/api/v1/evt

SDID の生成と永続化

Singular デバイス ID( sdid )は、1 つのブラウザーからのすべてのイベントを 1 台の Web デバイスに紐付けます。最初のページ読み込み時に、 localStorage global_singular_id が存在しない場合は、UUID v4 を生成して保存します。 localStorage がクリアされるまで、そのブラウザーからのすべてのイベントで同じ値を sdid として再利用します。

ページ上に Web SDK が存在する場合は、新しい値を生成するのではなく、Web SDK が global_singular_id にすでに設定した値を再利用してください。

function getOrCreateSDID() {
  var KEY = 'global_singular_id';
  var sdid = localStorage.getItem(KEY);
  if (!sdid) {
    sdid = crypto.randomUUID(); // UUID v4
    localStorage.setItem(KEY, sdid);
  }
  return sdid;
}

__PAGE_VISIT__ パターン

新しい訪問の最初のイベントは、必ず conversion_event=true を指定した __PAGE_VISIT__ でなければなりません。これにより、後続のイベントが継承するアトリビューションのベースラインが確立されます。

同じブラウザーが 別のキャンペーン (異なる UTM またはパートナー)から戻ってきた場合は、そのたびに conversion_event=true を指定した新しい __PAGE_VISIT__ を送信してください。同じ sdid を再利用し、その訪問の他のイベントよりも前に __PAGE_VISIT__ を送信してください。

非コンバージョンイベント(例えば sng_registration_complete sng_purchase )は、 conversion_event=false を使用し、 attribution_data 省略します 。これらは、直近の __PAGE_VISIT__ からアトリビューションを継承します。

コンバージョンイベントより前に到着した非コンバージョンイベントは、バックエンドがマッチを待つ間、1 分間遅延されます。

custom_user_id のルール

  • 登録またはログイン後、およびそれ以降のすべてのイベントに custom_user_id を含めてください。
  • これを localStorage またはファーストパーティ Cookie に永続化してください。
  • ログアウト時には削除してください。
  • PII は決して含めないでください。ハッシュ化された ID または内部 ID を使用してください。

パラメーター

Web SDK は __PAGE_VISIT__ でおよそ 40 個のパラメーターを送信しますが、そのほとんどは SDK 内部のテレメトリであり、S2S の開発者が再現すべきものではありません。以下の表では、必須および推奨のパラメーターセットのみを扱います。

認証( a )およびその他の共有規約は、ハブに一度だけ記載されています。 S2S 基本ハブの共通パラメーター を参照してください。

必須パラメーター

パラメーター 詳細
a

string

ダッシュボードから取得した Singular API キー。 共通パラメーター を参照してください。

例: myapikey_123

p

string

プラットフォーム。Web S2S では常に Web です。この値により、リクエストが Web アトリビューションパス経由でルーティングされます。

例: Web

i

string

Singular における Web アプリ/サイトのバンドル ID。Web SDK の Product ID と一致している必要があります。Settings > Apps > 該当の Web アプリを展開 > Bundle ID で確認できます。

例: com.example.site

n

string

イベント名。訪問の最初のイベントは __PAGE_VISIT__ でなければなりません。

例: __PAGE_VISIT__

sdid

UUID

Singular デバイス ID。Web SDK が設定した値( global_singular_id )を使用してください。自身で設定する場合は、UUID v4 を生成し、そのブラウザーからのすべてのイベントで再利用してください。

例: 3730aecb-47ba-4d13-bd17-52b4b700956f

conversion_event

boolean

アトリビューションイベント( __PAGE_VISIT__ )の場合にのみ true を設定します。コンバージョンイベントより前に到着した非コンバージョンイベントは、バックエンドがマッチを待つ間、1 分間遅延されます。

例: true

attribution_data

JSON

広告ネットワークからのクリックスルーデータ。URL エンコードされた JSON です。 __PAGE_VISIT__ では必須です。非コンバージョンイベントでは省略してください。 attribution_data を参照してください。

例: %7B%22partner_name%22%3A%22Snapchat%22%2C%22is_attributed%22%3A%22true%22%7D

custom_user_id

string

自社の内部ユーザー ID。PII は含めないでください。登録/ログイン後、およびそれ以降のイベントに含め、ログアウト時には削除してください。

例: pid123abc

ip

string

イベント発生時のデバイスの IP。

例: 104.220.23.123

web_url

string

マーケティングパラメーターを含む、コンバージョンのランディングページ URL。これはマーケティングパラメーターを含んでいた最後の URL であり、SDID と同様に保存され再利用されます。バックエンドがアトリビューションのタッチポイントを作成するために使用します。 web_page_url とは異なります。

例: http://my.landing.page/?utm_campaign=test&utm_source=test

パラメーター 詳細
device_user_agent

string

ブラウザーのユーザーエージェント( navigator.userAgent )。ブラウザーでのみ取得可能です。クライアントサイドで収集してください。

例: Mozilla/5.0 ...

web_page_referrer

string

現在のページのリファラー( document.referrer )。取り込まれ、アトリビューション(オーガニックのソース/タイプ分類)に使用されます。ブラウザーでのみ取得可能です。クライアントサイドで収集してください。イベントログのみに使用される document_referrer とは異なります。

例: https://www.google.com/

timezone

string

デバイスのタイムゾーン。

例: America/New_York

os

string

デバイスのオペレーティングシステム。

例: iOS

screen_width

integer

画面の幅(ピクセル単位)。

例: 390

screen_height

integer

画面の高さ(ピクセル単位)。

例: 844

utime

integer

イベント時刻(UNIX 時間、秒単位)。

例: 1751500800

URL とリファラーのパラメーター — 混同しないでください。 web_url web_page_referrer はアトリビューションに関連し、パイプラインで使用されます。 web_page_url (現在のページ、 window.location.href )と document_referrer イベントログのみ に使用され、アトリビューションのためには黙って破棄されます。 web_page_url document_referrer を、アトリビューションに影響することを期待して送信しないでください。

デバイス識別情報や上記に記載されていないその他の共有パラメーターについては、ここで再度記載するのではなく、 S2S 基本ハブの共通パラメーター を参照してください。


attribution_data

attribution_data パラメーターは、広告ネットワークからのクリックスルーデータを URL エンコードされた JSON として保持します。 __PAGE_VISIT__ コンバージョンイベントでのみ送信してください。

{
  "partner_name": "Snapchat",
  "is_attributed": "true",
  "touch_timestamp": "",
  "partner_campaign_id": "",
  "partner_campaign_name": "Snap_campaign_1234",
  "partner_creative_id": "",
  "partner_creative_name": "",
  "partner_keyword": "",
  "partner_site": "",
  "partner_site_id": "",
  "partner_site_name": "",
  "partner_sub_site": "",
  "partner_sub_site_name": "",
  "partner_subcampaign_id": "",
  "partner_subcampaign_name": "",
  "_p": ""
}

必須フィールド

フィールド 詳細
partner_name

string

Web パラメーター wpsrc または utm_source からマッピングされます。

例: Snapchat

is_attributed

string

アトリビューションされたイベントには true を設定します。

例: true

partner_campaign_name

string

Web パラメーター wpcn または utm_campaign からマッピングされます。

例: Snap_campaign_1234

任意フィールド

フィールド 詳細
touch_timestamp

integer

タッチポイント時刻(UNIX 秒)。

例: 1751500800

partner_campaign_id

string

Web パラメーター wpcid からマッピングされます。

partner_creative_id

string

Web パラメーター wpcrid からマッピングされます。

partner_creative_name

string

Web パラメーター wpcrn からマッピングされます。

partner_keyword

string

Web パラメーター wpkwn からマッピングされます。

partner_site_id

string

Web パラメーター wpsid からマッピングされます。

partner_site_name

string

Web パラメーター wpsn からマッピングされます。

partner_sub_site_name

string

Web パラメーター wpssn からマッピングされます。

partner_subcampaign_id

string

Web パラメーター wpscid からマッピングされます。

partner_subcampaign_name

string

Web パラメーター wpscn からマッピングされます。

e パラメーターでの Web クリック ID

パートナー Conversion API のサポート: SingularのConversion API連携を通じてこれらのイベントを広告ネットワークパートナーに転送するには、標準のオプションイベント属性(eventIdehashなどのハッシュ化されたファーストパーティデータ)を含めてください。Conversion API連携のための標準イベント属性を参照してください。

ネットワークのクリック ID は、各パートナーが期待する JSON キーを使用して、イベントの e ペイロードで渡します。

パートナー クリック ID キー
Snapchat ScCid
TikTok ttclid
Google gclid gbraid wbraid
DV360 dclid
Facebook fbclid
Reddit rdt_uuid

マーケティングパラメーターの検出。 ランディング URL が次のいずれかを含む場合、それをタッチポイントとして扱います。 utm_* 、Singular の wp* wpsrc wpcn wpcid など)、Singular の pc* / p* pcid pcn psrc など)、 clid 、または kw / an / ud 。マッチした場合は、完全な URL を web_url として保存し、コンバージョンイベントを発火します。


Web-to-App アトリビューション

Web キャンペーンのコンテキストをモバイルクリックに引き継ぐには、ランディングページから Singular Link を構築し、取得したランディングのクエリ文字列を追加します。これにより、マーケティングパラメーターがモバイルクリックに転送され、アプリのインストールをアトリビューションできるようになります。

ランディング時に、マーケティングパラメーターを含む場合は window.location.search (およびフラグメント)を取得し、永続化します。アプリストアリンクまたはスマートバナーリンクをレンダリングする際には、次のように構築します。

function buildWebToAppLink(baseLink, webUrl, deeplink, passthrough, deferredDeeplink) {
  var url = new URL(baseLink); // preserves existing base-link params
  if (webUrl) {
    var q = new URL(webUrl);
    var captured = q.search.slice(1) + (q.hash || ''); // landing query string (+fragment)
    url.searchParams.set('_web_params', captured); // URL-encoded on serialization
  }
  if (deeplink)         url.searchParams.set('_dl', deeplink);
  if (passthrough)      url.searchParams.set('_p', passthrough);
  if (deferredDeeplink) url.searchParams.set('_ddl', deferredDeeplink);
  return url.toString();
}
追加するパラメーター 詳細
_web_params

取得したランディング web_url の URL エンコードされたクエリ文字列(およびフラグメント)。UTM / wp* / pc* / clid のキャンペーンパラメーターをモバイルクリックに転送します。

_dl

ディープリンク引数。任意。

_p

パススルー引数。任意。

_ddl

遅延ディープリンク引数。任意。

正確性: SDID はリンクに 追加されません _dsid _sdid もありません)。これはキャンペーンパラメーターの転送であり、決定論的な SDID デバイススティッチングではありません。


クリップボードアトリビューション(遅延ディープリンク)

クリップボードアトリビューションは、遅延ディープリンクに対して決定論的なマッチを提供します。Web スニペットが一意のトークンをクリップボードに書き込み、新しくインストールされたアプリがそれを読み戻し、トークンの一致でマッチングします。

function openAppWithClipboardDdl(baseLink, deeplink, passthrough, deferredDeeplink) {
  // 1. Build the web-to-app link (see Web-to-App Attribution).
  var link = buildWebToAppLink(baseLink, capturedWebUrl, deeplink, passthrough, deferredDeeplink);

  // 2. Generate a UUID v4 and form the token.
  var uuid = crypto.randomUUID();
  var tokenUrl = location.protocol + '//' + location.hostname + '/__singular_ddl__/' + uuid;

  // 3. Write ONLY the token to the clipboard (execCommand fallback).
  copyToClipboard(tokenUrl);

  // 4. Append the token to the click as ecid.
  var url = new URL(link);
  url.searchParams.set('ecid', tokenUrl);

  // 5. Open the app / store.
  window.open(url.toString());
}

function copyToClipboard(text) {
  if (navigator.clipboard && navigator.clipboard.writeText) {
    navigator.clipboard.writeText(text);
    return;
  }
  var ta = document.createElement('textarea');
  ta.value = text;
  document.body.appendChild(ta);
  ta.select();
  document.execCommand('copy');
  document.body.removeChild(ta);
}

正確性: クリップボードが保持するのはトークン のみ です。SDID も、 _web_params も、ディープリンクも保持しません。マッチはトークンの一致(クリックの ecid がクリップボードのトークンと等しい)であるため、新しくインストールされたアプリは決定論的にマッチします。

クリップボードへの書き込みは、 ユーザージェスチャーハンドラー (クリック)内で実行する必要があります。そうしないとブラウザーがブロックします。iOS Safari のクリップボード制約に注意してください。

初回起動時にクリップボードを読み取ることは、この Web スニペットではなく、アプリ側(アプリ独自のモバイル SDK/S2S 連携)の担当です。


イベントシーケンスの例

初回訪問と登録

  1. ユーザーが Google Ads から到着します。最初のページ訪問を送信します。

    • n=__PAGE_VISIT__
    • conversion_event=true
    • sdid=3730aecb-47ba-4d13-bd17-52b4b700956f
    • attribution_data={ "partner_name": "googleadwords_int", "is_attributed": "true", "partner_campaign_name": "brand_us_en" }
  2. ユーザーが登録します。登録イベントを送信します。

    • n=sng_registration_complete
    • conversion_event=false
    • sdid=3730aecb-47ba-4d13-bd17-52b4b700956f (同じ SDID)
    • custom_user_id=user_12345abc
    • attribution_data なし

新しいキャンペーンから戻ってきたユーザー

  1. 同じブラウザーが別のキャンペーンから戻ってきます。新しいページ訪問を送信します。

    • n=__PAGE_VISIT__
    • conversion_event=true
    • sdid=3730aecb-47ba-4d13-bd17-52b4b700956f (同じ SDID)
    • attribution_data={ "partner_name": "facebook", "is_attributed": "true", "partner_campaign_name": "retargeting_Q1" }
  2. ユーザーが購入します。購入イベントを送信します。

    • n=sng_purchase
    • conversion_event=false
    • sdid=3730aecb-47ba-4d13-bd17-52b4b700956f (同じ SDID)
    • 永続化された custom_user_id
    • attribution_data なし