La couche de données

La couche de données est un objet utilisé par Google Tag Manager et gtag.js pour transmettre des informations aux balises. Les événements ou les variables peuvent être transmis à l'aide de la couche de données, et les déclencheurs peuvent être configurés en fonction des valeurs des variables.

Par exemple, si vous déclenchez une balise de remarketing lorsque la valeur de purchase_total est supérieure à 100 € ou en fonction d'événements spécifiques (par exemple, lorsqu'un utilisateur clique sur un bouton), vous pouvez configurer votre couche de données pour que ces données soient disponibles pour vos balises. L'objet de la couche de données est structuré au format JSON. Exemple :

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

Les balises Google sont conçues pour référencer les informations ajoutées à la couche de données de manière organisée et prévisible, plutôt qu'en analysant les variables, les informations sur les transactions, les catégories de pages et d'autres signaux dispersés sur votre page. Une implémentation de calque de données contenant des variables et des valeurs associées permet de s'assurer que les données pertinentes sont disponibles lorsque vos balises en ont besoin.

Installation

Pour les installations de Tag Manager sur des pages Web, vous devez créer une couche de données. L'exemple de code suivant montre où la couche de données est établie, avant le chargement de 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 -->

Dans les implémentations gtag.js standards où la balise a été copiée depuis le produit et ajoutée à une page Web, le code permettant d'établir la couche de données est fourni. Dans les implémentations personnalisées de la balise Google, ajoutez le code de la couche de données au début de votre script, comme illustré dans l'exemple de code suivant :

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

Traitement des informations de la couche de données

Lorsqu'un conteneur est chargé, Tag Manager commence à traiter tous les messages push de la couche de données en file d'attente. Tag Manager traite les messages selon le principe du premier entré, premier sorti : chaque message est traité un par un, dans l'ordre de réception. Si le message est un événement, toutes les balises dont les conditions de déclenchement ont été remplies se déclenchent avant que Tag Manager ne passe au message suivant.

Si un appel gtag() ou dataLayer.push() est effectué par du code sur une page, dans un modèle personnalisé ou dans une balise HTML personnalisée, le message associé est mis en file d'attente et traité une fois que tous les autres messages en attente ont été évalués. Cela signifie qu'il n'est pas garanti que les valeurs de la couche de données mises à jour soient disponibles pour l'événement suivant. Pour gérer ces cas, vous devez ajouter un nom d'événement à un message lorsqu'il est transmis à la couche de données, puis écouter ce nom d'événement avec un déclencheur d'événement personnalisé.

Utiliser une couche de données avec des gestionnaires d'événements

L'objet dataLayer utilise une commande event pour lancer l'envoi d'événements.

La balise Google et Tag Manager utilisent une variable de couche de données spéciale appelée event, qui est utilisée par les écouteurs d'événements JavaScript pour déclencher des balises lorsqu'un utilisateur interagit avec des éléments du site Web. Par exemple, vous pouvez déclencher une balise de suivi des conversions lorsqu'un utilisateur clique sur un bouton de confirmation d'achat. Les événements peuvent être appelés chaque fois qu'un utilisateur interagit avec des éléments du site Web, tels que des liens, des boutons, des défilements, etc.

Cette fonctionnalité est obtenue en appelant dataLayer.push() lorsqu'un événement se produit. La syntaxe pour envoyer un événement avec dataLayer.push() est la suivante :

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

Où event_name est une chaîne qui décrit l'événement, par exemple 'login', 'purchase' ou 'search'.

Utilisez dataLayer.push() pour envoyer des données d'événement lorsqu'une action que vous souhaitez mesurer se produit. Par exemple, pour envoyer un événement lorsqu'un utilisateur clique sur un bouton, modifiez le gestionnaire onclick du bouton pour appeler dataLayer.push() :

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

Vous pouvez transférer des variables de couche de données vers la couche de données de manière dynamique pour capturer des informations telles que les valeurs saisies ou sélectionnées dans un formulaire, les métadonnées associées à une vidéo lue par le visiteur, la couleur d'un produit (par exemple, une voiture) personnalisé par le visiteur, les URL de destination des liens cliqués, etc.

Comme pour les événements, cette fonctionnalité est obtenue en appelant l'API push() pour ajouter ou remplacer des variables de calque de données dans le calque de données. Voici la syntaxe de base pour définir des variables de calque de données dynamiques :

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

Où 'variable_name' est une chaîne indiquant le nom de la variable de couche de données à définir, et 'variable_value' est une chaîne indiquant la valeur de la variable de couche de données à définir ou à remplacer.

Par exemple, pour définir une variable de couche de données avec une préférence de couleur lorsqu'un visiteur interagit avec un outil de personnalisation de produit, vous pouvez transmettre la variable de couche de données dynamique suivante :

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

Un seul push, plusieurs variables

Vous pouvez transmettre plusieurs variables et événements à la fois :

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

Rendre les variables de couche de données persistantes

Pour faire persister les variables de la couche de données entre les pages Web, appelez dataLayer.push() après l'instanciation de la couche de données à chaque chargement de page, puis transmettez les variables à la couche de données. Si vous souhaitez que ces variables de couche de données soient disponibles pour Tag Manager lorsque le conteneur est chargé, ajoutez un appel dataLayer.push() au-dessus du code du conteneur Tag Manager, comme illustré dans l'exemple suivant :

<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 -->

Chaque variable déclarée dans l'objet de la couche de données ne persiste que tant que le visiteur reste sur la page actuelle. Les variables de la couche de données qui sont pertinentes sur plusieurs pages (par exemple, visitorType) doivent être déclarées dans la couche de données de chaque page de votre site Web. Bien que vous n'ayez pas besoin d'insérer le même ensemble de variables dans la couche de données de chaque page, vous devez utiliser une convention d'attribution de noms cohérente. En d'autres termes, si vous définissez la catégorie de page sur la page d'inscription à l'aide d'une variable appelée pageCategory, vos pages de produits et d'achat doivent également utiliser la variable pageCategory.

Dépannage

Voici quelques conseils pour résoudre les problèmes liés à la couche de données :

Ne remplacez pas la variable window.dataLayer : lorsque vous utilisez directement la couche de données (par exemple, dataLayer = [{'item': 'value'}]), toutes les valeurs existantes dans dataLayer sont remplacées. Les installations Tag Manager doivent instancier la couche de données le plus haut possible dans le code source, au-dessus de l'extrait conteneur, à l'aide de window.dataLayer = window.dataLayer || [];. Une fois que dataLayer a été déclaré, utilisez dataLayer.push({'item': 'value'}) pour lui ajouter des valeurs supplémentaires. Si ces valeurs doivent être disponibles pour Tag Manager lors du chargement de la page, l'appel dataLayer.push() doit également se trouver au-dessus du code du conteneur Tag Manager.

Le nom de l'objet dataLayer est sensible à la casse : si vous essayez de transmettre une variable ou un événement sans respecter la casse, la transmission ne fonctionnera pas.

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

dataLayer.push doit être appelé avec des objets JavaScript valides. Tous les noms de variables de la couche de données doivent être placés entre guillemets.

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

Utilisez des noms de variables cohérents sur toutes les pages : si vous utilisez des noms de variables différents pour le même concept sur différentes pages, vos balises ne pourront pas se déclencher de manière cohérente à tous les emplacements prévus.

Déconseillé :

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

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

Bonne :

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

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

Renommer le calque de données

Le nom par défaut de l'objet de couche de données initié par la balise Google ou Tag Manager est dataLayer. Si vous préférez utiliser un autre nom pour votre couche de données, vous pouvez modifier la valeur du paramètre de couche de données dans votre balise Google ou l'extrait de conteneur Tag Manager en indiquant le nom de votre choix.

Tag Manager

Remplacez la valeur du paramètre de la couche de données (mise en surbrillance ci-dessous) dans l'extrait de conteneur par le nom de votre choix.

<!-- 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 -->

gtag.js

Ajoutez un paramètre de requête nommé "l" à l'URL pour définir le nouveau nom de la couche de données, par exemple l=myNewName. Remplacez toutes les instances de dataLayer dans l'extrait de balise Google par le nouveau nom.

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

Une fois la couche de données renommée, toutes les références à celle-ci (par exemple, lorsque vous la déclarez au-dessus de l'extrait ou lorsque vous transmettez des événements ou des variables de couche de données dynamiques à la couche de données à l'aide de la commande .push()) doivent être ajustées pour refléter le nom de votre couche de données personnalisée :

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

Méthodes de calque de données personnalisées

Si vous transmettez une fonction à la couche de données, elle sera appelée avec this défini sur un modèle de données abstrait. Ce modèle de données abstrait peut obtenir et définir des valeurs dans un magasin de clés-valeurs, et permet également de réinitialiser la couche de données.

set

La fonction set du modèle de données abstrait vous permet de définir les valeurs à récupérer via get.

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

get

La fonction get du modèle de données abstrait vous permet de récupérer les valeurs qui ont été définies.

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

réinitialiser

La fonction reset du modèle de données abstrait vous permet de réinitialiser les données de la couche de données. Cette option est particulièrement utile pour une page qui reste ouverte et dont la taille de la couche de données continue d'augmenter au fil du temps. Pour réinitialiser la couche de données, utilisez le code suivant :

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