Reactjs GTM与NextJs
在NextJs(启用SSR)应用程序上注册路由更改事件时遇到问题。 我正在GTM中使用历史更改事件触发器 使用反应gtm模块初始化Google标签管理器 问题:事件发生在山上,路线如www.site.com/product/123 但是当从/product/123/I页面导航到像/product/124/这样的页面时,事件不会触发 产品页:Reactjs GTM与NextJs,reactjs,next.js,Reactjs,Next.js,在NextJs(启用SSR)应用程序上注册路由更改事件时遇到问题。 我正在GTM中使用历史更改事件触发器 使用反应gtm模块初始化Google标签管理器 问题:事件发生在山上,路线如www.site.com/product/123 但是当从/product/123/I页面导航到像/product/124/这样的页面时,事件不会触发 产品页: return ( <div> <div>{props.title}</div> <Link href="/
return (
<div>
<div>{props.title}</div>
<Link href="/product/[pid]" as={`/product/124`}>
<a>Another product (should trigger event here, but doesn't)</a>
</Link>
</div>
)
在NextJs中执行此操作的正确方法是什么?您必须在每个页面上插入标记管理器脚本。由于_document.js是每个页面的包装器,您应该在head部分将GTM脚本添加到_document.js中,如下所示:
<Head>
<script dangerouslySetInnerHTML={{
__html: `(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-*****');`,
}}>
</script>
...
</Head>
...
您必须在每个页面上插入标记管理器脚本。由于_document.js是每个页面的包装器,您应该在head部分将GTM脚本添加到_document.js中,如下所示:
<Head>
<script dangerouslySetInnerHTML={{
__html: `(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-*****');`,
}}>
</script>
...
</Head>
...
但它是通过react gtm模块npm包注入的,该包由我初始化。否则,我不会在第一个renderb上获得任何事件,但它是通过react gtm模块npm包注入的,我初始化了这个包。否则,我不会在第一个渲染器上获得任何事件对于我来说,我使用了react gtm模块,我在_app.js中包含了这个模块,然后我设置gtm在“页面”和“历史”更改时触发。因为它可能是一个或另一个取决于你如何设置你的应用程序。但这对我来说是必要的,每次视图更改时都会触发。对我来说,我使用了react gtm模块,我将其包含在_app.js中,然后我设置gtm以触发“页面”和“历史”更改。因为它可能是一个或另一个取决于你如何设置你的应用程序。但这对我来说是必要的,每次视图更改时都会触发。