Google analytics 谷歌分析应用程序&x2B;Web慢速发送-收集请求
我正在尝试实施GTM和新的Google analytics web+应用程序,我可以看到将数据推送到Google analytics需要5秒钟。 我已经测试了一个新的网站和简单的跟踪事件点击链接 这里是热门节目:==>Google analytics 谷歌分析应用程序&x2B;Web慢速发送-收集请求,google-analytics,google-tag-manager,Google Analytics,Google Tag Manager,我正在尝试实施GTM和新的Google analytics web+应用程序,我可以看到将数据推送到Google analytics需要5秒钟。 我已经测试了一个新的网站和简单的跟踪事件点击链接 这里是热门节目:==> ~ Data: { events: [ { en: "-logo-click", _et: "2258", ep.transport: "beacon" },
~ Data: {
events: [
{
en: "-logo-click",
_et: "2258",
ep.transport: "beacon"
},
{
en: "page_view",
_et: "36",
ep.transport: "beacon"
}
],
v: "2",
tid: "G-xxxxxx",
gtm: "xxxx",
_p: "109194814",
sr: "1440x900",
ul: "sv-se",
cid: "2129079382.1587074095",
dl: "http://www.site.lo/",
dr: "",
dt: "Site title",
sid: "1587312754",
sct: "5",
seg: "1",
_s: "2",
statusCode: 204
}
~ Network Hit: {frameId: 0, fromCache: false, initiator: "http://www.site.lo", ip: "216.58.207.206", method: "POST", …}
dlc.js:1208 ~ 26.208s since Document Start
dlc.js:1208 ~ 4.316s since last hit
好的,我尽力解决了这个问题,我使用fetch将数据直接发送到google服务器,跳过数据层,并使用回调函数和延迟1秒等待GA加载。 这里是我如何做到的,我不确定这是否是最好的方法,但它100%有效,我得到了关于旧数据和旧数据的准确数据。 BounceOut是旧数据GA1 Bounce_out和Bounce_out_source是新的GA2
trackAndBounceOut(url, callback) {
var action = this.state.bouncer.meta.partnerName
var label = this.state.bouncerId
var type = Session.page
window.dataLayer = window.dataLayer || []
var checkGA
setTimeout(function () {
if (ga && typeof ga.getAll == 'function') {
checkGA = true
} else {
checkGA = false
}
if (checkGA) {
var clientId = ga.getAll()[0].get('clientId');
var adSenseId = ga.getAll()[0].get('adSenseId')
var screenResolution = ga.getAll()[0].get('screenResolution')
var userLanguage = ga.getAll()[0].get('language')
var docReferrer = ga.getAll()[0].get('referrer')
var docLocation = ga.getAll()[0].get('location')
var debug = false // Enable for debug!!
var doctTitle = document.title
var stringUrlData = {
v: 2,
tid: 'G-XXXXXXXXXX',
gtm: 'XXXXXX',
_p: adSenseId,
sr: screenResolution,
ul: userLanguage,
cid: clientId,
dl: docLocation,
dr: docReferrer,
dt: doctTitle,
_dbg: debug ? 1 : '',
}
var urlString = Object.keys(stringUrlData)
.filter(analyticsKey => stringUrlData[analyticsKey])
.map(analyticsKey => analyticsKey + '=' + encodeURIComponent(stringUrlData[analyticsKey]))
.join('&')
var bounce_out = 'en=Bounce_Out&ep.Action=' + action
var bounce_out_source = 'en=Bounce_Out_source&ep.Action=' + type + '_' + action + '&ep.Label=' + type
fetch('https://www.google-analytics.com/g/collect?' + urlString + '&' + bounce_out, { method: 'POST' })
fetch('https://www.google-analytics.com/g/collect?' + urlString + '&' + bounce_out_source, { method: 'POST' })
if (Session.page == 'Partner') {
window.dataLayer.push(
{ 'event': 'pageEvent', 'Category': 'Partner page', 'action': 'Bounce Out', 'label': Session.page + '_' + action },
)
var partner_bounce_out = 'en=Partner_bounce-out&ep.Action=' + action
fetch('https://www.google-analytics.com/g/collect?' + urlString + '&' + partner_bounce_out, { method: 'POST' })
}
}
callback(action, type, label, url)
}.bind(this), 1000);
}
trackAndBounceOutRedirect(action, type, label, url) {
window.dataLayer.push(
{
'event': 'bounceOut',
'action': action,
'label': type + '_' + label,
'eventCallback': () => {
window.location.href = url
},
'eventTimeout': 1000
}
)
}
// And here then we call the main function and send the callback one:
this.trackAndBounceOut(this.state.bouncer.url, this.trackAndBounceOutRedirect)
好的,我尽力解决了这个问题,我使用fetch将数据直接发送到google服务器,跳过数据层,并使用回调函数和延迟1秒等待GA加载。 这里是我如何做到的,我不确定这是否是最好的方法,但它100%有效,我得到了关于旧数据和旧数据的准确数据。 BounceOut是旧数据GA1 Bounce_out和Bounce_out_source是新的GA2
trackAndBounceOut(url, callback) {
var action = this.state.bouncer.meta.partnerName
var label = this.state.bouncerId
var type = Session.page
window.dataLayer = window.dataLayer || []
var checkGA
setTimeout(function () {
if (ga && typeof ga.getAll == 'function') {
checkGA = true
} else {
checkGA = false
}
if (checkGA) {
var clientId = ga.getAll()[0].get('clientId');
var adSenseId = ga.getAll()[0].get('adSenseId')
var screenResolution = ga.getAll()[0].get('screenResolution')
var userLanguage = ga.getAll()[0].get('language')
var docReferrer = ga.getAll()[0].get('referrer')
var docLocation = ga.getAll()[0].get('location')
var debug = false // Enable for debug!!
var doctTitle = document.title
var stringUrlData = {
v: 2,
tid: 'G-XXXXXXXXXX',
gtm: 'XXXXXX',
_p: adSenseId,
sr: screenResolution,
ul: userLanguage,
cid: clientId,
dl: docLocation,
dr: docReferrer,
dt: doctTitle,
_dbg: debug ? 1 : '',
}
var urlString = Object.keys(stringUrlData)
.filter(analyticsKey => stringUrlData[analyticsKey])
.map(analyticsKey => analyticsKey + '=' + encodeURIComponent(stringUrlData[analyticsKey]))
.join('&')
var bounce_out = 'en=Bounce_Out&ep.Action=' + action
var bounce_out_source = 'en=Bounce_Out_source&ep.Action=' + type + '_' + action + '&ep.Label=' + type
fetch('https://www.google-analytics.com/g/collect?' + urlString + '&' + bounce_out, { method: 'POST' })
fetch('https://www.google-analytics.com/g/collect?' + urlString + '&' + bounce_out_source, { method: 'POST' })
if (Session.page == 'Partner') {
window.dataLayer.push(
{ 'event': 'pageEvent', 'Category': 'Partner page', 'action': 'Bounce Out', 'label': Session.page + '_' + action },
)
var partner_bounce_out = 'en=Partner_bounce-out&ep.Action=' + action
fetch('https://www.google-analytics.com/g/collect?' + urlString + '&' + partner_bounce_out, { method: 'POST' })
}
}
callback(action, type, label, url)
}.bind(this), 1000);
}
trackAndBounceOutRedirect(action, type, label, url) {
window.dataLayer.push(
{
'event': 'bounceOut',
'action': action,
'label': type + '_' + label,
'eventCallback': () => {
window.location.href = url
},
'eventTimeout': 1000
}
)
}
// And here then we call the main function and send the callback one:
this.trackAndBounceOut(this.state.bouncer.url, this.trackAndBounceOutRedirect)
它看起来是“设计的”:
你可能已经注意到了一件事,那就是击中目标所需的延迟
被派去。加载页面时,您可以看到浏览器如何等待
在将命中发送给GA之前几秒钟。这是因为GAv2
自动批处理请求,这也是一个很好的特性
升级
你可能已经注意到了一件事,那就是击中目标所需的延迟
被派去。加载页面时,您可以看到浏览器如何等待
将命中发送给GA前几秒钟。这是因为GAv2
自动批处理请求,这也是一个很好的功能
升级
通过在一个请求中批量处理多个点击,浏览器资源可以
留着做其他事情。延迟是由于浏览器等待查看
如果其他点击应该与页面视图一起发送
确信在用户离开页面之前,点击会触发 看起来是“按设计”:
你可能已经注意到了一件事,那就是击中目标所需的延迟
被派去。加载页面时,您可以看到浏览器如何等待
在将命中发送给GA之前几秒钟。这是因为GAv2
自动批处理请求,这也是一个很好的特性
升级
你可能已经注意到了一件事,那就是击中目标所需的延迟
被派去。加载页面时,您可以看到浏览器如何等待
将命中发送给GA前几秒钟。这是因为GAv2
自动批处理请求,这也是一个很好的功能
升级
通过在一个请求中批量处理多个点击,浏览器资源可以
留着做其他事情。延迟是由于浏览器等待查看
如果其他点击应该与页面视图一起发送
确信在用户离开页面之前,点击会触发 您好,您的代码中有一个dataLayer.push(),这很好。您能在控制台中显示推送何时发生,与发送点击时相比吗?谢谢你的回答,你可以用这个或Hi作为例子。它可能与内置的增强测量有关。你在GUI中启用了它吗?它可能会干扰你自己捕获CLICS的方式,我不认为这是一种增强的方法。我把它都禁用了,但问题是一样的。。嗯,我知道数据是成批处理的,这就是为什么会有5秒的延迟。。但我需要强制数据层以某种方式将数据发送到google服务器。。你能回到我的第一个建议上来吗:调试dataLayer.push事件发送的速度与GA命中发送的速度相比GA调试器扩展只显示GA调用,不允许审核整个过程。或者您是否尝试了GTM预览和调试模式?您好,您的代码使用了dataLayer.push(),这很好。您能在控制台中显示推送何时发生,与发送点击时相比吗?谢谢你的回答,你可以用这个或Hi作为例子。它可能与内置的增强测量有关。你在GUI中启用了它吗?它可能会干扰你自己捕获CLICS的方式,我不认为这是一种增强的方法。我把它都禁用了,但问题是一样的。。嗯,我知道数据是成批处理的,这就是为什么会有5秒的延迟。。但我需要强制数据层以某种方式将数据发送到google服务器。。你能回到我的第一个建议上来吗:调试dataLayer.push事件发送的速度与GA命中发送的速度相比GA调试器扩展只显示GA调用,不允许审核整个过程。或者您是否尝试过GTM预览和调试模式?您应该编辑初始问题,而不是通过答案添加反馈。。。因为这不是一个解决方案…你应该编辑你的初始问题,而不是通过答案添加反馈。。。因为这不是一个解决方案…是的,我可以看到。。但我还是在data.push后重定向,当我有GA2时,我会丢失数据,但我在旧GA上获得数据。@MohammedAlasaad你能确定在哪些情况下丢失数据以及它代表的容量百分比吗?不应该。你能在控制台或网络面板上勾选“保存日志”选项吗?我已经勾选了这个选项,它没有发送到谷歌,因为我在推送后重定向了它。我仍然有旧的GA和新的GA2,并且正在向两者推进。。所有其他事件都有效,但重定向后的事件无效。如果你想连接到我的电脑遥控器,我可以告诉你。你能添加一个显示数据丢失的屏幕截图吗?看起来它将适用于在此处打开错误报告错误链接是的,我可以看到。。但我还是在data.push后重定向,当我有GA2时,我会丢失数据,但我在旧GA上获得数据。@MohammedAlasaad你能确定在哪些情况下丢失数据以及它代表的容量百分比吗?不应该。
trackAndBounceOut(url, callback) {
var action = this.state.bouncer.meta.partnerName
var label = this.state.bouncerId
var type = Session.page
window.dataLayer = window.dataLayer || []
var checkGA
setTimeout(function () {
if (ga && typeof ga.getAll == 'function') {
checkGA = true
} else {
checkGA = false
}
if (checkGA) {
var clientId = ga.getAll()[0].get('clientId');
var adSenseId = ga.getAll()[0].get('adSenseId')
var screenResolution = ga.getAll()[0].get('screenResolution')
var userLanguage = ga.getAll()[0].get('language')
var docReferrer = ga.getAll()[0].get('referrer')
var docLocation = ga.getAll()[0].get('location')
var debug = false // Enable for debug!!
var doctTitle = document.title
var stringUrlData = {
v: 2,
tid: 'G-XXXXXXXXXX',
gtm: 'XXXXXX',
_p: adSenseId,
sr: screenResolution,
ul: userLanguage,
cid: clientId,
dl: docLocation,
dr: docReferrer,
dt: doctTitle,
_dbg: debug ? 1 : '',
}
var urlString = Object.keys(stringUrlData)
.filter(analyticsKey => stringUrlData[analyticsKey])
.map(analyticsKey => analyticsKey + '=' + encodeURIComponent(stringUrlData[analyticsKey]))
.join('&')
var bounce_out = 'en=Bounce_Out&ep.Action=' + action
var bounce_out_source = 'en=Bounce_Out_source&ep.Action=' + type + '_' + action + '&ep.Label=' + type
fetch('https://www.google-analytics.com/g/collect?' + urlString + '&' + bounce_out, { method: 'POST' })
fetch('https://www.google-analytics.com/g/collect?' + urlString + '&' + bounce_out_source, { method: 'POST' })
if (Session.page == 'Partner') {
window.dataLayer.push(
{ 'event': 'pageEvent', 'Category': 'Partner page', 'action': 'Bounce Out', 'label': Session.page + '_' + action },
)
var partner_bounce_out = 'en=Partner_bounce-out&ep.Action=' + action
fetch('https://www.google-analytics.com/g/collect?' + urlString + '&' + partner_bounce_out, { method: 'POST' })
}
}
callback(action, type, label, url)
}.bind(this), 1000);
}
trackAndBounceOutRedirect(action, type, label, url) {
window.dataLayer.push(
{
'event': 'bounceOut',
'action': action,
'label': type + '_' + label,
'eventCallback': () => {
window.location.href = url
},
'eventTimeout': 1000
}
)
}
// And here then we call the main function and send the callback one:
this.trackAndBounceOut(this.state.bouncer.url, this.trackAndBounceOutRedirect)