Google Analytics App + веб медленная отправка запроса на сбор - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь внедрить GTM и новое приложение Google + для веб-аналитики и вижу, что данные от 5se c до pu sh отправляются в Google Analytics. Я проверил на свободном sh сайте и простом событии отслеживания при нажатии на ссылку.

https://drive.google.com/file/d/1ILJLROq05OQwx3oXXCrOVXDeoxtbdKVw/view?usp=sharing

document.addEventListener('click', function (event) {
// If the clicked element doesn't have the right selector, bail
if (!event.target.matches('.btn-GA')) return;
// Don't follow the link
event.preventDefault();
// Log the clicked element in the console
console.log('Click......');
dataLayer.push({
"event": "wa_trigger",
"wa_event": "bounce_out",
"wa_action": "bounce_action",
"wa_label": "bounce_label"
});
}, false);

<a class="btn-GA" href="#">TEST CLICK</a>

======= ================================================

ОБНОВЛЕНИЕ :: ::

Спасибо за ваш ответ. Я заметил, что это действительно быстро, если я установлю истину для отладки GA https://chrome.google.com/webstore/detail/google-analytics-debugger/jnkmfdileelhofjcijamephohjechhna, и удар наступит быстро, и сначала другие попадут ... но когда удар завершится, он закончится через 5se c.

А вот скриншот с консоли: https://drive.google.com/file/d/1a4n1WldESjbwTYkwiQ9PPX9RijigDApt/view?usp=sharing

Вот пу sh и нажмите Здесь пу sh =====>

a.js:6      Google - dataLayer.push():  event: wa_trigger
a.js:6 ~ Object: 
{
    event: "wa_trigger",
    wa_event: "logo-click"
}
Currently in memory:  {event: "wa_trigger", wa_event: "logo-click", eventCallback: ƒ}
a.js:6 ~ Call Stack
a.js:6 ~ 20.140 s since Document Start

А вот и хит: ====>

~ 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

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Похоже, что это «по замыслу»:

Одна вещь, которую вы, возможно, заметили, это задержка отправки удара. Когда вы загружаете страницу, вы можете увидеть, как браузер подождет несколько секунд, прежде чем отправит удар в GA. Это связано с тем, что GAv2 автоматически группирует запросы, что, опять же, является отличным обновлением функции. Одна вещь, которую вы могли заметить, это задержка отправки удара. Когда вы загружаете страницу, вы можете увидеть, как браузер подождет несколько секунд, прежде чем отправит удар в GA. Это связано с тем, что GAv2 автоматически группирует запросы , что, опять же, является отличным обновлением функции.

Путем объединения нескольких обращений в один запрос ресурсы браузера сохраняются для других целей. Задержка происходит из-за того, что браузер ожидает, пока не будут отправлены другие хиты вместе с просмотром страницы.

https://www.simoahava.com/analytics/getting-started-with-google-analytics-app-web/

Будьте уверены, что хит сработает до того, как пользователь покинет страницу!

0 голосов
/ 19 апреля 2020

Хорошо, я приложил все усилия, чтобы исправить проблему, и я использовал fetch, чтобы отправить данные напрямую на сервер Google и пропустить dataLayer, используя функцию обратного вызова и небольшую задержку 1se c, чтобы дождаться загрузки 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)
...