メインコンテンツへスキップ
Pro プラン15 minutes中級

収益アトリビューションの設定

収益トラッキングとアトリビューションを設定しましょう — ステップバイステップの実装でトラフィックソースに購入を紐付けます。収益設定とベストプラクティスについて学びます。

revenueattributionsetuptracking
最終更新日:
Pro プラン

収益アトリビューションを設定して、実際の売上を生み出すマーケティングチャネルを追跡します。ステップバイステップの実装ガイドです。

必要な準備

開始する前に:

  • Zenovay トラッキングスクリプトがインストールされている
  • チェックアウト/購入コードへのアクセス権
  • 収益ゴールが有効になっている

基本的なセットアップ

シンプルな収益トラッキング

購入が完了したときに収益を追跡します:

// On order confirmation page or in success callback
zenovay('revenue', 99.99, 'USD');

これで基本的なトラッキングは完了です!

ゴール名を指定する

特定のゴールに関連付けます:

zenovay('goal', 'purchase', {
  value: 99.99
});

完全な実装

完全な収益オブジェクト

関連するすべてのデータを含めます:

zenovay('revenue', 149.99, 'USD', {
  // Recommended
  order_id: 'ORD-12345',

  // Optional - for detailed analysis
  items: [
    {
      id: 'SKU-001',
      name: 'Product Name',
      price: 49.99,
      quantity: 2,
      category: 'Electronics'
    },
    {
      id: 'SKU-002',
      name: 'Accessory',
      price: 50.00,
      quantity: 1,
      category: 'Accessories'
    }
  ],

  // Optional metadata
  coupon: 'SAVE10',
  shipping: 9.99,
  tax: 12.50
});

プラットフォーム別の実装

Shopify

Shopify ストアの場合:

  1. 設定 → 決済 に移動
  2. 「注文ステータスページ」に追加:
{% if first_time_accessed %}
<script>
  zenovay('revenue', {{ total_price | money_without_currency }}, '{{ currency }}', {
    order_id: '{{ order_number }}',
    items: [
      {% for item in line_items %}
      {
        id: '{{ item.sku }}',
        name: '{{ item.title | escape }}',
        price: {{ item.final_price | money_without_currency }},
        quantity: {{ item.quantity }}
      }{% unless forloop.last %},{% endunless %}
      {% endfor %}
    ]
  });
</script>
{% endif %}

WooCommerce

WordPress/WooCommerce の場合:

  1. テーマの functions.php またはプラグインに追加:
add_action('woocommerce_thankyou', 'zenovay_track_revenue');
function zenovay_track_revenue($order_id) {
    $order = wc_get_order($order_id);
    ?>
    <script>
    zenovay('revenue', <?php echo $order->get_total(); ?>, '<?php echo $order->get_currency(); ?>', {
        order_id: '<?php echo $order_id; ?>'
    });
    </script>
    <?php
}

React/Next.js

チェックアウト成功コンポーネント内:

import { useEffect } from 'react';

function OrderConfirmation({ order }) {
  useEffect(() => {
    if (order && window.zenovay) {
      window.zenovay('revenue', order.total, order.currency, {
        order_id: order.id,
        items: order.items.map(item => ({
          id: item.sku,
          name: item.name,
          price: item.price,
          quantity: item.quantity
        }))
      });
    }
  }, [order]);

  return <div>Thank you for your order!</div>;
}

サーバー側トラッキング

Enterprise プラン

安全なサーバー側トラッキングの場合、トラッキングコード付きのエンドポイントを使用します:

// Node.js example - use the tracking endpoint directly
app.post('/api/order/complete', async (req, res) => {
  const order = await processOrder(req.body);

  await fetch('https://api.zenovay.com/e/YOUR_TRACKING_CODE', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-Forwarded-For': req.headers['x-forwarded-for'] || req.socket.remoteAddress,
    },
    body: JSON.stringify({
      type: 'revenue',
      url: req.headers.referer || 'https://yoursite.com/checkout',
      revenue: order.total,
      order_id: order.id,
      currency: 'USD'
    }),
  });

  res.json({ success: true });
});

アトリビューション設定

アトリビューションモデル

Zenovay は事前に 1 つのモデルに決定することを強制しません。ウェブサイトのダッシュボードを開き、収益タブに移動して、Attribution カード上で直接モデルを切り替えられます。5 つのモデルが利用可能です:

  • Last Touch(デフォルト)
  • First Touch
  • Linear
  • Position-Based
  • Time-Decay

いつでもモデルを変更して、同じデータを別の角度から見られます。あらかじめ設定が必要な別の「デフォルトモデル」やアトリビューション期間の設定はありません。

アトリビューションモデルの選び方

Revenue タブの Attribution カードでは、レポートごとに 5 つのモデルを切り替えられます。知りたいことに合ったものを選んでください:

モデル適した用途
Last-Touch(デフォルト)何が成約を生むかを知りたい
First-Touch何が発見を促すかを知りたい
Linearジャーニー全体でバランスの取れた中立的な配分が欲しい
Position-Based発見(40%)と成約(40%)の両方を評価したい
Time-Decay販売サイクルが短い — 直近のタッチほど重みが大きい

選んだモデルは URL に保存されるため、リロードしても維持されます。ある期間のコンバージョンの大半が単一のセッションから発生した場合、マルチタッチモデルは Last-Touch と非常に似た結果になります — これは想定された動作で、マルチセッションのジャーニーが蓄積されるにつれて解消します。First-Touch と Last-Touch アトリビューションがどのように異なるかについては、First-touch vs last-touch attribution をご覧ください。

アトリビューションモデルがすべてほぼ同じ数値を示すのはなぜですか?

これは想定された動作であり、バグではありません。コンバージョン前に単一のセッションしか持たなかった、あるいは一つのチャネルにとどまっていた訪問者からのコンバージョンが大半を占める場合、すべてのモデルがそのチャネルに 100% のクレジットを付与します。そのため、Last-Touch、First-Touch、Linear、Position-Based、Time-Decay がほぼ同じ結果になります。

モデルの違いが現れるのは、コンバージョン前に複数の異なるチャネルとセッションを経由した訪問者が増えてからです。マルチセッションのジャーニーが蓄積されるほど、モデル間の差が大きくなります。

モデルを切り替えても AI チャネルは変わりません — AI トラフィックはどのモデルでも常に AI 専用チャネルに計上されます。

ヒント: モデルの違いを最も大きく確認するには、First-Touch と Last-Touch を比較してください。訪問者の最初と最後のチャネルが異なるときに、この 2 つは乖離します。

金銭的な価値が設定されていないコンバージョンも、コンバージョンアトリビューションとしてカウントされます。収益の数値は、ゴールに収益が紐付いている場合にのみ表示されます。

AI がアトリビューションチャネルとして機能する

Zenovay は、Direct、Organic、Paid、Social、Referral と並んで、アトリビューションパネルに AI を独立したチャネルとして表示します。コンバージョンした訪問者が AI トラフィックと判定された場合、そのコンバージョンは Direct や UTM チャネルにまとめられず、AI に計上されます。

AI の行を展開すると、AI 製品ごとに内訳を確認できます。

  • 特定された製品 — ChatGPT、Claude、Perplexity、Gemini、Copilot、DeepSeek など。訪問が識別可能な AI リファラーまたは UTM パラメータを伴っていた場合に表示されます。
  • Likely AI (unspecified)(推定 AI・製品不明) — リファラーなしで到達したものの、Dark AI ヒューリスティックによって AI 由来と判定された訪問者です。特定の製品に紐付けられないため、推測せず、このラベルのもとに正直にまとめられます。

留意点:

  • これはコンバージョンのビューです。選択した期間に訪問はあってもアトリビューション可能なコンバージョンがない AI 製品はここには表示されません — 製品別の AI トラフィックAI Influence ビューをご利用ください。
  • Likely AI (unspecified)(推定 AI・製品不明)だけが表示されるのはデータ欠落ではなく正確な状態です。その期間の AI コンバージョンが、名前付きリファラーなしでヒューリスティックにより検出されたことを意味します。
  • AI アトリビューションは認証済みのダッシュボードに表示されます。公開ダッシュボードや共有ダッシュボードには意図的に表示されません。

クロスデバイスアトリビューション

Enterprise プラン

デバイス間で追跡:

  1. ユーザーがログインしたときに識別
  2. ジャーニーが自動的に接続
  3. 完全なパスが表示
// When user logs in
zenovay('identify', userId);

UTM パラメータの設定

キャンペーン追跡

UTM パラメータが使用されていることを確認:

https://yoursite.com/?utm_source=google
                     &utm_medium=cpc
                     &utm_campaign=spring_sale
                     &utm_content=banner_1

UTM パラメータ

パラメータ目的
utm_sourceトラフィックソースgoogle, facebook
utm_mediumマーケティング媒体cpc, email
utm_campaignキャンペーン名spring_sale
utm_content広告バリエーションbanner_a
utm_termキーワードblue shoes

テスト設定

デバッグモード

デバッグログを有効化:

zenovay('debug');

次に、テスト購入を追跡してコンソールを確認します。

テスト購入

  1. テスト注文を実行
  2. ブラウザコンソールを確認
  3. リアルタイムビューで確認
  4. 収益レポートで確認

検証チェックリスト

  • 収益値が正しい
  • 注文 ID が記録されている
  • 商品がトラッキングされている(送信される場合)
  • ソースが正しく属性付けられている
  • 通貨が正しい

エッジケースの処理

繰り返し収益

サブスクリプションの場合:

// Track initial purchase
zenovay('revenue', 29.99, 'USD', {
  order_id: 'SUB-001',
  type: 'subscription',
  interval: 'monthly'
});

// Track renewals
zenovay('revenue', 29.99, 'USD', {
  order_id: 'SUB-001-RENEWAL',
  type: 'subscription_renewal',
  original_order: 'SUB-001'
});

払い戻し

払い戻しを適切に処理:

// Track refund
zenovay('revenue', -49.99, 'USD', {
  order_id: 'REFUND-ORD-12345',
  type: 'refund',
  original_order: 'ORD-12345'
});

部分的な発送

収益が発送時に認識される場合:

// Track each shipment
zenovay('revenue', 50.00, 'USD', {
  order_id: 'ORD-12345-SHIP-1',
  parent_order: 'ORD-12345'
});

データ品質

重複を防止

収益が二重に追跡されないようにする:

// Using localStorage to prevent duplicates
function trackOrderOnce(order) {
  const tracked = localStorage.getItem(`tracked_${order.id}`);
  if (tracked) return;

  zenovay('revenue', order.total, 'USD', {
    order_id: order.id
  });

  localStorage.setItem(`tracked_${order.id}`, 'true');
}

送信前に検証

データ品質をチェック:

function trackRevenue(orderData) {
  // Validate
  if (!orderData.value || orderData.value <= 0) {
    console.warn('Invalid order value');
    return;
  }

  if (!orderData.order_id) {
    console.warn('Missing order ID');
    return;
  }

  // Track
  zenovay('revenue', orderData.value, orderData.currency || 'USD', {
    order_id: orderData.order_id
  });
}

トラブルシューティング

収益が表示されない

収益が表示されない場合:

  1. トラッキングが実行されていることを確認

    • デバッグモードは有効ですか?
    • コンソールエラーはありますか?
  2. ゴール設定を確認

    • 収益ゴールが作成されていますか?
    • ゴールはアクティブですか?
  3. タイミングを確認

    • ページが完全に読み込まれた後ですか?
    • 正しいコールバック内ですか?
  4. データを検証

    • 値は数値ですか?
    • $0 ではありませんか?

アトリビューションが不足

ソースが属性付けられない場合:

  1. UTM パラメータが存在することを確認
  2. リファラーがブロックされていないことを確認
  3. Revenue タブの Attribution カード上で別のアトリビューションモデルを試してください
  4. 変換訪問が実際にトラッキングされていることを確認してください(リアルタイムビューを確認)

金額が一致しない

合計が会計と異なる場合:

  1. 日付範囲を比較
  2. 払い戻しを確認
  3. 通貨処理を確認
  4. 欠落した注文を探す

セキュリティに関する考慮事項

クライアント側トラッキングの制限

認識しておくべき点:

  • 値は操作される可能性がある
  • 請求目的ではない
  • 分析のみ

精度のためのサーバー側

重要な精度のために:

  • サーバー側トラッキングを実装
  • バックエンドに対して検証
  • レポートに使用

決済プロセッサーを接続する(サーバー間連携)

サポートされている決済プロセッサーを既に使用している場合、チェックアウトコードを変更する代わりに、アカウントを Zenovay に接続できます。Zenovay はプロセッサーから webhook を受け取り、捕捉した各支払いを元のセッションに属性付け、収益ダッシュボードを自動で更新します — クライアント側での zenovay('revenue', …) 呼び出しは不要です。

Revenue 設定タブでは、Stripe、PayPal、Paddle を接続できます。各プロセッサーにはステップバイステップのセットアップガイドがあります:

プロセッサーセットアップガイドトラッキング対象
StripeStripe 収益連携決済、払い戻し、サブスクリプション請求
PayPalPayPal 収益連携決済と払い戻し
PaddlePaddle 収益連携決済と払い戻し

Revenue 設定タブでプロセッサーを選択し、認証情報を貼り付けるだけで、Zenovay が残りを処理します。

Webhook 取り込みを JS トラッカーよりも選ぶべき場合:

  • サーバー側での正確性 — webhook ペイロードはプロセッサーが署名しており、ブラウザや広告ブロッカーによって改ざんされません。
  • チェックアウトコードの変更が不要 — ウェブサイトのダッシュボードを開き、設定の収益タブに移動して、プロセッサーを選択し、認証情報を貼り付けるだけです。
  • 払い戻しが自動で処理される — プロセッサーのダッシュボードで払い戻しが発行されると、Zenovay がそれを記録します。

JS トラッカーを継続して使用すべき場合:

  • プロセッサーが webhook に含めていない商品単位のデータ(items[])が必要
  • サポートされていないプロセッサーを使用している
  • 顧客が完了ページに到達した瞬間にリアルタイム訪問者ビューに注文を表示させたい(webhook は数秒遅れて到着)

同一サイトで両方の方法を使用することも可能です — Zenovay は order_id で重複排除するため、同じ注文が二重に集計されることはありません。

次のステップ

この記事は役に立ちましたか?