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. Vous pouvez transmettre des événements ou des variables via la couche de données, et configurer des déclencheurs 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 bouton est cliqué), votre couche de données peut être configurée pour mettre ces données à la disposition de vos balises. L'objet de 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 facilement les informations ajoutées à la couche de données de manière organisée et prévisible, plutôt que d'analyser 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 la couche de données renseignée avec des variables et des valeurs associées vous aidera à vous 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. Le code mis en surbrillance ci-dessous indique 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 mis en surbrillance ci-dessous:

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

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 dans l'ordre d'arrivée: chaque message est traité individuellement, dans l'ordre de sa réception. S'il s'agit d'un événement, toutes les balises dont les conditions de déclenchement sont remplies s'activent avant que Tag Manager ne passe au message suivant.

Si un appel gtag() ou dataLayer.push() est effectué par le code d'une page, d'un modèle personnalisé ou d'une balise HTML personnalisée, le message associé est mis en file d'attente et traité après l'évaluation de tous les autres messages en attente. Par conséquent, il n'est pas garanti que les valeurs mises à jour de la couche de données soient disponibles pour le prochain événement. Pour gérer ces cas de figure, 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 de 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 de site Web tels que des liens, des boutons, des défilements, etc.

Pour ce faire, appelez dataLayer.push() lorsqu'un événement se produit. La syntaxe permettant d'envoyer un événement avec dataLayer.push() est la suivante:

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

event_name est une chaîne décrivant 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 transmettre des variables de couche de données de manière dynamique à la couche de données 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 (une voiture, par exemple) personnalisée par le visiteur, les URL de destination des liens sur lesquels l'utilisateur a cliqué, 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. La syntaxe de base pour définir des variables de couche de données dynamiques est la suivante:

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

'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 push, plusieurs variables

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

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

Persister les variables de la couche de données

Pour conserver 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 lors du chargement du conteneur, ajoutez un appel dataLayer.push() au-dessus du code du conteneur Tag Manager, comme indiqué ci-dessous.

<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 pertinentes sur toutes les pages (par exemple, visitorType) doivent être déclarées dans la couche de données de chaque page de votre site Web. Vous n'avez pas besoin de placer le même ensemble de variables dans la couche de données de chaque page, mais 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:

N'écrasez pas la variable window.dataLayer:lorsque vous utilisez directement la couche de données (par exemple, dataLayer = [{'item': 'value'}]), il écrase toutes les valeurs existantes dans dataLayer). Les installations Tag Manager doivent instancier la couche de données aussi haut que possible dans le code source, au-dessus de l'extrait conteneur, à l'aide de window.dataLayer = window.dataLayer || [];. Une fois le dataLayer déclaré, utilisez dataLayer.push({'item': 'value'}) pour y ajouter des valeurs supplémentaires. Si ces valeurs doivent être disponibles pour Tag Manager lorsque la page se charge, cet 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 transférer une variable ou un événement sans la casse appropriée, le transfert 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

Maintenez la cohérence des noms de variables sur 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 dans tous les emplacements souhaités.

Mauvais :

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

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

Bon :

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

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

Renommer la couche de données

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

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 code de la balise Google par le nouveau nom.

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

Remplacez la valeur du paramètre de la couche de données (mise en surbrillance ci-dessous) dans votre 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 -->

Une fois renommées, toutes les références à votre couche de données (par exemple, lorsque vous déclarez la couche de données 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>
  myNewName = window.dataLayer || [];
  myNewName.push({'variable_name': 'variable_value'});
</script>

Méthodes de couche de données personnalisées

Si vous transférez une fonction vers la couche de données, elle sera appelée avec ce paramètre 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 des 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 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 dans la couche de données. Cette option est particulièrement utile pour une page qui restera ouverte et dont la taille de la couche de données continuera de croître au fil du temps. Pour réinitialiser la couche de données, utilisez le code suivant:

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