Next.js クイックスタート
Next.js アプリケーションに Zenovay Analytics を統合します。App Router(Next.js 13+)と Pages Router の両方に対応しています。
インストール
npm パッケージは不要です。Zenovay は軽量なトラッキングスクリプトを使用し、レイアウトに追加するだけです。
トラッキングコードは Zenovay アプリから取得します。ドメインを開いてサイトをクリックし、一般設定ページに移動します。トラッキングスクリプトカードにスニペットとインストール確認ボタンが表示されます。

App Router(Next.js 13+)でのセットアップ
トラッキングスクリプトの追加
Next.js の Script コンポーネントを使用して、ルートレイアウトに Zenovay トラッキングスクリプトを追加します。
import Script from 'next/script';
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="en">
<body>
{children}
<Script
defer
data-tracking-code="YOUR_TRACKING_CODE"
src="https://api.zenovay.com/z.js"
strategy="afterInteractive"
/>
</body>
</html>
);
}以上です!Zenovay が Next.js アプリのページビューを自動的にトラッキングするようになります。
Pages Router でのセットアップ
カスタムアプリにスクリプトを追加
_app.tsx ファイルを更新します。
import Script from 'next/script';
import type { AppProps } from 'next/app';
export default function App({ Component, pageProps }: AppProps) {
return (
<>
<Component {...pageProps} />
<Script
defer
data-tracking-code="YOUR_TRACKING_CODE"
src="https://api.zenovay.com/z.js"
strategy="afterInteractive"
/>
</>
);
}カスタムイベントのトラッキング
window.zenovay を使用してコンポーネント内でカスタムイベントをトラッキングします。
'use client';
export function SignupButton() {
const handleSignup = async () => {
// Your signup logic here
const user = await signup();
// Track the event
if (window.zenovay) {
window.zenovay('track', 'user_signup', {
plan: 'free',
source: 'homepage',
});
}
};
return (
<button onClick={handleSignup}>
Sign Up
</button>
);
}サーバーサイドトラッキング
サーバーサイドのイベントトラッキングでは、Zenovay トラッキングエンドポイントに直接イベントを送信します。これは API キーを必要としない公開エンドポイントです。
import { NextResponse } from 'next/server';
export async function POST(request: Request) {
const { amount } = await request.json();
// Process payment...
// Track conversion server-side via the public tracking endpoint
await fetch('https://api.zenovay.com/e/YOUR_TRACKING_CODE', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'User-Agent': request.headers.get('user-agent') || '',
'X-Forwarded-For': request.headers.get('x-forwarded-for') || '',
},
body: JSON.stringify({
type: 'event',
payload: {
name: 'purchase_complete',
url: 'https://yoursite.com/checkout',
props: { amount, currency: 'USD' },
},
}),
});
return NextResponse.json({ success: true });
}トラッキングエンドポイント(/e/:trackingCode)は公開されており、API キーは不要です。正確な訪問者帰属のため、元のユーザーの User-Agent と IP アドレスを転送してください。
ユーザーの識別
認証されたユーザーとイベントを関連付けます。
'use client';
import { useEffect } from 'react';
import { useUser } from '@/hooks/useUser';
export default function Dashboard() {
const { user } = useUser();
useEffect(() => {
if (user && window.zenovay) {
window.zenovay('identify',user.id, {
email: user.email,
name: user.name,
plan: user.subscription?.plan,
});
}
}, [user]);
return <div>Dashboard</div>;
}リンククリックのトラッキング
外部リンククリックをトラッキングします。
'use client';
export function ExternalLink({ href, children }: { href: string; children: React.ReactNode }) {
const handleClick = () => {
if (window.zenovay) {
window.zenovay('track', 'external_link_click', {
url: href,
text: children?.toString(),
});
}
};
return (
<a
href={href}
onClick={handleClick}
target="_blank"
rel="noopener noreferrer"
>
{children}
</a>
);
}SPA ページビュートラッキング
App Router でクライアントサイドナビゲーションのトラッキングを行います。
'use client';
import { usePathname, useSearchParams } from 'next/navigation';
import { useEffect } from 'react';
export function Analytics() {
const pathname = usePathname();
const searchParams = useSearchParams();
useEffect(() => {
if (window.zenovay) {
window.zenovay('track', 'pageview', {
path: pathname,
title: document.title,
});
}
}, [pathname, searchParams]);
return null;
}
// Add to your root layout:
// <Analytics />TypeScript サポート
グローバルな zenovay オブジェクトの型宣言を追加します。
declare global {
interface Window {
zenovay: (...args: any[]) => void;
}
}
export {};開発環境での検証
開発環境では、ブラウザコンソールを開き、api.zenovay.com へのネットワークリクエストを監視することで、イベントが送信されていることを確認できます。Zenovay ダッシュボードもリアルタイムのイベントデータを表示します。
// Optional: Create a helper hook for cleaner tracking calls
export function useZenovay() {
const track = (eventName: string, data?: Record<string, any>) => {
if (window.zenovay) {
window.zenovay('track',eventName, data);
}
};
const identify = (userId: string, traits?: Record<string, any>) => {
if (window.zenovay) {
window.zenovay('identify', userId, traits);
}
};
const trackGoal = (goalName: string, data?: Record<string, any>) => {
if (window.zenovay) {
window.zenovay('goal', goalName, data);
}
};
return { track, identify, trackGoal };
}次のステップ
Next.js アプリは Zenovay でアナリティクストラッキングを開始しました。ダッシュボードをチェックしてリアルタイムデータを確認してください。
さらに詳しく学びましょう。
- カスタムイベント - 特定のユーザーアクションをトラッキング
- プライバシーコンプライアンス - GDPR と CCPA のセットアップ
- ダッシュボード概要 - データの理解