本文へスキップ
AB Flows
ドキュメント目次

配信タグ(ab.js)の仕様

配信タグ ab.js の動作、振り分けロジック、アンチフリッカー、プレビューモード、設定APIの仕様を説明します。

最終更新日: 2026年9月9日

配信タグ ab.js とは、対象サイトに設置する AB Flows のクライアントサイド配信スクリプトです。実施中のテスト設定を取得し、訪問者をパターンに振り分け、DOM 変更やリダイレクトを適用し、表示とコンバージョンを計測します。サイズは約6KBで、依存ライブラリはありません。

設置方法

<script src="https://<AB Flowsのドメイン>/ab.js" data-project="<プロジェクトID>" async></script>
属性内容
srcAB Flows の ab.js の URL。設定APIと計測APIの接続先は、この URL のオリジンから自動的に決まります
data-projectプロジェクト ID。プロジェクト詳細画面に表示されるタグに含まれています
asyncページの読み込みをブロックしないための指定です

head 内のできるだけ上に設置すると、パターン適用までの時間が短くなり、ちらつきが減ります。同じページに複数回設置しても、2回目以降は実行されません。

実行の流れ

  1. スクリプトタグの data-project からプロジェクト ID を読み取ります。
  2. 訪問者 ID を localStorage から読み込みます。なければ生成して保存します。
  3. 前回取得したテスト設定のキャッシュを確認し、現在の URL に一致するテストがある場合(または初回)だけ、アンチフリッカーとして body を非表示にします。
  4. 設定 API GET /api/config/<プロジェクトID> から実施中のテスト一覧を取得します。
  5. 現在の URL に一致するテストごとに、パターンを決定して適用します。
  6. 表示(インプレッション)を計測 API POST /api/collect に送信し、ゴールの監視を開始します。
  7. 適用が終わったら body の非表示を解除します。

振り分けロジック

振り分けは決定論的で、同じ訪問者は再訪時も必ず同じパターンを見ます。

  • 訪問者 ID とテスト ID を組み合わせた文字列のハッシュ値(FNV-1a)を 0 以上 1 未満の数値に変換します。
  • 配信割合(traffic): ハッシュ値 × 100 がテストの配信割合以上なら、その訪問者はテスト対象外です。対象外の訪問者にはオリジナルがそのまま表示され、計測もされません。
  • パターンの比重(weight): 別のハッシュ値を各パターンの比重の合計に対する位置とみなし、該当するパターンを選びます。
  • 一度割り当てたパターンは localStorage に保存し、以降はハッシュ計算をせずに同じパターンを返します。テスト開始後にパターンの比重を変えても、割り当て済みの訪問者は変わりません。

パターンの適用

変更の種類動作
テキスト変更対象要素の textContent を置き換えます
HTML変更対象要素の innerHTML を置き換えます
非表示display: none !important を設定します
削除対象要素を DOM から取り除きます
スタイル変更インラインスタイルを追加します
属性変更属性名=値 の形式で属性を設定します
カスタムCSSstyle 要素として挿入します
カスタムJS適用後に実行します。エラーはコンソールに出力され、他の処理には影響しません

対象要素が見つからない場合は、MutationObserver で DOM の変化を監視し、最大3秒間リトライします。SPA や遅延描画されるページでも適用できます。

アンチフリッカー

オリジナルの表示が一瞬見えてしまう「ちらつき」を抑えるため、配信タグは body の不透明度を 0 にしてから設定を取得し、パターン適用後に戻します。

  • 非表示の上限は 1.2 秒です。設定取得が遅延しても、1.2 秒後には必ず表示されます。
  • 前回取得した設定を localStorage にキャッシュし、現在の URL に一致するテストがないと分かっているページでは非表示にしません。テスト対象外のページの表示速度には影響しません。
  • 設定の取得に失敗した場合も、すぐに表示に戻します。

計測

イベント送信タイミング重複の扱い
impression(表示)パターン割り当て時同じテストについて、同じセッション内では1回だけ送信します
conversion(コンバージョン)ゴール達成時同じ訪問者の同じテストについて、1回だけ送信します

送信には navigator.sendBeacon を使い、対応していない環境では fetch の keepalive オプションを使います。送信先は配信タグと同じオリジンの /api/collect です。

プレビューモード

対象ページの URL に ?_ab_preview=<パターンID> を付けてアクセスすると、そのパターンだけを適用し、振り分けと計測を行いません。下書き中のテストも確認できます。画面左下に「AB Flows プレビュー中(計測されません)」のバッジが表示されます。

localStorage / sessionStorage のキー

キー保存先内容
_ab_vidlocalStorage訪問者 ID
_ab_assignlocalStorageテスト ID ごとの割り当て済みパターン ID
_ab_conv_<テストID>localStorageコンバージョン送信済みフラグ
_ab_cfg_<プロジェクトID>localStorage前回取得したテスト設定(アンチフリッカー判定用)
_ab_ga4_imp_<テストID>localStorageGA4 への experience_impression 送信済みフラグ
_ab_imp_<テストID>sessionStorageセッション内の表示送信済みフラグ

localStorage が使えない環境(プライベートブラウジングなど)では、ページごとに訪問者 ID が変わるため計測の精度が下がりますが、表示は正常に行われます。

設定 API のレスポンス

GET /api/config/<プロジェクトID> は、そのプロジェクトで実施中(running)のテストだけを返します。

{
  "experiments": [
    {
      "id": "テストID",
      "type": "ab",
      "url_pattern": "https://example.com/lp",
      "url_match_type": "contains",
      "traffic": 100,
      "goal_type": "click",
      "goal_value": "#cta",
      "ga4_enabled": false,
      "variants": [
        { "id": "パターンID", "weight": 50, "redirect_url": "", "changes": [], "css": "", "js": "" }
      ]
    }
  ]
}
フィールド内容
typeab(A/Bテスト)または redirect(リダイレクトテスト)
url_match_typeexact、contains、regex
trafficテスト対象に含める訪問者の割合(0〜100)
goal_typepageview、click、custom、ga4
variants[].weightパターンの振り分け比重
variants[].changesビジュアルエディタで保存した DOM 変更の配列

レスポンスは短時間キャッシュされます(ブラウザ 15 秒、CDN 30 秒、再検証中の配信 60 秒)。テストの開始・停止は概ね 1 分以内に反映されます。

関連ドキュメント

AB Flows は無料で始められます。
クレジットカードの登録なしで、テストの作成・配信・レポート閲覧まで。

無料でテストを始める