Sun. Sep 8th, 2024

Reducir automáticamente la longitud de la carga útil de Google Analytics


Aquí estamos, reunidos con customTaskEsta 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 customTasknecesitas 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 existente customTask 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, customDimsy impressions matrices para incluir las claves que desea purgar de la dataLayerTenga 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 &srSié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 &il2pi1vasimplemente 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 dumpSupongo 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!

Related Post

Leave a Reply

Your email address will not be published. Required fields are marked *