Google analytics 谷歌分析应用程序&x2B;Web慢速发送-收集请求

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" },

我正在尝试实施GTM和新的Google analytics web+应用程序,我可以看到将数据推送到Google analytics需要5秒钟。 我已经测试了一个新的网站和简单的跟踪事件点击链接

这里是热门节目:==>

~ 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)