7

Tengo una página simple que necesito para ejecutar algunos GWC & GATC js y luego redirigir a otra url.Uso de JS Callback con Google Analytics

<head> 

<script> 
function utmx_section(){}function utmx(){} 
(function(){var k='xxx',d=document,l=d.location,c=d.cookie;function f(n){ 
if(c){var i=c.indexOf(n+'=');if(i>-1){var j=c.indexOf(';',i);return escape(c.substring(i+n. 
length+1,j<0?c.length:j))}}}var x=f('__utmx'),xx=f('__utmxx'),h=l.hash; 
d.write('<sc'+'ript src="'+ 
'http'+(l.protocol=='https:'?'s://ssl':'://www')+'.google-analytics.com' 
+'/siteopt.js?v=1&utmxkey='+k+'&utmx='+(x?x:'')+'&utmxx='+(xx?xx:'')+'&utmxtime=' 
+new Date().valueOf()+(h?'&utmxhash='+escape(h.substr(1)):'')+ 
'" type="text/javascript" charset="utf-8"></sc'+'ript>')})(); 
</script><script>utmx("url",'A/B');</script> 

<script type="text/javascript"> 
    var _gaq = _gaq || []; 
    _gaq.push(['gwo._setAccount', 'UA-xxxxxx-x']); 
    _gaq.push(['gwo._trackPageview', '/xxxxxxxx/test']); 
    (function() { 
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google- analytics.com/ga.js'; 
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 
    })(); 
</script> 

<script> 
    window.location = 'MY REDIRECT URL'; 
</script> 
</head> 

El problema que estoy teniendo es que necesito para garantizar que el código GATC GWO & se ejecuta antes de que mi window.location se llama. Podría hacer setTimeout, pero eso no ofrece garantías y agrega tiempo de carga adicional.

¿Alguna idea sobre cómo puedo hacer esto?

Respuesta

26

Creo que he encontrado la solución. Resulta que puede empujar las funciones a _gaq. El _gaq luego se ejecuta de forma secuencial, lo que garantiza que las cosas de GA se solucionen antes de llegar a mi redirección.

var _gaq = _gaq || []; 
    _gaq.push(['gwo._setAccount', 'UA-xxxxxx-x']); 
    _gaq.push(['gwo._trackPageview', '/xxxxxxxx/test']); 

    _gaq.push(function(){ 
    window.location = 'MY REDIRECT URL'; 
    }); 

http://code.google.com/apis/analytics/docs/tracking/asyncUsageGuide.html#PushingFunctions

+9

Esto funciona y tiene sentido, pero por alguna razón, la [sugerencia oficial] (http://www.google.com/support/analytics/bin/answer.py?answer=55527) es usar 'setTimeout' para redirigir algunos ms después de que el evento se haya enviado a la cola GA. – lucasrizoli

+2

@lucasrizoli y todo lo que creo que se llamará a la función una vez que la solicitud del píxel ha sido hecha por el código GA, pero no después de que regrese. Quizás esa es la razón por la que Google sugiere retrasar el redireccionamiento, aunque no sé si es importante esperar a que vuelva la solicitud. –

+8

Si bien se procesa en secuencia desde la cola, nada indica que las instrucciones anteriores habrán terminado de procesarse antes de que se active el siguiente => el tiempo de espera sigue siendo necesario. Sin embargo, Google está escuchando estos requisitos, estad atentos al registro de cambios de ga.js http://code.google.com/intl/fr/apis/analytics/community/gajs_changelog.html –

6

la _gaq.push no funcionó para mí ...

utilicé la solución setTimeout ya conocido:

$('.link-site').click(function(e){ 
    e.preventDefault(); 
    _gaq.push(['_trackPageview', '/btn-link-site']); 
    window.setTimeout(function(){ 
     window.location=$('.link-site').attr('href'); 
    },300); 
}); 
+4

Esto es mejor que la solución aceptada porque los comandos enviados a la cola asíncrona suceden, de manera asincrónica :) Esto probablemente no funcionará el 100% del tiempo, pero es más probable que tenga éxito que no pausar en absoluto. – dana

+1

Es un truco y no es una solución adecuada. No hay garantías de que el evento se ejecutará antes de la redirección. –