我正在使用Google跟踪代码管理器将网页浏览事件推送到数据层以进行Google Analytics跟踪。这发生在 componentDidMount()(有时 componentWillReceiveProps(),如果我正在使用withRouter监听位置prop的查询字符串参数更改。)
我正在使用react-helmet在组件发生变化时动态更新我的标题和其他标签。
我注意到一个问题,即我在Google Analytics中获得了不正确的页面标题。它经常显示上一页的页面标题,而不是我当前所在的页面标题。看来react-helmet在 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.");
}
};
答案 0 :(得分:1)
我可以确认将函数包装在一个延迟0ms的setTimeOut()函数中确实可以确保只在react-helmet有机会完成它之后才推送该事件。
这使我能够始终在Google Analytics中获得当前页面标题。
更新功能
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);
};