I have Pageview
tag in Google Tag Manager that tracks SPA pageviews, identical to the one described in this guide. Basically it is Universal Analytics
As @kemsky suggested, GTM lifecycle is tied to internal gtm.load
event, which happens on window onload
. So DOMContentLoaded
may be too early to bootstrap.
Considering that GTM script was loaded prior to SPA script,
window.addEventListener('load', () => {
platformBrowserDynamic().bootstrapModule(MyAppModule);
});
callback will be triggered when GTM is ready to receive history change events, and there should be no race conditions.
It looks like analytics scripts are loaded with <script async=true>
:
j.async = true;
or a.async = 1
;
Try to remove async
and see if it helps.
You may change the trigger of your UA pageview tag from plain 'pageview' and stick to custom event fired at NavigationEnd
router.events.subscribe(e => {
if (e instanceof NavigationEnd) {
dataLayer = window.dataL
dataLayer.push({'event':'custom pageview event'});
}
})