La capa de datos

La capa de datos es un objeto que utilizan Google Tag Manager y gtag.js para pasar información a las etiquetas. Los eventos o las variables se pueden pasar a través de la capa de datos, y los activadores se pueden configurar en función de los valores de las variables.

Por ejemplo, si activas una etiqueta de remarketing cuando el valor de purchase_total es superior a USD 100 o en función de los eventos específicos, p.ej., cuando se hace clic en un botón, tu capa de datos se puede configurar para que esos datos estén disponibles para tus etiquetas. El objeto de la capa de datos se estructura como JSON. Por ejemplo:

{
  event: "checkout_button",
  gtm: {
    uniqueEventId: 2,
    start: 1639524976560,
    scrollThreshold: 90,
    scrollUnits: "percent",
    scrollDirection: "vertical",
    triggers: "1_27"
  },
  value: "120"
}

Las etiquetas de Google están diseñadas para hacer referencia fácilmente a la información que se agrega a la capa de datos de una manera organizada y predecible, en lugar de analizar variables, información de transacciones, categorías de páginas y otros indicadores dispersos en toda la página. Una implementación de la capa de datos completada con variables y valores asociados ayudará a garantizar que los datos pertinentes estén disponibles cuando tus etiquetas los necesiten.

Instalación

Para las instalaciones de páginas web de Tag Manager, debes crear una capa de datos. El código destacado a continuación muestra dónde se establece la capa de datos, antes de que se cargue Tag Manager.

<script>
window.dataLayer = window.dataLayer || [];
</script>
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXX');</script>
<!-- End Google Tag Manager -->

En las implementaciones estándar de gtag.js en las que la etiqueta se copió desde el producto y se agregó a una página web, se proporciona el código para establecer la capa de datos. En las implementaciones personalizadas de la etiqueta de Google, agrega el código de la capa de datos al principio de tu secuencia de comandos, como se muestra en el siguiente ejemplo destacado:

<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=TAG_ID"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments)};
  gtag('js', new Date());

  gtag('config', 'TAG_ID');
</script>

Cómo se procesa la información de la capa de datos

Cuando se carga un contenedor, Tag Manager comenzará a procesar todos los mensajes push de la capa de datos en cola. Tag Manager procesa los mensajes según el orden de llegada: cada mensaje se procesa de a uno por vez, en el orden en que se recibió. Si el mensaje es un evento, se activarán todas las etiquetas con condiciones de activación que se hayan cumplido antes de que Tag Manager pase al siguiente mensaje.

Si el código de una página, una plantilla personalizada o una etiqueta HTML personalizada realiza una llamada a gtag() o dataLayer.push(), el mensaje asociado se pone en cola y se procesa después de que se evalúan todos los demás mensajes pendientes. Esto significa que no se garantiza que los valores actualizados de la capa de datos estén disponibles para el próximo evento. Para controlar estos casos, debes agregar un nombre de evento a un mensaje cuando se envíe a la capa de datos y, luego, escuchar ese nombre de evento con un activador de evento personalizado.

Usa una capa de datos con controladores de eventos

El objeto dataLayer usa un comando event para iniciar el envío de eventos.

La etiqueta de Google y Tag Manager utilizan una variable especial de la capa de datos llamada event que los detectores de eventos de JavaScript usan para activar etiquetas cuando un usuario interactúa con elementos del sitio web. Por ejemplo, es posible que desees activar una etiqueta de seguimiento de conversiones cuando un usuario haga clic en un botón de confirmación de compra. Se pueden llamar eventos cada vez que un usuario interactúa con elementos del sitio web, como vínculos, botones, desplazamientos, etcétera.

Esta funcionalidad se logra llamando a dataLayer.push() cuando ocurre un evento. La sintaxis para enviar un evento con dataLayer.push() es la siguiente:

dataLayer.push({'event': 'event_name'});

Aquí event_name es una cadena que describe el evento, como 'login', purchase o search.

Usa dataLayer.push() para enviar datos de eventos cuando se produzca una acción que desees medir. Por ejemplo, para enviar un evento cuando un usuario hace clic en un botón, modifica el controlador onclick del botón para llamar a dataLayer.push():

<button onclick="dataLayer.push({'event': 'login'});">Button 1</button>

Puedes enviar variables de la capa de datos a la capa de datos de forma dinámica para capturar información como los valores ingresados o seleccionados en un formulario, los metadatos asociados con un video que reproduce el visitante, el color de un producto (p.ej., un automóvil) personalizado por el visitante, las URLs de destino de los vínculos en los que se hizo clic, etcétera.

Al igual que con los eventos, esta funcionalidad se logra llamando a la API de push() para agregar o reemplazar variables de la capa de datos en la capa de datos. La sintaxis básica para establecer variables de la capa de datos dinámicas es la siguiente:

dataLayer.push({'variable_name': 'variable_value'});

Aquí, 'variable_name' es una cadena que indica el nombre de la variable de capa de datos que se establecerá, y 'variable_value' es una cadena que indica el valor de la variable de capa de datos que se establecerá o reemplazará.

Por ejemplo, para establecer una variable de capa de datos con una preferencia de color cuando un visitante interactúa con una herramienta de personalización de productos, puedes enviar la siguiente variable de capa de datos dinámica:

dataLayer.push({'color': 'red'});

Un solo envío, múltiples variables

Puedes enviar varias variables y eventos a la vez:

dataLayer.push({
  'color': 'red',
  'conversionValue': 50,
  'event': 'customize'
});

Cómo conservar las variables de la capa de datos

Para conservar las variables de la capa de datos entre las páginas web, llama a dataLayer.push() después de que se haya creado una instancia de la capa de datos en cada carga de página y envía las variables a la capa de datos. Si deseas que estas variables de la capa de datos estén disponibles para Tag Manager cuando se cargue el contenedor, agrega una llamada a dataLayer.push() sobre el código del contenedor de Tag Manager, como se muestra a continuación.

<script>
window.dataLayer = window.dataLayer || [];

dataLayer.push({
 'event': 'Pageview',
 'pagePath': 'https://www.googleanalytics.dev/pancakes',
 'pageTitle': 'Pancake Event Signup',
 'visitorType': 'customer'
});
</script>
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXX');</script>
<!-- End Google Tag Manager -->

Cada variable declarada dentro del objeto de la capa de datos persistirá solo mientras el visitante permanezca en la página actual. Las variables de capa de datos que son relevantes en todas las páginas (p.ej., visitorType) se deben declarar en la capa de datos de cada página de tu sitio web. Si bien no es necesario que coloques el mismo conjunto de variables en la capa de datos de cada página, debes usar una convención de nomenclatura coherente. En otras palabras, si configuras la categoría de la página en la página de registro con una variable llamada pageCategory, tus páginas de productos y de compras también deben usar la variable pageCategory.

Solución de problemas

A continuación, se incluyen algunas sugerencias para solucionar problemas relacionados con la capa de datos:

No reemplaces la variable window.dataLayer: Cuando usas la capa de datos directamente (p.ej., dataLayer = [{'item': 'value'}])), se reemplazarán los valores existentes en dataLayer. Las instalaciones de Tag Manager deben crear una instancia de la capa de datos lo más arriba posible en el código fuente, sobre el fragmento del contenedor, con window.dataLayer = window.dataLayer || [];. Después de declarar dataLayer, usa dataLayer.push({'item': 'value'}) para agregarle valores adicionales y, si esos valores deben estar disponibles para Tag Manager cuando se carga la página, esa llamada a dataLayer.push() también debe estar sobre el código del contenedor de Tag Manager.

El nombre del objeto dataLayer distingue mayúsculas de minúsculas: Si intentas enviar una variable o un evento sin las mayúsculas o minúsculas adecuadas, el envío no funcionará.

datalayer.push({'pageTitle': 'Home'});    // Bad (datalayer in lowercase)
dataLayer.push({'pageTitle': 'Home'});    // Good (dataLayer in camel case)

Se debe llamar a dataLayer.push con objetos JavaScript válidos. Todos los nombres de variables de la capa de datos deben estar entre comillas.

dataLayer.push({new-variable: 'value'});      // Bad - no quote marks
dataLayer.push({'new-variable': 'value'});    // Good - proper quote marks

Mantén los nombres de las variables coherentes en todas las páginas: Si usas nombres de variables diferentes para el mismo concepto en distintas páginas, tus etiquetas no podrán activarse de forma coherente en todas las ubicaciones deseadas.

Incorrecto:

// Homepage:
dataLayer.push({'visitorType': 'low-value'});

// Checkout Page:
dataLayer.push({'visitor_type': 'high-value'});

Bueno:

// Homepage:
dataLayer.push({'visitorType': 'low-value'});

// Checkout Page:
dataLayer.push({'visitorType': 'high-value'});

Cambia el nombre de la capa de datos

El nombre predeterminado del objeto de la capa de datos que inician la etiqueta de Google o Tag Manager es dataLayer. Si prefieres usar un nombre diferente para tu capa de datos, puedes hacerlo editando el valor del parámetro de la capa de datos en tu etiqueta de Google o en el fragmento del contenedor de Tag Manager con el nombre que elijas.

gtag.js

Agrega un parámetro de consulta llamado "l" a la URL para establecer el nuevo nombre de la capa de datos, p.ej., l=myNewName. Actualiza todas las instancias de dataLayer en el fragmento de la etiqueta de Google al nombre nuevo.

<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=TAG_ID&l=myNewName"></script>
<script>
  window.myNewName = window.myNewName || [];
  function gtag(){myNewName.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'TAG_ID');
</script>

Tag Manager

Reemplaza el valor del parámetro de la capa de datos (destacado a continuación) en el fragmento de tu contenedor por el nombre que elijas.

<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','myNewName','GTM-XXXXXX');</script>
<!-- End Google Tag Manager -->

Una vez que le cambies el nombre, todas las referencias a tu capa de datos (es decir, cuando declares la capa de datos sobre el fragmento o cuando envíes eventos o variables dinámicas de la capa de datos a la capa de datos con el comando .push()) se deben ajustar para reflejar el nombre personalizado de tu capa de datos:

<script>
  myNewName = window.dataLayer || [];
  myNewName.push({'variable_name': 'variable_value'});
</script>

Métodos personalizados de la capa de datos

Si envías una función a la capa de datos, se invocará con este parámetro establecido en un modelo de datos abstracto. Este modelo de datos abstracto puede obtener y establecer valores en un almacén de pares clave-valor, y también proporciona una forma de restablecer la capa de datos.

set

La función set en el modelo de datos abstracto te permite establecer valores para recuperar a través de get.

window.dataLayer.push(function() {
  this.set('time', new Date());
});

get

La función get en el modelo de datos abstracto te permite recuperar los valores que se establecieron.

window.dataLayer.push(function() {
  const existingTime = this.get('time');
  if (existingTime !== null) {
    // Change behavior based on whether or not this value exists...
  } else {
    // ...
  }
})

restablecer

La función reset en el modelo de datos abstracto te permite restablecer los datos en la capa de datos. Esto es más útil con una página que permanecerá abierta y el tamaño de la capa de datos seguirá creciendo con el tiempo. Para restablecer la capa de datos, usa el siguiente código:

window.dataLayer.push(function() {
  this.reset();
})