GoogleAnalytics
next.js
16
どのような問題がありますか?

投稿日

更新日

【Next.js】Next.jsにGoogle Analyticsを導入する方法

はじめに

今回は、Next.jsプロジェクトにGoogle Analyticsを導入する方法を紹介します。

Next.jsのプロジェクトにGoogle Analyticsの導入するには、2つのステップが踏む必要があります。

  1. Google Analytics IDの取得
  2. Next.jsの設定

順に進めていきましょう。

なお、本記事は、next.js/examples/with-google-analyticsを参考にして作成しました。

Google Analyticsの導入

Google Analytics IDの取得

まず、以下の手順でGoogle Analytics ID(GA_ID)を取得します。

Google Analyticsのサイトにアクセスし、管理ボタンをクリックして下さい。

 2021-06-17 12.04.31.jpg

② 次にプロパティを作成をクリックします。

 2021-06-17 12.04.43.jpg

③ プロパティを入力し、次へをクリックします。

 2021-06-17 12.05.20.jpg

④ ビジネスの概要を入力し、作成ボタンをクリックします。

 2021-06-17 12.06.51.jpg

⑤ 今回はNext.jsのアプリなので、Choose a platformでウェブを選択します。

 2021-06-17 12.07.26.jpg

⑥ ウェブストリームの設定で紐付けたいサイトのURLを入力し、ストリームを作成ボタンをクリックします。

 2021-06-17 12.08.20.jpg

⑦ Google Analytics ID(GA_ID)が作成されました。画面の測定IDの値がGA_IDとなります。

 2021-06-17 12.10.35.jpg

Google Analytics IDの値は次項で使用するので控えておいて下さい。

これでGoogle Analytics IDが用意できました。

Next.jsの設定

続いて作成したNext.jsプロジェクトに、Google Analyticsの設定を追加します。

.env.localの作成

プロジェクトのルートフォルダに.env.localファイルを作成し、以下の様に前項で入手したGoogle Analytics IDを入力します。

.env.local
NEXT_PUBLIC_GA_ID=【あなたのGA_IDを入力】

設定したNEXT_PUBLIC_GA_IDの値は、プログラム上ではprocess.env.NEXT_PUBLIC_GA_IDと指定することで取得できます。

gtag.jsの作成

libフォルダを作成し、その配下にgtag.jsファイルを作成して下さい。

$ mkdir lib
$ touch ./lib/gtag.js

作成したgtag.jspagevieweventという関数を作成します。

lib/gtag.js
export const GA_TRACKING_ID = process.env.NEXT_PUBLIC_GA_ID

// https://developers.google.com/analytics/devguides/collection/gtagjs/pages
export const pageview = (url) => {
  window.gtag('config', GA_TRACKING_ID, {
    page_path: url,
  })
}

// https://developers.google.com/analytics/devguides/collection/gtagjs/events
export const event = ({ action, category, label, value }) => {
  window.gtag('event', action, {
    event_category: category,
    event_label: label,
    value: value,
  })
}

ページビューの取得

_app.jsの変更

次に_app.jsに変更を加えます。
Next.jsはデフォルトの状態では、ページが遷移した際の情報をGoogle Analyticsに渡せないため、以下の様に変更を加えます。

import '../styles/globals.css'
import { useEffect } from 'react'
import { useRouter } from 'next/router'
import * as gtag from '../lib/gtag'

function MyApp({ Component, pageProps }) {
  const router = useRouter()
  useEffect(() => {
    const handleRouteChange = (url) => {
      gtag.pageview(url)
    }
    router.events.on('routeChangeComplete', handleRouteChange)
    return () => {
      router.events.off('routeChangeComplete', handleRouteChange)
    }
  }, [router.events])

  return <Component {...pageProps} />
}

export default MyApp

_document.jsの作成

続いてページのヘッダ情報にgoogle tagmanagerのスクリプトタグを追加します。
_document.jsに追加することで、追加したスクリプトタグが全ページで適応されます。
pagesフォルダの配下に_document.jsを作成し、以下の様に記述して下さい。

pages/_document.js

import Document, { Html, Head, Main, NextScript } from 'next/document'

import { GA_TRACKING_ID } from '../lib/gtag'

export default class MyDocument extends Document {
  render() {
    return (
      <Html lang="ja">
        <Head>
          {/* Global Site Tag (gtag.js) - Google Analytics */}
          <script
            async
            src={`https://www.googletagmanager.com/gtag/js?id=${GA_TRACKING_ID}`}
          />
          <script
            dangerouslySetInnerHTML={{
              __html: `
            window.dataLayer = window.dataLayer || [];
            function gtag(){dataLayer.push(arguments);}
            gtag('js', new Date());
            gtag('config', '${GA_TRACKING_ID}', {
              page_path: window.location.pathname,
            });
          `,
            }}
          />
        </Head>
        <body>
          <Main />
          <NextScript />
        </body>
      </Html>
    )
  }
}

ここまでの手順で、ページビューの取得が可能になりました。

確認のため、一度 自身のGoogle Analytics管理画面を開き、サイトのページビューが取得できているか確認してみましょう。

自身のサイトにアクセス後、Google Analytics管理画面でリアルタイムのユーザ数がカウントされていればページビューの取得は成功です。

 2021-06-17 10.58.14.png

イベント情報の取得

ページビューの取得の他にも、ボタンが何回クリックされたかなど特定のイベント情報を取得したいことがあるかもしれません。
そういった場合は、コードにgtag.event()を追加し、イベント情報をGoogle analyticsに送信するようにします。

下のサンプルではボタンクリックの際に、gtag.event()でイベント情報を送信しています。

pages/contact.js

import React, {useState} from 'react'
import * as gtag from '../lib/gtag'

function Sample(props) {

  const [score, setScore] = useState(0)

  // ボタンをクリックしたとき
  const handler = () => {

    setScore(score + 1)

    // Analyticsに送信する情報
    gtag.event({
      action: 'click_answer', 
      category: 'score',
      label: score, // 
    })

    console.log("click!")
  }

  return (
    <>
      <button onClick={handler} >push 1</button>
    </>
  )
}

export default Sample

コードを加えたら、再びGoogle Analyticsの管理画面でイベントの結果を確認してみましょう。

イベントがGoogle Analyticsに送信され、クリックイベントとしてカウントされていることが確認できると思います。

 2021-06-17 11.23.01.png

おわりに

あなたのNext.jsプロジェクトにもGoogle Analyticsを導入し、サイトの改善にお役立て下さい。

参考

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
ユーザー登録ログイン
dtakkiy
最近の興味は、Next.jsとtailwind css。

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
ユーザー登録
すでにアカウントを持っている方はログイン
記事投稿イベント開催中
Claris Connect を使った SaaS 連携ユースケースを紹介しよう!
~
深層学習の論文について解説してみた
~
16
どのような問題がありますか?
ユーザー登録して、Qiitaをもっと便利に使ってみませんか

この機能を利用するにはログインする必要があります。ログインするとさらに下記の機能が使えます。

  1. ユーザーやタグのフォロー機能であなたにマッチした記事をお届け
  2. ストック機能で便利な情報を後から効率的に読み返せる
ユーザー登録ログイン
ストックするカテゴリー