React SPA - GTM Analytics React-Helmet Предыдущая страница Название страницы

Я использую Диспетчер тегов Google, чтобы передать события просмотра страниц на уровень данных для отслеживания Google Analytics. Это происходит в componentDidMount () (и иногда componentWillReceiveProps(), если я слушаю изменения параметра строки запроса с помощью свойства location с помощью withRouter).

Я использую реагирующий шлем для динамического обновления заголовка и других тегов при изменении компонентов.

Я заметил проблему с неправильным заголовком страницы в Google Analytics. Он часто показывает заголовок предыдущей страницы вместо того, на котором я сейчас нахожусь. Похоже, что реагирующий шлем не обновляет тег до тех пор, пока после componentDidMount ().

Пример функции просмотра страницы

Мой тег аналитики в GTM вызывается каждый раз, когда это событие помещается на уровень данных

const firePageViewEvent = () => {
      console.log("Pageview event fired (from tracking script)");

      if (window && window.dataLayer) {
          console.log("window and dataLayer exist, pushing pageview event.");
          let dataLayer = window.dataLayer || [];
          dataLayer.push({
              'event': 'reactPageViewEvent'
          });
      } else {
          console.log("window or dataLater does not exist, cannot push pageview event.");
      }
};

1 ответ

Я могу подтвердить, что перенос функции в функцию setTimeOut() с задержкой 0 мс действительно работает, чтобы гарантировать, что событие будет выдвинуто только после того, как реагирующий шлем сможет выполнить свою задачу.

Это позволяет мне постоянно получать заголовок текущей страницы в Google Analytics.

См. Комментарий к проблеме GitHub

Обновленная функция

const firePageViewEvent = () => {
    setTimeout(() => {
        console.log("Pageview event fired (from tracking script)");

        if (window && window.dataLayer) {
            console.log("window and dataLayer exist, pushing pageview event.");
            let dataLayer = window.dataLayer || [];
            dataLayer.push({
                'event': 'reactPageViewEvent'
            });
        } else {
            console.log("window or dataLater does not exist, cannot push pageview event.");
        }
    }, 0);
};