Сброс переменных уровня данных в одностраничных приложениях (Диспетчер тегов Google)

Попытка добиться группировки контента на мобильном сайте, который является SPA.

Сценарий выглядит следующим образом: когда я впервые посещаю страницу PDP, устанавливается переменная категории, и она отправляется в группы контента в теге Universal Analytics. Если после этого я вернусь на домашнюю страницу, переменная категории не обновится, и домашняя страница также будет сгруппирована в той же группе контента, что и предыдущая страница PDP.

Эта переменная обновляется только при посещении другой страницы PDP.

Я использую пользовательское событие PageLoad для имитации события pageView. Просто хочу, чтобы переменные уровня данных обновлялись в течение последовательного события PageLoad.

Спасибо


person Pranay    schedule 28.04.2017    source источник
comment
Вы пытались обновить эту переменную для каждого просмотра страницы?   -  person mrbubu    schedule 28.04.2017
comment
Да, это то, что я ищу .... но не знаю, как это сделать. Можно ли это сделать, запустив тег через GTM с помощью dataLayer.push   -  person Pranay    schedule 01.05.2017
comment
Да, это можно сделать с помощью пользовательского HTML-тега. Но гораздо лучше отправлять данные в dataLayer из бэкенда.   -  person mrbubu    schedule 03.05.2017


Ответы (3)


Существует недокументированный способ очистки всего слоя данных с помощью этого метода:

var gtm = window.google_tag_manager['GTM-XXXXXX'];
gtm.dataLayer.reset();

Теперь вам не обязательно это делать, поскольку вы можете установить значения, которые вам больше не нужны, на undefined в вашем слое данных:

dataLayer.push({
  'please_go_away': undefined
});
person cheesemacfly    schedule 11.05.2017

Теперь существует задокументированный способ сброса уровня данных. См. раздел Сброс в документации уровня данных.

Если вы поместите функцию в dataLayer, она даст вам доступ к объекту с семантикой get, set и reset. В частности, для этого вопроса reset является соответствующим битом.

person diminishedprime    schedule 06.07.2020
comment
Должен сказать, это более чем идеально. Это потрясающе, спасибо за это. Это особенно полезно при работе со многими переменными. - person jtomasrl; 04.03.2021

Если reset() не работает для вас, возможно, вы хотите попробовать следующий код

const boomDataLayer = () => {
  if (window.dataLayer !== undefined && window.google_tag_manager !== undefined) {
    window.dataLayer.length = 0;
    const gtmContainerReg = /GTM-/i;

    for (const gtmKey of Object.keys(window.google_tag_manager)) {
      if (gtmContainerReg.test(gtmKey) && window.google_tag_manager[gtmKey].dataLayer
        && window.google_tag_manager[gtmKey].dataLayer.reset
      ) {
        window.google_tag_manager[gtmKey].dataLayer.reset();
      }
    }
  }
}
person lazurey    schedule 28.06.2018