Fri. Sep 20th, 2024

#GTMTips: Busque un par clave-valor en dataLayer


Una de las dificultades de trabajar con Administrador de etiquetas de Google y el dataLayer estructura es que GTM no conserva historia de los artículos recogidos en su modelo de datos. O, al menos, no lo conserva de una manera que nos permita acceder a él.

Este suele ser un problema muy específico, pero surge de vez en cuando. Por ejemplo, supongamos que desea consultar si un occasion con algún valor específico ya ha sido introducido dataLayer. Bueno, esto es imposible, ya que cualquier occasion que utilices para activar esta comprobación sobrescribirá la anterior occasion valor en el modelo de datos (ya que cualquier clave dada solo puede tener un valor a la vez).

En otras palabras, necesitamos un mecanismo que nos permita consultar más temprano Valores de claves específicas que (posiblemente) se han sobrescrito desde entonces. Para ello, necesitaremos un poco de magia de variables de JavaScript personalizadas.


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!

Consejo 91: Búsqueda de pares clave-valor

Primero, crea la variable de JavaScript personalizada. Este es el código que deberás agregar:

perform() {
  // Modify the searchObject beneath.
  //
  // Add every key-value pair you need to search for instantly into the searchObject object. Use
  // strings for keys. 
  //
  // The variable will search for any key-value pair you specify, and return true if any one in every of them
  // is discovered. Should you use dot notation, the variable will attempt to discover a key with this title first,
  // after which it is going to parse the nested construction searching for a match.
  var searchObject = {
    'person.consentGiven': 'false'
  };
  
  // Change this in case you have renamed the dataLayer array.
  var dataLayerName = 'dataLayer';
  
  // Do not edit something beneath this line.
  var getValueForObjectString = perform(obj, key) {
    return key.cut up(".").scale back(perform(o, x)  o === null) ? o : o(x);
    , obj);
  };
  
  return window(dataLayerName).filter(perform(obj) {
    var discovered = false;
    var prop;
    
    for (prop in searchObject) {
      if (obj(prop) == searchObject(prop) || getValueForObjectString(obj, prop) == searchObject(prop)) {
        discovered = true;
      }
    }
    return discovered;
  }).size > 0;
}

Aquí tendrás que modificar el searchObject agregando pares clave-valor que desea buscar en el dataLayer formación.

Por ejemplo, si quisiera saber si el occasion La clave ha tenido el valor askForConsent En algún momento, el objeto se vería así:

var searchObject = {
  'occasion': 'askForConsent'
};

Si quisieras comprobar si eso occasion Si el valor se envió anteriormente O si el usuario ya dio su consentimiento, puede hacer esto:

var searchObject = {
  'occasion': 'askForConsent',
  'person.consentGiven': true
};

Tenga en cuenta que si utiliza la notación de puntos en el nombre de la clave, la variable primero comprobar si existe una clave con exactamente ese nombre (person.consentGiven), después de lo cual comprobará si existe una estructura anidada como esa ({person: {consentGiven: true}}) se encuentra.

A continuación, tendrás que modificar el dataLayerName valor variable en caso de haber cambiado el nombre de la dataLayer matriz a algo distinto del valor predeterminado.

Y ya está todo listo. La variable retornará true en caso de que alguno de los pares clave-valor que especifique en el searchObject se encuentra en el dataLayer formación.

Advertencias

Hay dos Advertencias importantes con esta solución.

1. dataLayer no es confiable

Nada impide que el código del sitio elimine elementos del dataLayer. De hecho, si el tamaño de su matriz supera los 300 miembrosGoogle Tag Supervisor comenzará a eliminar elementos automáticamente desde el principio.

De manera related, si estás ejecutando una aplicación de una sola página, es posible que la matriz se borre entre cada transición de página.

En otras palabras, no hay garantía de que esta variable encuentre algo simplemente porque dataLayer La matriz no es inmutable ni se supone que lo sea.

2. El tiempo importa

Otra cosa importante a tener en cuenta es que la dataLayer La matriz está marcada cuando se ejecuta la variableEsto podría generar algunos resultados inesperados, especialmente si estás comparando la variable con lo que muestra el modo Vista previa.

Cuando una etiqueta se activa con un disparador, el modo Vista previa mostrará el estado de las variables de Google Tag Supervisor en el momento en que se introdujo el evento desencadenante dataLayerPuede transcurrir un tiempo appreciable antes de que la etiqueta y sus variables asociadas se ejecuten realmente.

Por lo tanto, el estado de la página net a la que la variable intenta acceder puede ser diferente del estado de la página net cuando se activó la etiqueta. Esto es principalmente un problema si intenta consolidar lo que intenta buscar con searchObject y a qué intenta acceder con las variables de la capa de datos.

Por ejemplo, si el objeto con person.consentGiven se envía muy poco tiempo después del evento que activó la etiqueta (y la variable de búsqueda), la etiqueta no podrá acceder a esto con una variable de capa de datos, pero sí con la variable de JavaScript personalizada. searchObject Encontrará la pareja en el dataLayer formación.

Esto es algo a lo que hay que prestar atención, especialmente si te preguntas por qué la variable afirma que se encuentra algo en dataLayer pero la etiqueta aún no puede acceder a ese valor specific.

Resumen

¿Tienes alguna concept de dónde podría ser útil esta variable? Me he encontrado principalmente con dos casos de uso:

  1. En una aplicación de una sola página, bloquear el disparador Todas las páginas para que no lively una Vista de página si ya hay un evento de “vista de página digital” en dataLayer.

  2. Comprobación de transiciones de estado, como por ejemplo si un usuario solía estar desconectado, pero ahora está conectado (en comparación con estar conectado todo el tiempo).

¿Qué otra cosa?

Related Post

Leave a Reply

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