Отправка события Google Analytics, а затем немедленное перемещение

Можно ли отправить событие Google Analytics и сразу перейти отсюда, например?

_gaq.push(['_trackEvent', 'foobar']);
window.location = "/";

Если Google Analytics выполняет какой-либо запрос AJAX, когда он вызывается, он должен работать, остаемся ли мы на странице или нет. Меня беспокоит то, что кажется, что иногда это может просто помещать материал в массив для последующей обработки. Я думаю, что это происходит только изначально, когда Google Analytics еще не успела инициализироваться, но я бы хотел убедиться в этом.

Я провел тест с отладкой GA, и, похоже, он сработал, но я не уверен, что это всегда будет в зависимости от скорости загрузки, а что нет.

Могу ли я сделать это и никогда не потерять никаких событий?

Ответ 1

То, как я это сделал, выглядит так:

_gaq.push(['_trackEvent', '...', '...', '...']);
_gaq.push(function(){
    // do stuff here
});

$('#logo').on('click', function(){
    var curPage = window.location.href;
    _gaq.push(['_trackEvent', curPage, '#logo']);
    _gaq.push(function(){
        window.location.href = '/';
    });
});

Второй push-вызов будет всегда запускаться после первого, потому что Google ставит в очередь все push-вызовы, так что первый будет запускаться и завершаться, затем второй будет запускаться и завершаться. Google позволяет помещать функции в метод push, чтобы вы могли их поставить в очередь.

Источник: https://developers.google.com/analytics/devguides/collection/gajs/#PushingFunctions

Ответ 2

Я добавляю небольшую задержку (через setTimeout), если новая страница не открывается в новом окне.

У меня еще не было возможности попробовать это, но Google Universal Analytics hitCallback, которая выполняется после отправки данных.

Ответ 3

@mike упоминает метод hitCallback, который описан в аналитике. js:

В некоторых случаях, например, когда вы отслеживаете исходящие ссылки, вам может понадобиться знать, когда трекер завершает отправку данных. Таким образом вы можете отправить пользователя в пункт назначения только после того, как их клик был отправлен в Google Analytics. Чтобы решить эту проблему, команда send позволяет указать функцию hitCallback в объекте имени поля, который будет выполнен, как только analytics.js завершит отправку данных.

Это фантастика, за исключением того, что фрагмент все еще находится в публичной бета-версии. Если по какой-либо причине (по сравнению с технофобной политикой) вы ограничены функциональностью ga.js, вы можете использовать это обходное решение:

_gaq.push(['_set', 'hitCallback', function(){
  document.location='someOtherPage.html';   
}]);
_gaq.push(['_trackEvent', 'category', 'event', 'value']);

Другим разумным предложением является отказ от выполнения обратного вызова немедленно, если _gaq не определен.

Ответ 4

Похоже, ваша озабоченность по поводу потери события является законной, см. этот вопрос. Один ответ кажется немного хрупким в отношении того, что Google меняет свой код, но позволит вам подтвердить отслеживание событий, прежде чем перейти к ссылке. Вероятно, это будет "почти немедленным".