2010-09-29 13 views
16

En la documentación de Google se dice que un evento se puede seguir de la siguiente manera:¿Cómo hace Google Analytics realizar un seguimiento de eventos cuando el usuario navega a otra página dentro de un dominio

<a onclick="_gaq.push(['_trackEvent', 'category', 'action', 'opt_label', opt_value]);">click me</a> 

o versión anterior:

<a onclick="pageTracker._trackEvent('category', 'action', 'opt_label', opt_value);">click me</a> 

que estaba buscando con Firebug a la petición que se hizo cuando un clic en un enlace y veo petición hay abortada:

http://www.google-analytics.com/__utm.gif?utmwv=4.7.2&utmn=907737223&....

Esto sucede porque el navegador descarga todos los javascript cuando el usuario navega a una página nueva. ¿Cómo en este caso se realiza el seguimiento de eventos?

Editar: Dado que una imagen vale más que mil palabras ... alt text

Al hacer clic en un enlace de Firebug me muestra esta secuencia de solicitudes (aquí se muestran cuatro primeros, después de la siguiente manera a las solicitudes llenar el contenido de la página)

+0

¿Puede ser más claro sobre lo que quiere decir con respecto a que se trata de una solicitud cancelada? Ese utm.gif se parece al comienzo de un golpe de GIF correctamente formado. ¿Estás diciendo que Firebug dice que no golpea con éxito el gif? – Yahel

+0

@yc - No. Cargué la imagen de lo que muestra firebugs. –

Respuesta

17

El problema es que no hay suficiente tiempo para que la secuencia de comandos termine de ejecutarse antes de llevar al usuario a la siguiente página. Lo que puede hacer es crear una función de envoltura para su código GA y en el clic, llamar a la función de envoltura y después de que se active el código GA en su función de envoltura, establecer un tiempo de espera y actualizar location.href con la url del enlace. Ejemplo:

<a href="somepage.html" onclick="wrapper_function(this,'category', 'action', 'opt_label', 'opt_value');return false;">click me</a> 

<script type='text/javascript'> 
function wrapper_function(that,category,action,opt_label,opt_value) { 
    _gaq.push(['_trackEvent', category, action, opt_label, opt_value]); 
    window.setTimeout("window.location.href='" + that.href + "'", 1000); 
} 
</script> 

código varía un poco en función de su enlace, pero esperamos que pueda hacerse una idea - básicamente se espera un poco antes de tomar el usuario a la URL de destino para dar la secuencia de comandos para ejecutar algún tiempo.

Actualización: Esta respuesta fue publicada hace varios años y mucho ha sucedido desde entonces, sin embargo, continuar para obtener retroalimentación (y upvotes) de vez en cuando, por lo que pensé en actualizar esta respuesta con nueva información. Esta respuesta todavía es posible, pero si está utilizando Universal Analytics, existe una función hitCallback disponible. El hitCallback function is also available to their traditional _gaq (ga.js) pero no está documentado oficialmente.

+1

increíble, acabo de tener este problema y busqué en Google esta respuesta 58 minutos después de que fue respondida. ¡Me encanta lo rápido que SO! – Ian

+5

Me parece muy engorroso. ¿No hay otras formas de hacerlo? –

+0

Bueno, puede adjuntar la función de envoltura con un detector de eventos en su lugar, para mantener js fuera de la etiqueta de anclaje. Pero sigue siendo el mismo principio de demorar un poco antes de mover al usuario a la siguiente página. Esta es la mejor solución que he encontrado hasta ahora. Por supuesto, estoy dispuesto a escuchar otras soluciones. –

10

Este problema se responde Google's documentation:

uso

<script type="text/javascript"> 
function recordOutboundLink(link, category, action) { 
    try { 
    var myTracker=_gat._getTrackerByName(); 
    _gaq.push(['myTracker._trackEvent', ' + category + ', ' + action + ']); 
    setTimeout('document.location = "' + link.href + '"', 100) 
    }catch(err){} 
} 
</script> 

o

<script type="text/javascript"> 
function recordOutboundLink(link, category, action) { 
    try { 
    var pageTracker=_gat._getTracker("UA-XXXXX-X"); 
    pageTracker._trackEvent(category, action); 
    setTimeout('document.location = "' + link.href + '"', 100) 
    }catch(err){} 
} 
</script> 

Esto más o menos la misma que la respuesta de Lápiz de color violeta, pero tiene un nombre de método más agradable y es la solución oficial recomendada por Google.

+0

El problema con esta solución es que no hay una estimación de error. Gracias por su respuesta. –

+1

La documentación se ha actualizado para incluir una devolución de llamada por lo que no es necesario que haya un retraso arbitrario. – Mark

+0

Sí, el enlace de documento anterior se ha actualizado, pero tenga en cuenta que ahora muestra el código de estilo UA no el código _gaq antiguo (aunque todavía proporcionan un enlace al mismo en esa página). Por lo tanto, si todavía está utilizando la sintaxis pre-UA, necesitará hacer su propio setTimeout. –

2

Como se indica anteriormente, esto se debe a que la página es unloaded antes de la devolución de la llamada Async.Si se desea implementar un pequeño retraso para permitir gaq para sincronizar, sugeriría lo siguiente:

primero Añadir un enlace y añadir una clase extra o data atributo:

<a href="xxx" data-track-exit="true">My Link</a> 

A continuación, agregue en su Javascript:

$("a[data-track-exit]").on('click', function(e) { 
    e.preventDefault(); 
    var thatEl = $(this); 
    thatEl.unbind(e.type, arguments.callee); 
    _gaq.push([ "_trackEvent", action, e.type, 'label', 1 ]); 
    setTimeout(function() { 
    thatEl.trigger(event); 
    }, 200); 
}); 

realmente no apruebo este comportamiento (por ejemplo, si se va a otra página en su sitio, intento capturar los datos en esa página), pero es un paliativo decente. Esto se puede extrapolar no solo para eventos click, sino también para enviar y cualquier otra cosa que también cause la descarga de una página. ¡Espero que esto ayude!

+0

¿Has intentado enviar el evento en la segunda página? En los informes de GA, querrá ver el evento en el informe de la primera página. Entonces teóricamente tendrá que rastrear el evento ANTES de obtener una vista de página en la segunda página. ¿Funcionará así? –

0

Tuve el mismo problema. Prueba este, funciona para mí. Parece que ga no le gusta los números como un valor de etiqueta. Por lo tanto, conviértalo en una cadena.

trackEvent: function(category, action, opt_label, opt_value){ 
    if(typeof opt_label === 'undefined') opt_label = ''; 
    if(typeof opt_value === 'undefined') opt_value = 1; 
    _gaq.push([ 
     '_trackEvent', 
     String(category), 
     String(action), 
     String(opt_label), 
     opt_value 
    ]); 
} 
Cuestiones relacionadas