Прямо сейчас нет хорошего решения этой проблемы. Лучшее, что вы можете сделать, это добавить таймаут для задержки перенаправления. В настоящее время нет обратного вызова в _trackPageview. Когда он возвращается, это означает, что он начал отслеживание, но не гарантирует, что он успешно зарегистрировал просмотр страницы до тех пор, пока запрос __utm.gif не будет завершен.
1 sec таймаут может быть слишком большим. Я обычно сохраняю тайм-аут около 200-400 мс.
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXXXX-X']);
_gaq.push(['_trackPageview']);
_gaq.push(function() {
setTimeout(function(){
window.location.href = newUrl;
}, 200);
});
EDIT:
Это было 2 года, так как я первоначально первоначально отправил этот ответ, и с тех пор Google Analytics прошла долгий путь.
Теперь есть правильный способ сделать это:
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXXXX-X']);
_gaq.push(['_set','hitCallback',function(){
window.location.href = newUrl;
}]);
_gaq.push(['_trackPageview']);
И если вы перешли на Universal Analytics с помощью analytics.js эквивалент будет:
ga('create', 'UA-XXXXXXX-X')
ga('send', 'pageview', {
'hitCallback': function() {
window.location.href = newUrl;
}
});
EDIT 2
Вот более правильный способ сделать это, чтобы убедиться, что ваш код выполняется, даже если код Google Analytics заблокирован или взломан с помощью расширения или adBlocker.
var t = undefined;
var myCode = function(){
window.clearTimeout(t);
t = undefined;
window.location.href = newUrl;
};
t = setTimeout(myCode, 3000);
ga('create', 'UA-XXXXXXX-X')
ga('send', 'pageview', {
'hitCallback': myCode
});
См http://stackoverflow.com/questions/8147065/google-analytics-async-events-tracking-callback –
Вы пробовали использовать 'window.location.href = url' вместо' окна. location.replace (url) '? – Eduardo
То же поведение с окном.location.href = url :( – Amir