He aquí un consejo sobre cómo evitar un error horrible, horrible con Administrador de etiquetas de Google.
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.
Consejo 7: utilice siempre .push() con dataLayer
Cuando asigna un valor a una variable usando el signo igual (=), en realidad está reasignando la variable a un nuevo valor, y el sistema de recolección de basura del entorno de ejecución barre el valor anterior hasta el cielo.
Digámoslo simplemente: si redefines dataLayer
después del fragmento del contenedor de GTM, interrumpirá las funciones patentadas de GTM. No, no estoy tratando de ser dramático, es la verdad. Causas estragos porque GTM modifica el nativo push()
método que tienen todos los Arrays, añadiendo cosas de poca importancia como ¡Un oyente que activa etiquetas cuando se presiona una tecla de ‘evento’!.
Al redefinir dataLayer
tus etiquetas ya no se activarán. ¡Ups!
Pero bueno, estamos a menudo instruido utilizar la asignación de variables al crear dataLayer
antes el fragmento del contenedor. ¿Bien? Bueno, sí, eso es lo que se nos indica que hagamos, pero no es necesariamente la mejor práctica. Tener solo una declaración allí funciona de maravilla, pero ¿qué pasa con:
<script>
dataLayer = ({
'businessCriticalVar' : 'businessCriticalVal'
});
script>
... another code ...
<script>
dataLayer = ({
'anotherCriticalVar' : 'anotherCriticalVal'
});
script>
head>
<physique>
Bueno, quizás lo hayas adivinado. La segunda asignación sobrescribe la primera y dataLayer
solo tiene otraVarCrítica disponible para el beneficio de sus etiquetas.
Entonces, ¿cómo evitar esto?
Sencillo: utilizar solo push()
al interactuar con dataLayer
. De esa manera nunca sobrescribirás nada en la matriz, solo agregarás cosas nuevas al closing.
En las etiquetas GTM (HTML personalizado, por ejemplo), puedes seguir adelante y usar dataLayer.push()
ya que puedes estar 100% seguro de que dataLayer
es una matriz con un push()
función (el fragmento del contenedor se encarga de esto por usted). Pero cuando trabajas en la plantilla de página, donde no es necesariamente un hecho que dataLayer
se ha definido como una matriz, utilice siempre la siguiente sintaxis para protegerse contra problemas:
window.dataLayer = window.dataLayer || ();
window.dataLayer.push({
'someVar' : 'someVal'
});
La primera línea básicamente comprueba si una variable international llamada dataLayer
ya ha sido declarado. Si es así, se deja en paz y la ejecución continúa hasta el push()
bloquear. Si, sin embargo, dataLayer
NO se ha definido, la primera línea le asigna una nueva matriz vacía. Esto asegura que lo siguiente push()
siempre funcionará.
Así que aquí está el resumen:
-
Cuando trabaje en la plantilla de página, compruebe siempre si
dataLayer
se ha definido e inicialícelo como un nuevo Array si es necesario -
Siempre, SIEMPRE, usa
push()
al interactuar condataLayer
DESCARGO DE RESPONSABILIDAD: El window.dataLayer = window.dataLayer || ();
falla si dataLayer
SE HA definido pero no como una matriz. Probablemente esto sea bastante raro, pero debe saber qué variable se ha asignado a GTM mirando la fragmentos de contenedor parámetros de función de autoinvocación.