Google AnalyticsでNext.jsブログ記事のPV(ページビュー)を測定する設定方法【Type Script】

2021-09-11 / Last Update : 2022-05-03
Main Image

目次

こんにちは。

このブログも開設からはや半年、そろそろ自分以外の誰か(検索エンジンのクローラとか?)も迷い込む時期かと思い、PV測定のためGoogle Analyticsを導入しようと思い至りました。

本ブログはNext.jsというフレームワークを使っており、通常のWebサイトとは違う一工夫が必要だったので、備忘録としてまとめておきます。

ちなみに今回の目的はPV(ページビュー)の測定なので、PV測定に特化した内容になっています。

Google Analytics適用のため、Next.jsチュートリアルからの変更点

このブログはこちらの記事に書いた通り、Next.jsのチュートリアルのブログ作成テンプレートを元に作成されています。

先に全体像を掴みます。Google Analyticsを適用するための変更手順は以下の通りです。

  1. Google Analyticsに登録して測定IDを取得する
  2. gtag.tsというファイルを作る
  3. next-env.d.tsgtagの型を定義する
  4. _app.tsxnext/routerを使い、SPAでも子ページのPVを測定できるようにする
  5. ページのヘッダにGoogle Analyticsのインストールを記述

以上です。順番に見ていきます。

Google Analyticsに登録して測定IDを取得する

多分見るタイミングによって詳細な手順が変わるかと思いますが、私がやったときの手順を記載します。

まずはGoogle Analyticsにアクセスして、自分の状況に合わせてアカウントを作成していきます。Googleアカウントでログインした状態で進めるとスムーズ。

アカウントプロパティというものがあるので、これを適当な名前で作成してwebサイト用のアクセスログデータを取得する準備をします。

プロパティの中にデータストリームという項目があります。ここにwebサイトの情報(URLとかわかりやすい名前)を記述します。

データストリームが作成されると、測定IDが表示されます。G-XXXXX01234みたいな英数字文字列です。これを使うのでコピっておきます。

グローバルサイトタグ(gtag)を作成する

さて、ここからはコーディングになります。ルートディレクトリから見て/lib/gtag.tsを作成し以下を記述します。

export const GA_MEASUREMENT_ID = 'YOUR_ID'

export const pageview = (url) => {
  window.gtag('config', GA_MEASUREMENT_ID, {
    page_path: url,
  })
}

YOUR_IDを前の章で取得した自分の測定IDに置き換えます。

windowはJavaScriptで使えるDOM文書を収めるグローバル変数です。ユーザが今開いてるページの情報をとってこれるものと思っておけば多分OK。

参考 : MDN Web Docs | Window

ちなみにgtagというのはグローバルサイトタグのことで、なんでこんなもの作るかというと、Google Analyticsの仕様のため。デベロッパーガイドに使い方が詳しく書いてありますので興味あればどうぞ。

参考: Google Analytics | ページビューの測定

gtagの型を定義する

interfacewindowオブジェクトのメソッドgtag()の型宣言します。これがないとgtag.tsがエラーになります。

interface Window{
  gtag(
    type: 'config',
    googleAnalyticsId: string,{ page_path: string });
}

SPAでも子ページのPVを測定できるようにする

以下をpages/_app.tsxに書きます。このファイルはNext.jsのチュートリアルとTypeScript化が終わっていれば既にあるはずです。

import Router from 'next/router'
import * as gtag from '../lib/gtag'

Router.events.on(
  'routeChangeComplete',
  url => gtag.pageview(url)
)

NextのRouterを使って、ユーザーが記事をクリックしてURLが変化した場合にgtagにそのページのURLを教えてあげます。

Next.jsはSPA(シングルページアプリケーション)なので、この記述がないとindex(webサイトのトップページ)にアクセスされたときしかPVが測定できなくなってしまいます。

ページのヘッダにGoogle Analyticsのインストールを記述

最後の手順です。components/layout.tsximportHead部分に追記します。

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

export default function Layout({
...
}) {
  return (
    ...
      <Head>
        <script
            async
            src={`https://www.googletagmanager.com/gtag/js?id=${GA_MEASUREMENT_ID}`}
        />
        <script
            dangerouslySetInnerHTML={{
              __html: `
            window.dataLayer = window.dataLayer || [];
            function gtag(){dataLayer.push(arguments);}
            gtag('js', new Date());
            gtag('config', '${GA_MEASUREMENT_ID}', {
              page_path: window.location.pathname,
            });
          `,
          }}
         />
      </Head>

layout.tsxもチュートリアル+TypeScript化が完了していればすでにあるファイルです。全ページの共通レイアウトとなる処理や要素を書き込んでおくファイルでしたね。

上記コードを書く理由も、Google Analyticsの仕様だからです。従いましょう。

参考 : グローバルサイトタグをインストールする

まとめ

上記で設定は終わりです。お疲れさまでした。

私は調べるのも含めて2時間くらいかかりましたが、この記事の流れに沿って進めれば、多分10分程度で設定が完了すると思います。

これからはGoogle Analyticsでブログ記事のPV数をたまにチェックしてみようと思います〜。

【追記】any プロパティ 'gtag' は型 'Window & typeof globalThis' に存在しません。と出る。

最近のESLintではこのようなエラーが出てしまうので、型ファイルをインストールする必要があります。

npm install --dev-save @types/gtag.js

これでエラーがなくなるはずです。

参考リンク

▼Google Analytics
https://analytics.google.com/

▼Google Analytics デベロッパードキュメント

サイトに gtag.js を追加する

ページビューの測定

▼Next.jsの参考

next/router

ads【オススメ】未経験からプログラマーへ転職できる【GEEK JOBキャンプ】
▼ Amazonオススメ商品
ディスプレイライト デスクライト BenQ ScreenBar モニター掛け式
スマートLEDフロアライト 間接照明 Alexa/Google Home対応

Author

Penta

都内で働くITエンジニアもどき。好きなものは音楽・健康・貯金・シンプルでミニマルな暮らし。AWSクラウドやデータサイエンスを勉強中。学んだことや体験談をのんびり書いてます。TypeScript / Next.js / React / Python / AWS / インデックス投資 / 高配当株投資 More profile

Location : Tokyo, JPN

Contact : Twitter@penguinchord

Recommended Posts

Copy Right / Penguin Chord, ペンギンコード (penguinchord.com) 2022 / Twitter@penguinchord