Вопрос или проблема
Внедрение Google Analytics в Next.js
Я пытаюсь реализовать Google Analytics в Next.js. Я включил скрипты, и когда я ввожу dataLayer в консоли, я вижу следующее
(2) [Arguments(2), Arguments(3), push: Proxy(Function)]
0
:
Arguments(2) ['js', Mon Apr 17 2023 08:05:07 GMT+0200 (Central European Summer Time), callee: ƒ, Symbol(Symbol.iterator): ƒ]
1
:
Arguments(3) ['config', 'G-10KHN0N9HD', {…}, callee: ƒ, Symbol(Symbol.iterator): ƒ]
push
:
Proxy(Function) {length: 1, name: 'push'}
length
:
2
[[Prototype]]
:
Array(0)
Таким образом, событий не зарегистрировано. Когда я перехожу в раздел “реальное время” на панели инструментов, данных не поступает. В чем может быть проблема?
Это мой файл _app
import "@/styles/globals.css";
import { appWithTranslation } from "next-i18next";
import { Raleway } from "next/font/google";
import Head from "next/head";
import Script from "next/script";
import dynamic from "next/dynamic";
import { usePathname, useSearchParams } from "next/navigation";
import { useEffect } from "react";
import { pageview } from "@/lib/gtagHelper";
import CookieConsent from "react-cookie-consent";
import { useRouter } from "next/router";
const DynamicFooter = dynamic(() => import("@/components/Links"));
const raleway = Raleway({
subsets: ["latin"],
variable: "--font-ral",
});
const ID = process.env.NEXT_PUBLIC_GOOGLE_ANALYTICS;
function App({ Component, pageProps }) {
const pathname = usePathname();
const searchParams = useSearchParams();
const router = useRouter();
useEffect(() => {
console.log(window.gtag);
const handleRouteChange = (url) => {
window.gtag("config", "G-10KHN0N9HD", { page_path: url });
};
router.events.on("routeChangeComplete", handleRouteChange);
return () => {
router.events.off("routeChangeComplete", handleRouteChange);
};
}, [router.events]);
function handleAccept() {
window.gtag("consent", "update", {
ad_storage: "granted",
analytics_storage: "granted",
});
}
return (
<>
<Head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" href="/favicon.png" />
</Head>
<main className={`${raleway.variable} font-ral min-h-screen w-full`}>
<Component {...pageProps} />
<DynamicFooter></DynamicFooter>
<CookieConsent
style={{
top: "90%",
width: "max-content",
height: "max-content",
left: "32%",
"border-radius": 20,
background: "#92a4ba",
}}
buttonText="Принять"
enableDeclineButton
onAccept={() => {
handleAccept();
}}
declineButtonText="Отказаться"
>
Мы используем файлы cookie, чтобы улучшить ваш опыт работы на нашем сайте.
</CookieConsent>
<Script id="tawk" strategy="lazyOnload">
{`var Tawk_API=Tawk_API||{}, Tawk_LoadStart=new Date();
(function(){
var s1=document.createElement("script"),s0=document.getElementsByTagName("script")[0];
s1.async=true;
s1.src="https://embed.tawk.to/64367ade4247f20fefeb2cc2/1gtqcvtgf";
s1.charset="UTF-8";
s1.setAttribute('crossorigin','*');
s0.parentNode.insertBefore(s1,s0);
})()`}
</Script>
<Script
strategy="afterInteractive"
src={`https://www.googletagmanager.com/gtag/js?id=G-10KHN0N9HD`}
/>
<Script
id="gtag-init"
strategy="afterInteractive"
dangerouslySetInnerHTML={{
__html: `
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-10KHN0N9HD', {
page_path: window.location.pathname,
});
`,
}}
/>
</main>
<>
);
}
export default appWithTranslation(App);
Похоже, у вас проблемы, подобные этому недавнему посту: https://stackoverflow.com/questions/76092606/google-analytics-with-next-js
gtag должен работать на фронте. Поэтому отладка также должна включать фронт. Обычно это делается с помощью выполнения вашей конфигурационной функции в консоли фронта и проверки, есть ли соответствующий вызов collect? в консоли через несколько секунд (поскольку есть задержка)
Вот так:
Я только что отправил просмотр страницы из SO в вашу аналитику, потому что вы оставили идентификатор измерения в вашем фрагменте кода. Вы сможете увидеть этот вызов, как только он будет обработан через несколько дней.
Если вы видите сетевые вызовы, но все еще не видите вызовы в вашем GA, то проблема, скорее всего, связана с вашим идентификатором измерения. Убедитесь, что он правильный.
Ответ или решение
Для успешной интеграции Google Analytics в приложение Next.js, вы должны убедиться в правильности реализации кода, включая скрипты и обработку маршрутов. Давайте разберёмся с вашим кодом и возможными проблемами, которые могут быть причиной отсутствия данных в реальном времени на дашборде Analytics.
-
Проверка идентификатора измерения: Убедитесь, что идентификатор измерения (ID) Google Analytics, который вы используете в коде, является правильным. Вы привели ID
G-10KHN0N9HD
в коде. Проверьте, что он совпадает с тем, что вы видите в интерфейсе Google Analytics. -
Правильная инициализация gtag: Ваша инициализация gtag выглядит правильно, но убедитесь, что она выполняется корректно. В разделе
<Script id="gtag-init">
вы включаете функции gtag и инициализируете их. Убедитесь, что этот скрипт действительно загружается после скрипта Google Tag Manager. -
Отслеживание маршрутов: В вашем коде вы правильно добавили обработчик событий для отслеживания изменения маршрутов. Убедитесь, что pageview действительно вызывается на каждом изменении маршрута:
const handleRouteChange = (url) => { window.gtag('config', 'G-10KHN0N9HD', {page_path: url}); };
-
Просмотр данных в реальном времени: Чтобы проверить, отправляются ли события, откройте инструменты разработчика в вашем браузере:
- Перейдите на вкладку "Сеть" (Network)
- Фильтруйте по запросам (можно использовать
collect
в фильтре) - Далее, когда вы изменяете маршрут, проверьте, отправляются ли запросы. Если данные передаются, вы должны увидеть запросы с методом
POST
кhttps://www.google-analytics.com/collect
.
-
Проверка консоли: Вы можете также вручную вызвать функцию gtag в консоли браузера для проверки. Попробуйте ввести:
gtag('event', 'test_event', { 'event_category': 'Test', 'event_label': 'Test Event', });
Это поможет вам проверить, отправляется ли событие корректно.
-
Настройки cookie: Убедитесь, что вы получаете согласие от пользователей на использование куки. Ваш код для Cookie Consent выглядит правильно, но убедитесь, что вызов
handleAccept()
работает без ошибок и что согласие действительно получено. - Время обработки: Обратите внимание, что даже если данные приходят на сервер, они могут обрабатываться с задержкой, и в реальном времени вы можете не увидеть данные сразу.
Если, после всех изменений и проверок, данные всё еще не отображаются, возможно, вам стоит рассмотреть использование отладочного инструмента Google Tag Assistant, который может помочь в диагностике проблем с вашей интеграцией.
Если все вышеперечисленные шаги соблюдены, но проблема сохранится, советую вам обратиться к документации Google Analytics или сообществу в поисках более конкретных примеров и проблем, с которыми сталкиваются другие разработчики.