¡¡LEA ESTO (26 de agosto de 2019)!! Desafortunadamente, la actualización que realicé en 2016 contenía un código incompleto y roto. Nunca me di cuenta de esto hasta que me lo señalaron casi tres años después. En este punto, no tengo una copia de seguridad funcional de la solución, por lo que, a menos que algún servicio de archivo/caché de Web logre sacar a la luz el código, este artículo básicamente se pierde.
ACTUALIZACIÓN 20 de diciembre de 2016: hice algunas correcciones en la solución. ¡Asegúrese de obtener el último fragmento de código que aparece a continuación!
Habiendo trabajado en todo tipo de Google Analytics A lo largo de los años, me he encontrado cada vez más interesado en los fundamentos técnicos del análisis digital en lugar del trabajo analítico actual. Supongo que todos aprovechamos nuestras respectivas fortalezas. Por ejemplo, todavía hay muchos puramente técnico / tecnológico misterios que rodean a Google Analytics, porque gran parte del procesamiento de datos se realiza en el lado del servidor.
Uno de estos misterios es un circuito de retroalimentación adecuado para la calidad de las solicitudes. Cuando envía una solicitud a Google Analytics, como una visita a una página vista, puede verificar que funciona de varias maneras:
He cubierto gran parte de la depuración de Google Analytics en Este artículo.
Sin embargo, no importa cuán exitosas sean sus propias pruebas, falta una cosa: una forma sólida y confiable de recopilar datos de todas las solicitudes fallidas de los visitantes de su sitio. Google Analytics no registra automáticamente los problemas con la recopilación de datos, incluso si Notificaciones de análisis revelan algunos problemas.
Esto puede, y debería, generar dudas saludables sobre la veracidad de su conjunto de datos: ¿es una muestra representativa de todas las visitas enviadas desde su propiedad digital o alguna información crítica para el negocio (como el comercio electrónico) se está eliminando más que el promedio?
En este artículo, quiero mostrar una forma sencilla de registrar todas las solicitudes fallidas en Google Analytics como eventos nuevos. La solución se basa en Esteban Harris‘ impresionante espía gay el enfoque técnico se encapsula en una única etiqueta HTML personalizada en Administrador de etiquetas de Google.
¡Sigue leyendo, amigo mío!
incógnita
El boletín a fuego lento
Suscríbete al Boletín a fuego lento para recibir las últimas noticias y contenido de Simo Ahava en su bandeja de entrada de correo electrónico.
la solución
Así es como funciona.
-
GA Spy procesa cada llamada al
ga()
función international. -
Para cada llamada con el
ship
comando, envíe la carga útil del hit ahttps://www.google-analytics.com/debug/gather
(leer más sobre el/debug/
punto closing). -
No olvide enviar el resultado recurring a Google Analytics.
-
si el
/debug/
devuelve una solicitud fallida, envía el mensaje de error y la carga útil del hit fallido adataLayer
.
En pocas palabras, por cada visita enviada a Google Analytics, también envía la misma visita al punto closing de depuración de GA. Este punto closing devuelve información sobre si la solicitud fue exitosa o no y, de no ser así, cuál fue el problema.
{
"hitParsingResult": ( {
"legitimate": false,
"parserMessage": ( {
"messageType": "WARN",
"description": "The worth offered for parameter 'ev' is invalid. Please see http://goo.gl/a8d4RP#ev for particulars.",
"messageCode": "VALUE_INVALID",
"parameter": "ev"
} ),
"hit": "..."
} ),
"parserMessage": ( {
"messageType": "INFO",
"description": "Discovered 1 hit within the request."
} )
}
De dataLayer
De hecho, estoy enviando esta información a Google Analytics a través de GTM. De esta manera terminará con un informe related a este:
Diablos, incluso puedes hacer clic en uno de los mensajes de error para profundizar en las cargas útiles reales. Por ejemplo, si elijo ‘ea’ error, puedo ver las cargas útiles y verificar que, efectivamente, no hay ningún parámetro de acción de evento con estos resultados.
Luego puedo ir a GTM, encontrar la etiqueta infractora y corregirla para enviar siempre algún valor en la Acción del evento.
Debido a la abstracción de dataLayer
no es necesario que registre esta información en Google Analytics. De hecho, es posible que no desear a, ya que es posible que ya tenga algún tipo de configuración de plataforma de registro en su proceso de desarrollo. Gracias a Google Tag Supervisor, puede enviar los datos a cualquier punto closing que admita la transferencia de datos generada por JavaScript (por ejemplo, solicitudes HTTP).
Sin embargo, elegí enviar la información a Google Analytics. Al hacerlo, puedo alinear estos errores de validación con todos los demás resultados que este usuario en explicit ha enviado a GA y, por lo tanto, puedo identificar problemas más importantes de los que estos errores de validación podrían ser solo un síntoma. Por ejemplo, es posible que una etiqueta de comercio electrónico solo falle si el usuario ha seguido un embudo específico en el sitio. Al enviar el error de validación a Google Analytics, puedo ver si ocurrió durante uno de estos embudos rotos, lo que me brinda más información para solucionarlo al closing.
como hacerlo
Básicamente necesitas un Etiqueta HTML personalizada que dispara sobre el Todas las páginas disparador, con un mayor Prioridad de etiqueta que cualquiera de sus etiquetas de Google Analytics que también podrían activarse en este evento.
Es importante que este código comience a ejecutarse antes de que sus etiquetas de Google Analytics tengan la oportunidad de iniciarse. Este código sobrescribe el ga()
método, y cualquier etiqueta que ya se haya activado no se depurará con esta solución.
Primero necesitará el código actual de GA Spy y podrá descargar la última versión desde El repositorio de Stephen. Debe copiar y pegar JavaScript en una etiqueta HTML personalizada y luego agregar el oyente personalizado debajo de ella. Aquí está el ejemplo completo, donde minimicé el código GA Spy para hacerlo más compacto. Desplácese hacia abajo más allá de la parte GA Spy para encontrar la magia actual.
<script>
/* Minified GA Spy begins */
window.gaSpy=window.gaSpy||perform(b){var j,okay,c=perform(a)"ga",a.debug=!!a.debug,a("perform"==typeof b?{callback:b}:b),d=c.gaObjName,e=window(d),f=window.console&&c.debug;?perform(){var a=().slice.name(arguments);a.unshift("("+c.debugLogPrefix+")"),console.log.apply(console,a)}:perform(){},g=perform(a){var b,d={args:a,the:{}},e=d.the;return c.debug&&perform;(b,c)a(1)),"object"==typeof a(a.length-1)&&(e.trackerName=a(a.length-1).title,h=perform(){var a=().slice.name(arguments);if(c.debug){if(!g(a))return f("Command blocked.")}else strive{if(!g(a))return}catch(a){}return f("Command allowed:",a),h._gaOrig.apply(h._gaOrig,a)},i=perform(){var a,b=h._gaOrig=window(d);f("Hijack",b._gaOrig?"(already hijacked)":""),window(d)=h;for(a in b)b.hasOwnProperty(a)&&(window(d)(a)=b(a))};if(f("Config:",c),e||(f("Instantiate GA command queue"),e=window(d)=perform()()).push(arguments),e.l=1*new Date),e.getAll)f("GA already loaded; can not see earlier instructions"),i();else{if(!e.l)throw new Error("("+c.debugLogPrefix+") Aborting; `"+d+"` not the GA object.");if(f("Command queue instantiated, however library not but loaded"),e.q&&e.q.size;){for(f("Making use of listener to",e.q.size," queued instructions"),j=(),okay=0;okay -1; })(0)
.description;
var errorHit = information.hitParsingResult(0).hit;
window.dataLayer.push({
occasion: 'gaValidationError',
gaValidationError: {
description: errorDescription,
hit: errorHit
}
});
};
// If a 'ship' command is registered, begin the method
if (typeof ga === 'perform' && trackerName && gaCommand === 'ship') {
ga(perform() {
tracker = ga.getByName(trackerName);
if (!tracker.get('debugDone')) {
originalSendTask = tracker.get('sendHitTask');
tracker.set('sendHitTask', buildDebugHit);
}
});
}
} catch(e) {
// Error dealing with
}
});
script>
Esta solución utiliza API de tareas de Common Analytics copiar la carga útil enviada a Google Analytics y luego enviarla al punto closing del depurador.
Dado que en realidad estás “secuestrando” Google Analytics, es muy importante que prueba esto a fondo. Para ver si funciona, debería ver una solicitud POST a /debug/gather por cada acceso actual a /gather. Puede encontrar esto en el depurador de purple de las herramientas de desarrollo de su navegador. Así es como se ve el resultado en Chrome:
Nuevamente, recuerda probarlo.
Enviar la información a Google Analytics
Para enviar los resultados de error de validación a Google Analytics, necesitará un Etiqueta de análisis commondos Variables de capa de datos y un Activador de evento personalizado.
El Variables de capa de datos debe apuntar a nombres de variables gaValidationError.description
y gaValidationError.hit
. Por lo tanto, podrían verse así:
A continuación, el Activador de evento personalizado es un asunto easy y se ve así:
Finalmente, el Etiqueta de análisis common es su etiqueta de evento común y corriente, con solo una modificación importante. Necesitas establecer una costumbre Campos para configurar campo a:
Nombre del campo: depuraciónHecho
Valor: verdadero
No te molestes en buscarlo en el referencia de campo admitida para Analytics.jsno está ahí. Es un campo personalizado que creé solo para esta solución. Evita dos cosas: 1) que las llamadas al punto closing de depuración se multipliquen cuando se utiliza el mismo rastreador y 2) llamadas al punto closing de depuración para los eventos de error de validación.
Así es como podría verse la etiqueta Evento:
Esta etiqueta en explicit enviará cada error de validación como un evento de no interacción a Google Analytics, con la descripción del error como Acción del evento y la carga útil del hit roto como Etiqueta del evento.
Resumen
Esta solución se basa en la genialidad de espía ga. Básicamente, el script secuestra el método international GA y copia todos los comandos en el punto closing de depuración.
Lo que hace esta solución es brindarle otra herramienta para validar su configuración de Google Analytics. Cuando se trabaja con configuraciones complejas de Google Tag Supervisor, puede resultar difícil controlar todas las variables que se utilizan. Esto podría generar problemas en sus etiquetas, cuando un campo obligatorio termina con un valor en blanco simplemente porque una variable no se resolvió de la manera esperada. Esta solución le permite encontrar estos casos con facilidad, brindándole un camino claro para solucionarlos antes de que se conviertan en un problema actual de calidad de los datos.
Sería muy bueno tener el /debug/
interfaz como una herramienta que podría instalar localmente. De esa manera, no necesitará hacer el viaje a los servidores de Google Analytics y, en su lugar, validar las visitas en su propio servidor internet. Por otro lado, la lógica probablemente no sea tan compleja, por lo que tenerla como una biblioteca JavaScript dedicada también sería genial. En cualquier caso, el depurador de endpoints es una herramienta realmente sencilla, especialmente cuando se combina con GA Spy, como se ilustra en este artículo.
Otra cosa que haría todo esto más fácil sería si la solicitud authentic de /gather
simplemente devolvió la carga útil de depuración automáticamente. De esa manera, podrías simplemente ver las respuestas a las solicitudes de GA sin tener que hacer un viaje adicional para /debug/
. Entiendo que esto no existe debido a la latencia y a que la mayoría de los accesos a GA todavía se realizan con una solicitud GET. Aún así, Google podría al menos convertirlo en una configuración configurable en la solicitud de GA.