メインコンテンツへスキップ
4分で読めます

Ghost インテグレーション

任意の Ghost パブリケーション(Ghost(Pro)・セルフホスト Ghost CMS・Ghost Cloud)に 2 分で Zenovay を追加できます。Ghost の Code Injection はすべてのプランで完全に公開されているため、このインテグレーションは無料ティアのクリエイターとセルフホストのパブリッシャーの両方で動作します。

Code Injection はセルフホスト Ghost CMS を含むすべての Ghost プランで利用できます。アップグレードは不要です。


クイックスタート

ステップ場所操作
1Zenovay ダッシュボードトラッキングスニペットをコピーする
2Ghost 管理画面 → Settings → Code injection → Site Header貼り付ける
3保存Save をクリックする
4Zenovay ダッシュボード約 30 秒以内にリアルタイムビジターが表示される

方法 1: Site Header injection(推奨)

Ghost の Code Injection パネルは、テーマがレンダリングするすべてのページの <head> に生の HTML を書き込みます。これにはホームページ、投稿、ページ、タグ、著者、メンバーシップフローが含まれます。

手順

  1. Ghost 管理パネルにログインします(通常 https://your-site.com/ghost/)。
  2. 左サイドバーから Settings(ギアアイコン)をクリックします。
  3. Site → Code injection までスクロールします。
  4. Site Header ボックスに以下を貼り付けます。
<script defer data-tracking-code="YOUR_TRACKING_CODE" src="https://api.zenovay.com/z.js"></script>
  1. Save をクリックします。

確認する

プライベートブラウザウィンドウで Ghost サイトを開き、ソースを確認します。<head></head> の間に <script defer data-tracking-code=...> が表示されているはずです。Zenovay の リアルタイムビュー に約 30 秒以内に自分のアクセスが表示されます。


方法 2: 投稿ごと / ページごとの注入

特定の投稿やページのみをトラッキングする場合(例: 有料ニュースレターの告知)、エディターで投稿を開き、投稿レベルの Code Injection を使用します。

  1. エディターで投稿またはページを開きます。
  2. 右上のギアアイコン(設定)をクリックします。
  3. 下にスクロールして Code injection を展開します。
  4. Post Header にスニペットを貼り付けます。
  5. 投稿を更新します。

投稿ごとの Code Injection はサイト全体の Code Injection の後に追加されます。両方にトラッカーを貼り付けると二重カウントになります。


カスタムイベントをトラッキングする

トラッカーの読み込み後、任意の Ghost テーマテンプレート、Code Injection ブロック、または投稿の Markdown HTML 埋め込みから window.zenovay() を呼び出せます。

ニュースレター登録をトラッキングする

Ghost のサインアップフォームは成功時に members:signup カスタムイベントを発行します。Site Header → Code injection にこれを追加します(トラッカー行の後)。

<script>
  document.addEventListener('DOMContentLoaded', () => {
    document.addEventListener('submit', (e) => {
      const form = e.target;
      if (form?.matches('[data-members-form]')) {
        if (window.zenovay) {
          window.zenovay('track', 'signup', {
            form_type: form.dataset.membersForm || 'signup',
            page: window.location.pathname,
          });
        }
      }
    }, true);
  });
</script>

有料サブスクリプションのクリックをトラッキングする(Subscribe / Upgrade

Ghost は data-portal 属性付きのサブスクライブ / ポータルトリガーボタンをレンダリングします。クリックをリッスンします。

<script>
  document.addEventListener('DOMContentLoaded', () => {
    document.addEventListener('click', (e) => {
      const target = e.target.closest('[data-portal]');
      if (target && window.zenovay) {
        window.zenovay('track', 'portal_opened', {
          action: target.dataset.portal,
          page: window.location.pathname,
        });
      }
    }, true);
  });
</script>

メンバーを識別する

Ghost は /members/api/member/ を通じて現在のメンバーを公開しています。すべてのページで取得して識別します。

<script>
  fetch('/members/api/member/', { credentials: 'include' })
    .then(r => r.ok ? r.json() : null)
    .then(member => {
      if (member && window.zenovay) {
        window.zenovay('identify', {
          userId: member.uuid,
          email: member.email,
          name: member.name,
          plan: member.subscriptions?.[0]?.plan?.nickname,
        });
      }
    })
    .catch(() => {});
</script>

有料コンバージョンをトラッキングする

有料メンバーシップの収益アトリビューションには、Ghost の Stripe Webhook インテグレーションを使用して、サーバーサイドトラッキング API 経由で Stripe イベントを Zenovay に送信します。クライアントサイドのトラッキングでは、ユーザーがタブを閉じた後に完了するサブスクリプションイベント(Ghost はレシートを非同期でメール送信します)を記録できません。

サーバーサイドのクイックな例(自分の Webhook レシーバーの Node.js):

// Forward Stripe checkout.session.completed → Zenovay
app.post('/webhooks/stripe', async (req, res) => {
  const event = req.body;
  if (event.type === 'checkout.session.completed') {
    const session = event.data.object;
    await fetch('https://api.zenovay.com/v1/track', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${process.env.ZENOVAY_API_KEY}`,
      },
      body: JSON.stringify({
        event: 'purchase',
        userId: session.customer_email,
        properties: {
          transaction_id: session.id,
          revenue: session.amount_total / 100,
          currency: session.currency,
        },
      }),
    });
  }
  res.json({ received: true });
});

カスタム Ghost テーマを使用する

カスタム Ghost テーマ(例: Casper・Source・Edition からフォーク)を管理している場合、Code Injection は {{ghost_head}} ヘルパー経由でレンダリングされます。テーマの default.hbs に以下が含まれていれば:

{{!-- in default.hbs --}}
{{ghost_head}}

…Zenovay は正しく読み込まれます。ほとんどのサードパーティ Ghost テーマにはデフォルトで含まれています。含まれていない場合は <head> 内の </head> の前に追加してください。


プラン要件

Ghost エディションCode Injectionカスタムテーマサーバーサイドトラッキング
Ghost(Pro) Starter❌(Casper のみ)✅ Webhook 経由
Ghost(Pro) Creator
Ghost(Pro) Team / Business
Self-hosted Ghost CMS

よくある落とし穴

カスタムテーマで {{ghost_head}} が見つからない。 これはカスタムテーマサイトで最も多い問題 #1 です。ページソースにトラッカーが表示されない場合は、default.hbs にヘルパーが含まれているか確認してください。含まれていないと、Code Injection のレンダリング先がありません。

AMP 投稿。 Ghost AMP インテグレーション 経由で AMP を有効にしている場合、Code Injection は /your-post/amp/ URL に適用されません(AMP は任意のスクリプトを除去します)。AMP を無効にするか、AMP トラフィックがトラッキングされないことを受け入れてください。Ghost 5.x の時点で AMP は廃止予定です。無効化を推奨します。

ニュースレターメール。 Code Injection はあなたのウェブサイトにのみ適用され、送信ニュースレターメールには適用されません。メール開封は Ghost 自体がトラッキングしています。必要であれば Ghost Admin API 経由でそのデータを Zenovay に同期できますが、基本的なインテグレーションの範囲外です。

メンバー専用投稿。 トラッカーはメンバーゲートのプレビューを含め、すべてのページレンダリング時に発火します。ペイウォールが解除されたの投稿ビューのみをトラッキングしたい場合は、上記の /members/api/member/ レスポンスでカスタムイベントをゲートしてください。

Docker / Kubernetes 上のセルフホスト Ghost。 追加設定は不要です。Code Injection はファイルシステムではなく Ghost データベースに存在します。通常通り管理 UI からスニペットを貼り付けるだけです。


トラブルシューティング

症状考えられる原因対処法
データなしページソースにトラッカーがないdefault.hbs{{ghost_head}} があるか確認する
一部の投稿でデータなし投稿ごとの Code Injection が上書きしているスニペットをサイト全体の Header に移動する
ページビューが重複しているSite Header と投稿ごとの Code Injection の両方にスニペットがあるどちらか一方のスコープを選ぶ
/amp/ URL でデータなしAMP がスクリプトを除去するAMP を無効化するかギャップを受け入れる
メンバーが識別されない/members/api/member/ が古い Ghost(< 4.x)で 404 を返すGhost インストールをアップグレードする

プライバシーとコンプライアンス

クッキーレストラッキングを行うには、data-cookieless="true" を追加します。

<script defer
        data-tracking-code="YOUR_TRACKING_CODE"
        data-cookieless="true"
        src="https://api.zenovay.com/z.js"></script>

Ghost 自身のメンバーアナリティクスはいずれにせよファーストパーティ Cookie を使用しているため、Zenovay をクッキーレスモードで重ねるのは一般的なパターンです。Ghost のメールベースのメンバーデータを保持しつつ、サイトの残りの部分でクッキーレスのビジターアナリティクスを取得できます。

詳細については プライバシーコンプライアンス をご覧ください。


関連リソース


サポートが必要ですか? [email protected] までお問い合わせいただくか、ヘルプセンター をご覧ください。

このページは役に立ちましたか?