Reactjs GTM与NextJs

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="/

在NextJs(启用SSR)应用程序上注册路由更改事件时遇到问题。 我正在GTM中使用历史更改事件触发器

使用反应gtm模块初始化Google标签管理器

问题:事件发生在山上,路线如www.site.com/product/123 但是当从/product/123/I页面导航到像/product/124/这样的页面时,事件不会触发

产品页:

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以触发“页面”和“历史”更改。因为它可能是一个或另一个取决于你如何设置你的应用程序。但这对我来说是必要的,每次视图更改时都会触发。