2012-02-16 10 views
6

Estoy usando Google Analytics y haciendo redirecciones una vez que la solicitud de análisis ha finalizado.JavaScript se ejecuta después de google analytics

estoy utilizando este código:

var _gaq = _gaq || []; 

_gaq.push(['_setAccount', 'UA-12345678-1']); 

_gaq.push(['_trackPageview']); 

_gaq.push(function() { 
    window.location.replace("myRedirectToUri"); 
}); 

Esto no se ejecuta correctamente.

El redireccionamiento se realiza correctamente (como devolución de llamada analítica) en Firefox, pero no en otros navegadores (IE, Chrome, Safari) por lo que pierdo datos analíticos.

Por el momento he establecido el tiempo de espera de 1 segundo, pero esa no es la solución real.

¿Alguna ayuda sobre cómo implementar esto correctamente?

+0

Ver http://stackoverflow.com/questions/8147065/google-analytics-async-events-tracking-callback –

+0

¿Ha tratado de usar 'window.location.href = url' en lugar de' ventana. location.replace (url) '? – Eduardo

+0

Mismo comportamiento con window.location.href = url :( – Amir

Respuesta

11

En este momento no hay una buena solución a este problema. Lo mejor que puede hacer es agregar un tiempo de espera para retrasar la redirección. Actualmente no hay devolución de llamada a _trackPageview. Cuando vuelve, significa que comenzó el seguimiento, pero no está garantizado que haya registrado correctamente la página vista hasta que se complete la solicitud __utm.gif.

El tiempo de espera de 1 segundo puede ser demasiado. Por lo general, mantengo el tiempo de espera entre 200 y 400 ms.

var _gaq = _gaq || []; 

_gaq.push(['_setAccount', 'UA-XXXXXXX-X']); 

_gaq.push(['_trackPageview']); 

_gaq.push(function() { 
    setTimeout(function(){ 
     window.location.href = newUrl; 
    }, 200); 
}); 

EDIT:

Han pasado 2 años desde que originalmente publicado inicialmente esta respuesta y desde entonces Google Analytics ha recorrido un largo camino.

Ahora hay una forma correcta de hacer esto:

var _gaq = _gaq || []; 

_gaq.push(['_setAccount', 'UA-XXXXXXX-X']); 

_gaq.push(['_set','hitCallback',function(){ 
    window.location.href = newUrl; 
}]); 

_gaq.push(['_trackPageview']); 

Y si ha migrado a Universal Analytics mediante analytics.js el equivalente sería:

ga('create', 'UA-XXXXXXX-X') 

ga('send', 'pageview', { 
    'hitCallback': function() { 
    window.location.href = newUrl; 
    } 
}); 

EDIT 2

Esta es la forma más adecuada de hacerlo para asegurarse de que su código se ejecuta incluso si el código de Google Analytics está bloqueado o manipulado por una extensión o 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 
}); 
+1

Tenga cuidado, NO funcionará si alguien tiene AdBlock o Ghostery activado. Si desea ejecutar el cambio de ubicación para los usuarios de AdBlock, use setTimeout sin empujarlo hacia la matriz ga en una función. – DanFromGermany

Cuestiones relacionadas