Ghost インテグレーション
任意の Ghost パブリケーション(Ghost(Pro)・セルフホスト Ghost CMS・Ghost Cloud)に 2 分で Zenovay を追加できます。Ghost の Code Injection はすべてのプランで完全に公開されているため、このインテグレーションは無料ティアのクリエイターとセルフホストのパブリッシャーの両方で動作します。
Code Injection はセルフホスト Ghost CMS を含むすべての Ghost プランで利用できます。アップグレードは不要です。
クイックスタート
| ステップ | 場所 | 操作 |
|---|---|---|
| 1 | Zenovay ダッシュボード | トラッキングスニペットをコピーする |
| 2 | Ghost 管理画面 → Settings → Code injection → Site Header | 貼り付ける |
| 3 | 保存 | Save をクリックする |
| 4 | Zenovay ダッシュボード | 約 30 秒以内にリアルタイムビジターが表示される |
方法 1: Site Header injection(推奨)
Ghost の Code Injection パネルは、テーマがレンダリングするすべてのページの <head> に生の HTML を書き込みます。これにはホームページ、投稿、ページ、タグ、著者、メンバーシップフローが含まれます。
手順
- Ghost 管理パネルにログインします(通常
https://your-site.com/ghost/)。 - 左サイドバーから Settings(ギアアイコン)をクリックします。
- Site → Code injection までスクロールします。
- Site Header ボックスに以下を貼り付けます。
<script defer data-tracking-code="YOUR_TRACKING_CODE" src="https://api.zenovay.com/z.js"></script>
- Save をクリックします。
確認する
プライベートブラウザウィンドウで Ghost サイトを開き、ソースを確認します。<head> と </head> の間に <script defer data-tracking-code=...> が表示されているはずです。Zenovay の リアルタイムビュー に約 30 秒以内に自分のアクセスが表示されます。
方法 2: 投稿ごと / ページごとの注入
特定の投稿やページのみをトラッキングする場合(例: 有料ニュースレターの告知)、エディターで投稿を開き、投稿レベルの Code Injection を使用します。
- エディターで投稿またはページを開きます。
- 右上のギアアイコン(設定)をクリックします。
- 下にスクロールして Code injection を展開します。
- Post Header にスニペットを貼り付けます。
- 投稿を更新します。
投稿ごとの 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] までお問い合わせいただくか、ヘルプセンター をご覧ください。