Aquí estamos, reunidos con customTask
Esta vez, pondremos a funcionar este maravilloso mecanismo por una muy, muy buena causa. Una de las “características” menos conocidas de Análisis de Google es que cuando el tamaño de la carga útil (el cuerpo de la solicitud que realmente se envía a Google Analytics con cada solicitud) supera un cierto límite, específicamente 8192 bytesel golpe es abortado Sin previo aviso. Esto puede resultar sorprendente, ya que no hay ninguna indicación en Google Analytics de que se estén perdiendo visitas debido a esto.
¿La solución? Un pequeño y bonito customTask
script, que scale back recursivamente partes de la carga útil hasta que la longitud está justo por debajo del límite.
La thought es que usted podrá especificar una lista de parámetros de carga útil que se eliminarán uno por uno de la carga útil hasta que el tamaño esté de manera segura por debajo del máximo de 8192. Lo primero que desaparecerán son algunas de las dimensiones predeterminadas que nadie usa realmente, como ‘Java habilitado’ y ‘Codificación de documentos’A continuación, puede enumerar todas las dimensiones personalizadas que desea eliminar, en orden de prioridad.
Por último, podrás incluir en la carga útil los parámetros de impresión de comercio electrónico mejorado que deseas eliminar de cada impresión. El script se detendrá en cuanto la longitud sea inferior a 8192, por lo que lo más possible es que algunas impresiones tengan más detalles que otras.
¿Por qué detenerse en las impresiones? Porque, por experiencia, ahí es donde radican la mayoría de los problemas. No debería ser demasiado difícil personalizar el script para que también incluya Promociones e incluso objetos de productos de comercio electrónico mejorados “normales”.
Una vez que haya implementado esto en sus etiquetas de comercio electrónico mejorado, nunca debería ver el siguiente error en la consola (si tiene Depurador de Google Analytics activado, o si tiene Common Analytics ejecutándose en modo de depuración):
Recomiendo implementar esto customTask
junto con mi solución para enviar el longitud de carga útil como una dimensión personalizada. De esta manera, podrá detectar si se está acercando a la longitud máxima de la carga útil con sus impactos y luego podrá proceder a implementar este limitador de longitud de carga útil cuando sea necesario.
Para una solución alternativa, eche un vistazo a Este excelente articulo por el increíble Dan Wilkerson del igualmente increíble Generoso weblog.
incógnita
El boletín informativo de Simmer
Suscríbete a la Boletín informativo de Simmer ¡Para recibir las últimas noticias y contenidos de Simo Ahava en tu bandeja de entrada de correo electrónico!
El customTask
variable
Para construir el customTask
necesitas crear uno nuevo Variable de JavaScript personalizadaPonle un nombre como {{customTask – reducir la longitud de la carga útil}}.
¡Nota! Si ya tienes una
customTask
implementado en sus etiquetas de comercio electrónico mejorado, deberá combinar el código a continuación con el existentecustomTask
script que ya tienes. Para obtener consejos sobre cómo hacerlo, consulta Esta guía.
Agregue el siguiente código en el customTask
cuerpo variable:
operate() {
return operate(customModel) {
// Add every other default parameters you need to strip from the payload
// into this array so as of precedence.
// For extra particulars, go to: https://bit.ly/2MOhjBD
var defaultParams = ('&je', '&de', '&sd', '&vp', '&sr');
// Checklist the (common) Customized Dimensions you need to strip from the
// payload so as of precedence. Go away the array empty in the event you do not
// need to take away Customized Dimensions.
// For extra particulars, go to: https://bit.ly/2MM6O1O
var customDims = ('&cd198', '&cd199', '&cd200');
// Checklist the impression object parameters you need to strip from the
// payload so as of precedence. Solely record the sphere specifier, so
// as a substitute of '&il1pi2va', write 'va', and as a substitute of '&il1pi4cd3', write
// 'cd3'. For extra particulars, go to: https://bit.ly/2KehCHF
var impressions = ('va', 'br', 'ca', 'ps', 'nm');
// Do not contact the code beneath.
var maxLength = 8192,
globalSendTaskName = '_' + customModel.get('trackingId') + '_sendHitTask',
originalSendHitTask = window(globalSendTaskName) = window(globalSendTaskName) || customModel.get('sendHitTask');
customModel.set('sendHitTask', operate(sendModel) {
var ga = window(window('GoogleAnalyticsObject'));
// Solely log if in analytics debug mode.
var log = operate(msg) {
if ('dump' in ga) {
window.console.log.apply(window.console, (msg));
}
};
var hitPayload = sendModel.get('hitPayload');
var removeKeys = operate(hitPayload, keys) {
var key, regex;
whereas(hitPayload.size >= maxLength && keys.size) {
key = keys(0);
log('--> Eradicating ' + key);
regex = new RegExp(key + '=(^&)+', 'gi');
keys.shift();
hitPayload = hitPayload.change(regex, '');
log('--> New size: ' + hitPayload.size);
}
return hitPayload;
};
var removeImpressions = operate(hitPayload, keys) {
var key, regex, oldKey;
whereas(hitPayload.size >= maxLength && keys.size) {
if (key !== keys(0)) {
key = keys(0);
log('--> Eradicating &ilNpiN' + key + ' from impression objects');
}
regex = new RegExp('&ild+pid+' + key + '=(^&)+', 'i');
if (!regex.check(hitPayload)) {
keys.shift();
}
hitPayload = hitPayload.change(regex, '');
}
log('--> New size: ' + hitPayload.size);
return hitPayload;
};
// If over payload size, take away default parameters.
if (hitPayload.size >= maxLength) {
log('Payload too lengthy (' + hitPayload.size + '), eradicating default keys...');
hitPayload = removeKeys(hitPayload, defaultParams);
}
// If over payload size, take away customized dimensions.
if (hitPayload.size >= maxLength) {
log('Payload nonetheless too lengthy (' + hitPayload.size + '), eradicating Customized Dimensions...');
hitPayload = removeKeys(hitPayload, customDims);
}
// If over payload size, clear up impression objects.
if (hitPayload.size >= maxLength) {
log('Payload nonetheless too lengthy (' + hitPayload.size + '), cleansing up Impressions...');
hitPayload = removeImpressions(hitPayload, impressions);
}
// Ship the modified payload.
sendModel.set('hitPayload', hitPayload, true);
originalSendHitTask(sendModel);
});
};
}
Asegúrese de editar el defaultParams
, customDims
y impressions
matrices para incluir las claves que desea purgar de la dataLayer
Tenga en cuenta que deberá enumerar las claves utilizando sus Nombres de los parámetros del protocolo de medición En lugar de lo que sus análisis.js Los nombres de los campos son. Por lo tanto, en lugar de 'encoding'
Por ejemplo, necesitas usar '&de'
.
Las claves que he añadido a la defaultParams
La matriz es:
Llave | Nombre | Descripción |
---|---|---|
&je |
Java habilitado | Si el navegador tiene habilitado Java o no. |
&de |
Codificación de documentos | Cuál es la codificación de caracteres de la página precise (por ejemplo UTF-8 ). |
&sd |
Colores de pantalla | La profundidad del shade de la pantalla (por ejemplo 24-bits ). |
&vp |
Tamaño de la ventana gráfica | El área seen (en píxeles) del navegador o dispositivo. |
&sr |
Resolución de pantalla | La resolución de pantalla (en píxeles) del navegador o dispositivo. |
Naturalmente, es posible que desees conservar algunos de estos, por ejemplo: &vp
o &sr
Siéntete libre de editar el defaultParams
matriz como mejor le parezca.
Al agregar elementos a la impressions
matriz, la sintaxis es un poco más compleja. Deberías solo Agregue el especificador de parámetro actual, que es la clave que viene después &ilNpiN
. Entonces, si el nombre del parámetro para la variante de impresión del producto es &il2pi1va
simplemente escribirías 'va'
en la matriz. O bien, si desea purgar la dimensión personalizada con ámbito de producto del índice 3 de sus objetos de impresión, en lugar de escribir '&il1pi1cd3'
escribirías 'cd3
en la matriz.
Tenga en cuenta que para defaultParams
y customDims
Debes escribir el nombre completo del parámetro. con El líder &
.
Añade la variable a tu etiqueta
Esta variable debe agregarse a la etiqueta que envía la carga útil de comercio electrónico mejorado con objetos de impresión a Google Analytics. Para agregarla a la etiqueta, edite la Variable de configuración de Google Analytics en la etiqueta de impresión, o agregue el campo directamente a la etiqueta.
Navegar a Más configuraciones -> Campos a configurary agregue el siguiente campo:
Nombre del campo: Tarea personalizada
Valor: {{customTask – reducir la longitud de la carga útil}}
Así:
¡Y eso es todo por la configuración! Ahora, si su carga útil es mayor que 8192, el script primero eliminará los parámetros especificados en el defaultParams
matriz. Luego devorará las dimensiones en el customDims
matriz. Por último, si la carga útil AÚN es demasiado larga, procederá a limpiar sus objetos de impresiones eliminando los campos enumerados en impressions
uno por uno, impresión por impresión.
Cómo depurar
Si recorriste el código, como estoy seguro que lo hiciste, es posible que hayas notado cómo uso un método personalizado llamado log()
para enviar algunos datos de depuración a la consola. El problema es que no quiero contaminar la consola de JavaScript con mensajes de depuración cuando Google Analytics está no en modo de depuración, por lo que hago una verificación easy para ver si la versión de depuración de análisis.js está cargado:
if ('dump' in window('ga')) {}
Básicamente, si el mundo ga
El objeto tiene el método dump
Supongo que el usuario está usando la versión de depuración de análisis.js.
¡NOTA! Si alguien ha descubierto una forma más sólida de comprobar la versión de depuración de analytics.js, ¡háganmelo saber! Gracias.
Por lo tanto, si desea ver mensajes de depuración, puede configurar la biblioteca en modo de depuración navegando a Más configuraciones -> Configuración avanzada -> Usar versión de depuración en su etiqueta de Google Analytics o en la variable de configuración de Google Analytics y configurándola como true
. O bien, puede utilizar el Depurador de Google Analytics extensión del navegador.
Una vez que haya cargado la biblioteca de depuración, podrá ver mensajes de depuración como estos si La carga útil excede la longitud máxima de 8192:
En estos mensajes de depuración puedes ver cómo el script recorre tu carga útil, eliminando parámetros cuando es necesario.
Resumen
Deseo análisis.js Tenía una forma más elegante de manejar las cargas útiles que son demasiado grandes. Simplemente eliminarlas es un poco excesivo, en mi opinión. analytics.js podría, por ejemplo, compilar un hit personalizado para GA cuando se supera el tamaño máximo de la carga útil, y esto se convertiría en una advertencia o notificación en la interfaz de usuario de Google Analytics. De esta manera, al menos tendría una pista de que algo anda mal.
Así que el customTask
La solución presentada aquí es, como es típico en los scripts que escribo, una curita para algo que espero que la propia biblioteca pueda remediar de forma nativa en el futuro.
Naturalmente, la “mejor” forma de evitar cargas útiles demasiado grandes es enviar únicamente datos relevantes a Google Analytics. En el caso de las impresiones, por ejemplo, no tiene mucho sentido enviar Cada impresión en la página de una sola vez. En lugar de eso, lo que desea es enviar solo impresiones que el usuario realmente ha vistoAfortunadamente, es posible que esté preparando una guía que le mostrará cómo realizar un seguimiento únicamente de las impresiones vistas.
¡Déjame saber en los comentarios si encuentras esto útil o si tienes sugerencias para mejorar el método!