⚙️

【Next.js 13】環境ファイル別で Google Analytics を設定する

に公開
3

Discussion

masamasa

はじめまして!Masahiroと申します。
Next.jsのGoogle Analyticsの導入について質問があります。
今個人でアプリを作っているのですが、kazukiさんの記事を参考に作っています。
下記のコードで

layout.tsx
import GoogleAnalytics from '@/components/GoogleAnalytics'

// 途中省略...

export default function RootLayout({ children }: { children: React.ReactNode }): JSX.Element {
  return (
    <html lang='en'>
      <head>
        <GoogleAnalytics />
      </head>
      <body className={zen_kaku_gothic_new.className}>{children}</body>
    </html>
  )
}

<head>内でGoogleAnalytics コンポーネントを読み込んでいるのですが
chromeの検証ツールで見てみると
scriptの読み込みが<body>内に読み込まれてしまいます。
しかし、google Analyticsは正常に計測されています(計測は本番環境のみ)

Google Analyticsを読み込んでいる場所はapp/layout.tsxになります。
本来読み込まれる場所は<head>で合っていますでしょうか?
色々と原因を調べて見たのですが、
他に<head>に取り入れているのはSEO対策のMetadataのtitledescriptionをそれぞれのディレクトリのlayout.tsxで書いていますがそこまで影響はないと考えています。

原因などは分かりますでしょうか?
ソースコードは下記になります。

github
https://github.com/masahiro96848/zerone_blog

kazuki23 (Kazuki Fukushima)kazuki23 (Kazuki Fukushima)

Masahiroさん、コメントありがとうございます!

おっしゃる通り、<head><GoogleAnalytics /> を読み込んでも実際には <body> 内で読み込まれるようです。

これは GoogleAnalytics.tsxnext/scriptstrategylazyOnloadafterInteractive で指定しているからだと思われます。
https://nextjs.org/docs/app/api-reference/components/script

GitHub でも類似 Issue が過去に上がっています。
https://github.com/vercel/next.js/issues/26591

特に動作上で問題を感じていないのでこのまま運用しようと思っていますが、もし何か計測で問題があるようでしたらご指摘いただけますと幸いです!

masamasa

ご返信ありがとうございます!
参考資料の共有もありがとうございます!

これは GoogleAnalytics.tsx の next/script の strategy を lazyOnload や afterInteractive で指定しているからだと思われます。

そういう挙動なんですね!

現状、google analyticsで計測が出来ていて、特に問題は出ていないです!
また、何か問題がありましたら相談させてください!