правильно настроить Google Tag Manager на Next js с dataLayer? - PullRequest
0 голосов
/ 12 февраля 2020

Что у меня есть

Мой _document файл:

import NextDocument, { Head } from 'next/document';

const GTM_TRACKING_ID = 'GTM-ID';

class WebAppDocument extends NextDocument {
  render() {
    return (
      <html lang="es">
        <Head>

          { /* Global Tag Manager (gtm.js) */}
          { /* => load GTM scripts according to environment variable */ }
          <script dangerouslySetInnerHTML={{ __html: `window.dataLayer = window.dataLayer || []` }} />

          <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_TRACKING_ID}');
              `,
            }}
          />
        </Head>
      </html>
    );
  }
}

Мой _app файл:

import NextApp from 'next/app';

const pushEvent = ({ event, pagePath, pageTitle }) => {
  window.dataLayer.push({
    event,
    pagePath,
    pageTitle,
  });
};

class WebApp extends NextApp {
  componentDidMount() {
    // push data to Google Tag Manager
    pushEvent({
      event: 'PageView',
      pagePath: window.location.pathname + window.location.search + window.location.hash,
      pageTitle: document.title,
    });
  }
}

Что я хочу

  1. Я видел пример и использовал Router.events.on('routeChangeComplete', url => dataLayer.push({})) для выполнения dataLayer. Это лучший подход? Или лучше запустить код для заполнения dataLayer в componentDidMount.

  2. Я хочу загрузить сценарии GTM в соответствии с переменной среды. Как этого достичь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...