У меня есть одностраничное приложение (SPA), которое я оснастил Google Analytics (GA), которое подается через Google Tag Manager (GTM). Я отслеживаю начальные просмотры страниц, используя встроенный триггер «Все страницы», а последующие просмотры страниц - встроенный триггер «Изменение истории». Похоже, что оба они работают нормально, проблема возникает, когда мы представляем Enhanced Ecommerce Events. Мы отправляем расширенные события электронной торговли как событие через DataLayer в нашем коде и выбираем триггером пользовательского события внутри GTM. Полезная нагрузка для них выглядит так:
{
event: 'eCommEvent',
ecommerce: {
currencyCode: 'GBP',
impressions: [
{id: 'blah', name: 'yadda', etc }, ... etc ...
]
}
}
Поскольку они сохраняются в DataLayer, когда пользователь переходит на другую страницу, также отправляются данные электронной торговли из предыдущего события электронной торговли. Я решил это с помощью последовательности тегов внутри GTM, добавив тег очистки «Clear Ecomm Event», который запускается один раз за событие после запуска события электронной торговли. Код для этого тега выглядит следующим образом:
<script>
(function(window) {
var gtm = window.google_tag_manager[{{Container ID}}];
try {
gtm.dataLayer.set('ecommerce', undefined);
// Notifies GTM our HTML Tag has finished
gtm.onHtmlSuccess({{HTML ID}});
} catch(e) {
if({{Debug Mode}}) throw e;
// Notifies GTM our HTML Tag has failed
return gtm.onHtmlFailure({{HTML ID}});
}
})(window);
</script>
Когда я проверяю слой данных с помощью предварительного просмотра диспетчера тегов, я вижу оба события Ecommerce Event, за которыми следует событие очистки, и я вижу уровень данных с электронной коммерцией, для которой установлено значение undefined. Однако при последующих просмотрах страницы информация о впечатлениях по-прежнему отображается и отправляется в переменных ec: impression через расширение GA Debugger в Chrome при каждом последующем обращении. Существует ли ручной способ обеспечить полную очистку этих переменных?