virtuales platzi online marketing estudiar cursos curso adwords google-analytics analytics race-condition

google-analytics - online - platzi cursos virtuales



Condición de carrera y uso de Google Analytics asíncrono(_gaq) sincrónicamente (6)

De support.google.com/analytics/bin/… para el análisis universal (nueva versión desde la mayoría de las demás respuestas para esta pregunta). Ahora puede especificar fácilmente una devolución de llamada.

var trackOutboundLink = function(url) { ga(''send'', ''event'', ''outbound'', ''click'', url, {''hitCallback'': function () { document.location = url; } }); }

Para mayor claridad, recomiendo usar esta sintaxis, que aclara qué propiedades está enviando y es más fácil agregar más:

ga(''send'', ''event'', { ''eventCategory'': ''Homepage'', ''eventAction'': ''Video Play'', ''eventLabel'': label, ''eventValue'': null, ''hitCallback'': function() { // redirect here }, ''transport'': ''beacon'', ''nonInteraction'': (interactive || true ? 0 : 1) });

[Aquí hay una lista completa de parámetros para todas las posibles llamadas de ga .]

Además, he agregado el conjunto de parámetros de transport a la beacon (no es realmente necesario porque se configura automáticamente si es apropiado):

Esto especifica el mecanismo de transporte con el que se enviarán los hits. Las opciones son ''beacon'', ''xhr'' o ''image''. De forma predeterminada, analytics.js intentará descubrir el mejor método basado en el tamaño de éxito y las capacidades del navegador. Si especifica ''baliza'' y el navegador del usuario no es compatible con el método navigator.sendBeacon , volverá a ''imagen'' o ''xhr'' dependiendo del tamaño del golpe.

Así que cuando se usa navigator.beacon la navegación no interrumpirá el seguimiento. Desafortunadamente, el soporte de Microsoft para la baliza no existe, por lo que aún debe colocar la redirección en una devolución de llamada.

Tengo un sitio web que utiliza el método de seguimiento asíncrono más reciente de Google Analytics (_gaq). El problema con el que me he encontrado es que quiero establecer un seguimiento de enlaces específico y me preocupa que esté creando una condición de carrera.

Básicamente, es un sitio web de noticias, por lo que tiene titulares que enlazan con historias de todo el lugar. Un título para una historia puede aparecer en 3 lugares diferentes en una página y aparecer en cientos de otras páginas. Por lo tanto, para comprender cómo interactúa nuestra audiencia con el sitio, tenemos que rastrear cómo se utiliza cada bloque de encabezado específico, y no solo el destino. Debido a estas dos estipulaciones, el seguimiento de páginas individuales, y el seguimiento de páginas referidas no será suficiente, tenemos que rastrear enlaces individuales.

Así que si tengo un enlace.

<a href="http://www.blah.com" onclick="_gaq.push(''_trackEvent'',''stuff'')">Here</a>

Debido a que _gaq.push () es una llamada asíncrona, ¿no es posible que el cambio de página ocurra antes de que Google complete el seguimiento de clics? Si es así, ¿hay alguna manera de evitarlo o tengo un malentendido sobre la forma en que funciona Google Analytics Async ( http://code.google.com/apis/analytics/docs/tracking/asyncUsageGuide.html )?


En el controlador de eventos, debe configurar la devolución de llamada de golpe:

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

enviar datos

_gaq.push([''_trackEvent''

y detener el procesamiento de eventos de eventos

e.preventDefault(); e.stopPropagation();


Estoy probando un nuevo enfoque en el que construimos la URL para utm.gif nosotros mismos, y la solicitamos, solo una vez que recibimos la respuesta (el gif) enviamos al usuario en su camino:

Uso:

trackPageview(url, function() { document.location = url; });

Código (CrumbleCookie de: http://www.dannytalk.com/read-google-analytics-cookie-script/ )

/** * Use this to log a pageview to google and make sure it gets through * See: http://www.google.com/support/forum/p/Google%20Analytics/thread?tid=5f11a529100f1d47&hl=en */ function trackPageview(url, fn) { var utmaCookie = crumbleCookie(''__utma''); var utmzCookie = crumbleCookie(''__utmz''); var cookies = ''__utma='' + utmaCookie + '';__utmz='' + utmzCookie; var requestId = '''' + (Math.floor((9999999999-999999999)*Math.random()) + 1000000000); var hId = '''' + (Math.floor((9999999999-999999999)*Math.random()) + 1000000000); var utmUrl = ''http://www.google-analytics.com/__utm.gif''; utmUrl += ''?utmwv=4.8.9''; utmUrl += ''&utmn='' + requestId; utmUrl += ''&utmhn='' + encodeURIComponent(window.location.hostname); utmUrl += ''&utmhid='' + hId; utmUrl += ''&utmr=-''; utmUrl += ''&utmp='' + encodeURIComponent(url); utmUrl += ''&utmac='' + encodeURIComponent(_gaProfileId); utmUrl += ''&utmcc='' + encodeURIComponent(cookies); var image = new Image(); image.onload = function() { fn(); }; image.src = utmUrl; } /** * @author: Danny Ng (http://www.dannytalk.com/read-google-analytics-cookie-script/) * @modified: 19/08/10 * @notes: Free to use and distribute without altering this comment. Would appreciate a link back :) */ // Strip leading and trailing white-space String.prototype.trim = function() { return this.replace(/^/s*|/s*$/g, ''''); } // Check if string is empty String.prototype.empty = function() { if (this.length == 0) return true; else if (this.length > 0) return /^/s*$/.test(this); } // Breaks cookie into an object of keypair cookie values function crumbleCookie(c) { var cookie_array = document.cookie.split('';''); var keyvaluepair = {}; for (var cookie = 0; cookie < cookie_array.length; cookie++) { var key = cookie_array[cookie].substring(0, cookie_array[cookie].indexOf(''='')).trim(); var value = cookie_array[cookie].substring(cookie_array[cookie].indexOf(''='')+1, cookie_array[cookie].length).trim(); keyvaluepair[key] = value; } if (c) return keyvaluepair[c] ? keyvaluepair[c] : null; return keyvaluepair; }


También tengo este problema, y ​​estoy decidido a encontrar una solución real .

¿Qué hay de empujar la función en la cola?

// Log a pageview to GA for a conversion _gaq.push([''_trackPageview'', url]); // Push the redirect to make sure it happens AFTER we track the pageview _gaq.push(function() { document.location = url; });


Tienes razón. Si el navegador abandona la página antes de enviar la baliza de seguimiento GA (gif hit) para el evento, el evento no se grabará. Sin embargo, esto no es nuevo en el código asíncrono, porque el proceso de envío de la baliza de seguimiento es asíncrono; El código antiguo funcionaba igual en ese sentido. Si el seguimiento es realmente tan importante, podrías hacer algo como esto:

function track(link) { if (!_gat) return true; _gaq.push([''_trackEvent'', ''stuff'']); setTimeout(function() {location.href=link.href''}, 200); return false; } ... <a href="example.com" onclick="return track(this);"></a>

Esto evitará que el navegador pase a la página siguiente cuando se haga clic en el enlace si GA ya se ha cargado (probablemente es mejor no hacer que el usuario espere tanto). Luego envía el evento y espera 200 milisegundos para enviar al usuario a la href del enlace en el que hizo clic. Esto aumenta la probabilidad de que el evento sea grabado. Puede aumentar la probabilidad aún más si prolonga el tiempo de espera, pero eso también puede perjudicar la experiencia del usuario en el proceso. Es un equilibrio con el que tendrás que experimentar.


Usar onmousedown en lugar de onclick también puede ayudar. No elimina la condición de carrera, pero le da a GA una ventaja. También existe la preocupación de que alguien haga clic en un enlace y se aleje antes de soltar el botón del mouse, pero probablemente sea un caso insignificante.