ver total que los google eventos evento event etiqueta donde code javascript javascript-events google-analytics synchronous

javascript - total - que es un hit en google analytics



Google Analytics, evento de descarga de la página de seguimiento (3)

Hay una forma de asegurarse de que la solicitud se envíe a GA. Simo Ahava escribió una muy buena publicación de blog titulada -
" Aproveche useBeacon And beforeunload en Google Analytics ".

Utilizando la brillante solución sendBeacon . Aquí hay una cita que aborda la respuesta seleccionada a esta pregunta:

Los agentes de usuario normalmente ignorarán XMLHttpRequests asíncronas realizadas en un controlador de descarga. Para resolver este problema, el código de análisis y diagnóstico normalmente creará una XMLHttpRequest sincrónica en un controlador de descarga o de descarga previa para enviar los datos. La XMLHttpRequest sincrónica obliga al agente de usuario a retrasar la descarga del documento y hace que la siguiente navegación parezca más lenta. No hay nada que la página siguiente pueda hacer para evitar esta percepción de rendimiento de carga de página deficiente.

Hay otras técnicas utilizadas para garantizar que los datos se envíen. Una de esas técnicas es retrasar la descarga para enviar datos creando un elemento de imagen y configurando su atributo src dentro del controlador de descarga. Como la mayoría de los agentes de usuario retrasarán la descarga para completar la carga de imágenes pendiente, los datos pueden enviarse durante la descarga. Otra técnica es crear un ciclo de no operación durante varios segundos dentro del controlador de descarga para retrasar la descarga y enviar datos a un servidor.

Estas técnicas no solo representan patrones de codificación deficientes, algunos de ellos no son confiables y también dan como resultado la percepción del bajo rendimiento de carga de la página para la siguiente navegación.

Estoy intentando lograr el seguimiento de un evento cuando un usuario abandona la página con Google Analytics (analytics.js). Aunque no se sabe cómo se irá el usuario, puede ser debido a un enlace externo o simplemente al cerrar la pestaña. Así que pensé en engancharme al evento beforeunload o download y luego:

window.addEventListener("beforeunload", function() { ga(''send'', ''event'', ''some'', ''other'', ''data''); });

Ahora mi pregunta es, ¿la solicitud al servidor GA será sincrónica o puedo forzar de alguna manera ese comportamiento con la propiedad hitCallback ? Si eso no es posible, ¿de qué otra forma puedo lograrlo? ¡Preferiblemente sin tener que establecer un tiempo de espera o un tiempo de espera fijo para el usuario!


La solicitud no será sincrónica, las llamadas de seguimiento de GA nunca lo son.

La única forma de garantizar que la llamada finalice es asegurarse de que la página permanezca abierta el tiempo suficiente: para un evento en un enlace, normalmente lo haría con un tiempo de espera potencialmente combinado con un hitCallback, como mencionó.

La única forma de mantener abierta una ventana cuando el usuario cierra una pestaña es devolver un valor desde el manejador de antes de la carga, lo que generará una alerta de "Confirmar navegación". Esa sería una solución realmente mala solo para rastrear un evento de GA, obviamente.


Puede esperar que se envíe un hit a Google Analytics en la página onunload , pero requiere un bucle ocupado. En mi caso, esto no retrasó la navegación del usuario, ya que la página era una ventana emergente dedicada a una aplicación web. Estaría más preocupado por hacer esto en línea con la navegación de la página web normal. Aún así, tuve que tomar 2 duchas para quitar la porquería después de confirmar el código con un bucle ocupado.

var MAX_WAIT_MS = 1000; var _waitForFinalHit = false; function recordFinalHit() { _waitForFinalHit = true; ga(''send'', ''event'', ''some'', ''other'', ''data'', { ''hitCallback'': function() { _waitForFinalHit = false; } }); } function waitForFinalHit() { var waitStart = new Date().getTime(); while (_waitForFinalHit && (new Date().getTime() - waitStart < MAX_WAIT_MS)) { } } function myOnUnload() { recordFinalHit(); // Do your other final stuff here... waitForFinalHit(); } window.onunload = myOnUnload;