Google AnalyticsでNext.jsブログ記事のPV(ページビュー)を測定する設定方法【Type Script】
目次
こんにちは。
このブログも開設からはや半年、そろそろ自分以外の誰か(検索エンジンのクローラとか?)も迷い込む時期かと思い、PV測定のためGoogle Analyticsを導入しようと思い至りました。
本ブログはNext.jsというフレームワークを使っており、通常のWebサイトとは違う一工夫が必要だったので、備忘録としてまとめておきます。
ちなみに今回の目的はPV(ページビュー)の測定なので、PV測定に特化した内容になっています。
Google Analytics適用のため、Next.jsチュートリアルからの変更点
このブログはこちらの記事に書いた通り、Next.jsのチュートリアルのブログ作成テンプレートを元に作成されています。
先に全体像を掴みます。Google Analyticsを適用するための変更手順は以下の通りです。
- Google Analyticsに登録して測定IDを取得する
gtag.ts
というファイルを作るnext-env.d.ts
にgtag
の型を定義する_app.tsx
でnext/router
を使い、SPAでも子ページのPVを測定できるようにする- ページのヘッダに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。
ちなみにgtag
というのはグローバルサイトタグのことで、なんでこんなもの作るかというと、Google Analyticsの仕様のため。デベロッパーガイドに使い方が詳しく書いてありますので興味あればどうぞ。
参考: Google Analytics | ページビューの測定
gtagの型を定義する
interface
でwindow
オブジェクトのメソッド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.tsx
のimport
とHead
部分に追記します。
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 デベロッパードキュメント
▼Next.jsの参考