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 dataLayer
Puede 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:
-
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
. -
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?