За обновлениями можно следить в telegram-канале https://t.me/quasiart

Туториал о том, как добавить счётчик Google Analytics в приложение на Next.js. Это не требует установки сторонних библиотек.

Исходный код работающего проекта можно посмотреть здесь: https://github.com/mishantrop/elenapisarenko/blob/main/pages/_document.tsx

С помощью классического тега script

Шаг 1

Создайте файл _document.tsx внутри каталога pages. Этот файл используется для изменения общей структуры страницы (теги html, head, body и пр).Откройте файл pages/_document.tsx и добавьте туда следующий код:

const googleAnalyticsId = 'G-1234567890'

return (
    // ...
    <script
        src={`https://www.googletagmanager.com/gtag/js?id=${googleAnalyticsId}`}
    />
    <script
        dangerouslySetInnerHTML={{
            __html: `
                window.dataLayer = window.dataLayer || [];
                function gtag(){dataLayer.push(arguments);}
                gtag('js', new Date());
                gtag('config', '${googleAnalyticsId}');
            `,
        }}
    />
    // ...
)

Я назвал файл этот файл _document.tsx, так как в своих проектах предпочитаю использовать TypeScript. Подробнее: https://nextjs.org/docs/advanced-features/custom-document

Шаг 2

Измените идентификатор счётчика в переменной googleAnalyticsId. Этот идентификатор можно получить при создании счётчика или в его настройках, он имеет формат G-XXXXXXXXXX.

Идентификатор гугл аналитики при желании можно вынести в переменные окружения, чтобы при изменении кода счётчика не нужно было пересобирать приложение.

С помощью компонента Script

Почему-то этот вариант у меня не сработал: код счётчика просто не появлялся на странице. С этой проблемой столкнулся не только я: github.com/vercel/next.js/issues/37957. Но я всё равно опишу этот способ.

Шаг 1

Добавьте в _app.tsx (или _app.jsx, если не используете TypeScript) два вызова компонента Script.

import React from "react"
import Head from "next/head"
import Script from "next/script"

function App() {
  const googleAnalyticsId = 'G-1234567890'

  return (
    <>
      <Script
        strategy="afterInteractive"
        src={`https://www.googletagmanager.com/gtag/js?id=${googleAnalyticsId}`}
      />

      <Script strategy="afterInteractive">
        {`
          window.dataLayer = window.dataLayer || [];
          function gtag() {
            dataLayer.push(arguments);
          }
          gtag('js', new Date());
          gtag('config', '${googleAnalyticsId}');
        `}
      </Script>

      <Head>
        <title>Hello, World</title>
      </Head>
    </>
  );
}

export default App;

Готово, можно проверять.