📊

ユーザーの動きを可視化する:GA4とMicrosoft Clarityの設定

2 か月前
5

この記事は、ひとりでつくるSaaS - 設計・実装・運用の記録 Advent Calendar 2025 の21日目の記事です。

昨日の記事では「Stripeを使った段階的課金」について書きました。この記事では、ユーザー行動の可視化ツールであるGoogle Analytics 4とMicrosoft Clarityの導入について紹介します。

🤔 なぜアクセス解析が必要か

サービスを公開したら、次に気になるのは「どれくらい使われているか」です。

  • どのページがよく見られているか
  • ユーザーはどこで離脱しているか
  • どのボタンがクリックされているか

これらを把握しないと、改善の方向性が見えません。「なんとなく良くなった気がする」ではなく、データに基づいて判断したい。そこでアクセス解析ツールを導入しました。

ツールの選定

私は3つのツールを組み合わせています。

ツール役割特徴
Google Analytics 4トラフィック分析ユーザー数、ページビュー、流入経路
Microsoft Clarity行動の可視化ヒートマップ、セッション録画
Search ConsoleSEO分析検索キーワード、表示順位

3つとも無料で利用できます。GA4だけでも基本的な分析はできますが、Clarityを併用すると「なぜそうなるのか」が見えてきます。

📈 Google Analytics 4の設定

コンポーネントの実装

Next.jsでは、next/scriptを使ってGA4のスクリプトを読み込みます。

// components/analytics/GoogleAnalytics.tsx 'use client'; import Script from 'next/script'; interface GoogleAnalyticsProps { measurementId: string; } export function GoogleAnalytics({ measurementId }: GoogleAnalyticsProps) { if (!measurementId) { return null; } return ( <> <Script src={`https://www.googletagmanager.com/gtag/js?id=${measurementId}`} strategy="afterInteractive" /> <Script id="google-analytics" strategy="afterInteractive"> {` window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', '${measurementId}', { page_path: window.location.pathname, }); `} </Script> </> ); }

strategy="afterInteractive"を指定することで、ページの読み込みをブロックせずにスクリプトを実行します。ユーザー体験を損なわずに計測できます。

レイアウトへの配置

ルートレイアウトでコンポーネントを読み込みます。本番環境でのみ動作するよう、環境変数のチェックを入れています。

// app/layout.tsx export default function RootLayout({ children }: { children: React.ReactNode }) { const gaMeasurementId = process.env.NEXT_PUBLIC_GA_MEASUREMENT_ID; return ( <html> <body> {children} {gaMeasurementId && <GoogleAnalytics measurementId={gaMeasurementId} />} </body> </html> ); }

カスタムイベントの送信

ボタンクリックなど、特定の操作を計測したい場合はカスタムイベントを使います。

export function trackEvent( eventName: string, eventParams?: Record<string, string | number | boolean> ) { if (typeof window !== 'undefined' && 'gtag' in window) { (window as Window & { gtag: (...args: unknown[]) => void }).gtag( 'event', eventName, eventParams ); } } // 使用例 trackEvent('button_click', { button_name: 'signup' }); trackEvent('content_view', { content_id: '123' });

🎥 Microsoft Clarityの設定

Clarityは、ヒートマップとセッション録画でユーザー行動を可視化するツールです。GA4が「何が起きたか」を教えてくれるのに対し、Clarityは「なぜ起きたか」を見せてくれます。

コンポーネントの実装

GA4と同様に、next/scriptで読み込みます。

// components/analytics/MicrosoftClarity.tsx 'use client'; import Script from 'next/script'; interface MicrosoftClarityProps { projectId: string; } export function MicrosoftClarity({ projectId }: MicrosoftClarityProps) { if (!projectId) { return null; } return ( <Script id="microsoft-clarity" strategy="afterInteractive"> {` (function(c,l,a,r,i,t,y){ c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i; y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); })(window, document, "clarity", "script", "${projectId}"); `} </Script> ); }

ユーザーの識別

ログインユーザーを識別したい場合は、ClarityのAPIを使います。

export function identifyClarityUser(userId: string) { if (typeof window !== 'undefined' && 'clarity' in window) { (window as Window & { clarity: (...args: unknown[]) => void }).clarity( 'identify', userId ); } } // セグメント用のタグを設定 export function setClarityTag(key: string, value: string) { if (typeof window !== 'undefined' && 'clarity' in window) { (window as Window & { clarity: (...args: unknown[]) => void }).clarity( 'set', key, value ); } } // 使用例 identifyClarityUser('user_123'); setClarityTag('plan', 'premium');

プランごとにタグを設定しておくと、「無料ユーザーと有料ユーザーで行動が違うか」といった分析ができます。

🔍 Search Consoleの設定

SEO分析の基盤

Search Consoleは、Google検索でのパフォーマンスを分析するツールです。

  • どんなキーワードで検索されているか
  • 検索結果に何回表示されたか
  • クリック率はどれくらいか

GA4やClarityとは異なり、サイトに来る「前」の行動が分かります。

所有権の確認

Search Consoleを使うには、サイトの所有権を確認する必要があります。いくつかの方法がありますが、HTMLタグが簡単です。

// app/layout.tsx export const metadata: Metadata = { verification: { google: 'your-verification-code', }, };

これで<meta name="google-site-verification">タグが出力されます。Search Consoleの管理画面で確認ボタンを押せば完了です。

なお、GA4やClarityと違い、データの反映まで1〜2日かかります。定期的にチェックする習慣をつけるとよいでしょう。

🔗 ツール間の連携

3つのツールは連携させることで、より深い分析ができます。

GA4とSearch Consoleの連携

GA4の管理画面から「Search Consoleのリンク」を設定すると、検索クエリとサイト内行動を統合して分析できます。

「この検索キーワードで来たユーザーは、どのページをよく見ているか」といった分析が可能になります。

GA4とClarityの連携

Clarityの設定画面から「Google アナリティクスの統合」を有効にすると、GA4のセッションとClarityの録画を紐付けられます。

GA4で「離脱率が高いページ」を見つけたら、Clarityでそのページの録画を確認する、という使い方ができます。

💡 実装のポイント

本番環境のみで有効化

開発中のアクセスが計測されると、データがノイズになります。環境変数を使って、本番環境でのみ有効化します。

# .env.local(開発環境) # 設定しない # Vercel環境変数(本番環境) NEXT_PUBLIC_GA_MEASUREMENT_ID=G-XXXXXXXXXX NEXT_PUBLIC_CLARITY_PROJECT_ID=xxxxxxxxxx

環境変数が設定されていなければ、コンポーネントは何もレンダリングしません。

データ反映のタイミング

ツール反映タイミング
GA4リアルタイム
Clarityリアルタイム
Search Console1〜2日後

GA4とClarityはすぐに確認できますが、Search Consoleは反映に時間がかかります。SEO分析は翌日以降に確認するようにしています。

CSPの設定

Content Security Policy(CSP)を設定している場合、解析ツールのドメインを許可する必要があります。

// middleware.ts const cspHeader = ` script-src 'self' https://www.googletagmanager.com https://*.clarity.ms; connect-src 'self' https://www.google-analytics.com https://*.clarity.ms; `;

これを忘れると、解析スクリプトがブロックされて計測できません。

✅ まとめ

3つの解析ツールの導入について紹介しました。

ツール役割
GA4トラフィック分析、カスタムイベントで詳細計測
Clarityヒートマップとセッション録画で行動を可視化
Search Console検索キーワードと表示順位でSEO分析

実装のポイントとして、本番環境のみで有効化すること、CSPの設定を忘れないこと、ツール間を連携させることが大切です。

個人開発では、すべての指標を追う必要はありません。まずは「どのページがよく見られているか」「どこで離脱しているか」から始めて、必要に応じて計測を増やしていくのがおすすめです。

明日は「個人開発でマルチテナントSaaSを作る」について解説します。


シリーズの他の記事

  • 12/20: Stripeで実装する段階的課金:個人開発のマネタイズ設計
  • 12/22: 個人開発でマルチテナントSaaSを作る:エンタープライズ品質への挑戦

コメント

0
0
0
ユーザーの動きを可視化する:GA4とMicrosoft Clarityの設定
0
投稿
0
フォロワー
0
いいね

プロパティ

ページ
テクノロジー
TECH

関連コンテンツ