Google Tag Manager
Guide complet des conteneurs GTM Web (côté client) et serveur (côté serveur) : import des conteneurs préconfigurés, contrôle des valeurs, publication, architecture des balises, consentement, transport GA4, destinations CAPI et conversions améliorées.
Série Tracking · Infrastructure · environ 25 min de lecture.
Identifiants nécessaires pour ce guide :
| Identifiant | Variable GTM | Où le trouver |
|---|---|---|
| ID du conteneur GTM Web | tagmanager.google.com (p. ex. GTM-XXXXXXX) | |
| ID du conteneur GTM serveur | tagmanager.google.com (p. ex. GTM-XXXXXXX) | |
| URL du conteneur serveur | Const - Server - Container URL | Addingwell > Server > Custom Domain (p. ex. https://tags.domain.com) |
Les conteneurs à importer attendent ces valeurs : ID de mesure GA4, URL du conteneur serveur, CBID Cookiebot, ID du pixel Meta, Jeton d'accès Meta, ID de conv. Google Ads, Libellé de conv. Google Ads. Notez-les avant de commencer.
Rôle et objectif
GTM est la pièce centrale du tracking. Il reçoit les événements du DataLayer (injecté par Addingwell), gère le consentement (Cookiebot CMP), bloque les balises marketing tant que le visiteur n'a pas donné son accord et achemine les hits vers le conteneur serveur (sGTM) par un domaine personnalisé first-party.
Boutique Shopify
↓
Addingwell (DataLayer + pixel personnalisé + injection GTM)
↓
┌─────────────────────────────────────────────────┐
│ Conteneur GTM Web (côté client) │
│ Consentement, balises marketing, transport GA4 │
└─────────────────────────────────────────────────┘
↓ hits GA4 via server_container_url
┌─────────────────────────────────────────────────┐
│ Conteneur GTM serveur (côté serveur) │
│ GA4 Server, Meta CAPI, Google Ads EC, etc. │
└─────────────────────────────────────────────────┘
| Conteneur | Rôle | Hébergement |
|---|---|---|
| Web (côté client) | Consentement, pixels marketing, configuration et transport GA4, relais vers le sGTM | Navigateur (via Addingwell) |
| Serveur (côté serveur) | Destinations CAPI, conversions améliorées, tracking first-party | Domaine personnalisé (tags.ma-boutique.com) |
Les deux conteneurs sont livrés complets et préconfigurés : balises, déclencheurs, variables et modèles d'éditeurs, tout y est. Il reste à remplacer leurs valeurs d'exemple par vos identifiants : la liste est sous chaque lien de téléchargement.
Architecture Web + serveur
Organisation du conteneur Web
Conteneur GTM Web
├── Consent Initialization
│ └── Cookiebot CMP (Denied par défaut)
│
├── GA4 Config / Transport
│ └── balise GA4 → server_container_url → sGTM
│
├── Balises marketing (en attente du consentement)
│ ├── Meta Pixel (PageView, ViewContent, AddToCart, Purchase)
│ └── Google Ads Remarketing
│
├── Déclencheurs DataLayer
│ ├── page_view, view_item_list, view_item
│ ├── add_to_cart, remove_from_cart, view_cart
│ └── begin_checkout, purchase
│
└── Variables
├── Variables DataLayer (ecommerce.*)
├── Variables d'état du consentement
└── Constantes de vos identifiants
Organisation du conteneur serveur
Conteneur serveur sGTM
├── Client
│ └── GA4 Client (reçoit les hits du conteneur Web)
│
├── Balises
│ ├── GA4 Server Tag → Google Analytics
│ ├── Meta Conversions API Tag → Meta
│ └── Google Ads Server Conversions Tag → Google Ads
│
├── Déclencheurs
│ └── Fondés sur l'event_name GA4 (purchase, page_view, etc.)
│
└── Variables
├── Variables Event Data (transaction_id, value, etc.)
└── Variables User Data (e-mail, téléphone : hachés)
Flux complet Web → serveur
GTM Web → GA4 transport → server_container_url
↓
sGTM Server Container
↓
┌───────────────┼───────────────┐
↓ ↓ ↓
GA4 Server Meta CAPI Google Ads EC
↓ ↓ ↓
google-analytics graph.facebook googleads.g
Principes
- Chaque balise a son propre déclencheur DataLayer
- Les balises marketing dépendent du consentement
- GA4 sert de transport vers le sGTM, par le domaine personnalisé first-party
- Aucune balise ne part sans déclencheur explicite
- Le client et le serveur partagent le même event_id, ce qui permet la déduplication
Conteneur Web (côté client)
Conteneur GTM Web
Procédure d'import
Importer le conteneur Web
- Téléchargez le conteneur Web ci-dessous
- GTM Web → Administration → Importer un conteneur
- Espace de travail :
Default - Mode d'import :
Fusionner, en écrasant les balises, déclencheurs et variables en conflit
Télécharger le conteneur Web : gtm-workspace.json. Le fichier contient des valeurs d'exemple : remplacez chacune par votre identifiant avant l'import, ou juste après dans GTM.
| Valeur d'exemple | À remplacer par |
|---|---|
G-XXXXXXXXXX | ID de mesure GA4 |
https://tags.yourdomain.com | URL du conteneur serveur |
| YOUR_COOKIEBOT_CBID | CBID Cookiebot |
| YOUR_META_PIXEL_ID | ID du pixel Meta |
| YOUR_META_ACCESS_TOKEN | Jeton d'accès Meta |
| YOUR_GOOGLE_ADS_ID | ID de conversion Google Ads |
| YOUR_CONVERSION_LABEL | Libellé de conversion Google Ads |
GTM-XXXXXXXX | ID du conteneur GTM Web |
Contenu du conteneur
| Élément | Contenu |
|---|---|
| 17 balises | Cookiebot CMP, GA4 Config + Transport Addingwell, Conversion Linker, Google Ads Remarketing, etc. |
| 18 déclencheurs | Événements e-commerce (page_view, view_item, add_to_cart, begin_checkout, purchase) et mises à jour du consentement |
| 32 variables | Constantes de vos identifiants (ID GA4, URL du serveur, CBID), plus les variables DataLayer, Event Data et User Data |
| 3 modèles | Cookiebot CMP, Facebook Pixel, Event ID |
DataLayer et déclencheurs
C'est Addingwell qui alimente le DataLayer, pas le thème. Les événements arrivent d'eux-mêmes dans GTM.
| Événement DataLayer | Déclencheur GTM | Balises associées |
|---|---|---|
| page_view | CE - page_view | GA4, Meta PageView |
| view_item | CE - view_item | GA4, Meta ViewContent |
| add_to_cart | CE - add_to_cart | GA4, Meta AddToCart |
| begin_checkout | CE - begin_checkout | GA4, Meta InitiateCheckout |
| purchase | CE - purchase | GA4, Meta Purchase, Google Ads Conversion |
Consent Mode v2
1. Consent Initialization
└── Cookiebot → Denied par défaut
(ad_storage, analytics_storage, ad_user_data, ad_personalization)
2. Le visiteur accepte ou refuse
└── Cookiebot → consent_update
3. Balises conditionnées
└── Vérification intégrée du consentement avant chaque déclenchement
| Balise | Consentement requis |
|---|---|
| Cookiebot CMP | Aucun (Consent Initialization) |
| GA4 Config | analytics_storage (Advanced Consent Mode) |
| Meta Pixel | ad_storage + ad_user_data |
| Google Ads Remarketing | ad_storage + ad_personalization |
Advanced Consent Mode
GA4 fonctionne en Advanced Consent Mode (mode Consentement avancé) : même sans consentement, il envoie des pings anonymisés, sans cookies. Les balises marketing, elles, restent strictement bloquées tant que le consentement manque.
GA4 Config / Transport
La balise GA4 Config initialise GA4 et règle l'envoi des hits vers le conteneur serveur (sGTM) par le domaine personnalisé.
| Paramètre | Valeur | Rôle |
|---|---|---|
| ID de mesure | G-XXXXXXXXXX | Identifiant GA4 |
| server_container_url | https://tags.ma-boutique.com | Domaine personnalisé du sGTM (first-party) |
| send_page_view | false | Désactivé : c'est le déclencheur page_view qui s'en charge |
Événement DataLayer (p. ex. purchase)
↓
GA4 Event Tag (purchase)
↓
GA4 Config (server_container_url)
↓
https://tags.ma-boutique.com (sGTM)
↓
Destinations côté serveur
server_container_url
Le paramètre server_container_url envoie les hits GA4 vers le sGTM au lieu de google-analytics.com. C'est lui qui permet de passer outre les bloqueurs de publicité et de faire du tracking first-party.
Balises marketing côté client
| Plateforme | Balise | Événements |
|---|---|---|
| Meta | Meta Pixel | PageView, ViewContent, AddToCart, InitiateCheckout, Purchase |
| Google Ads | Remarketing | Pages vues + audiences |
- Côté client : enrichit les signaux first-party (cookies _fbp, _fbc, ttclid, etc.)
- Côté serveur (sGTM) : envoie les conversions par API (plus robuste, avec déduplication)
- La déduplication par event_id / transaction_id évite les doublons
- Les deux canaux se complètent pour maximiser le signal
Rappel : Consent Mode
Le Consent Mode v2 (toutes les valeurs par défaut à Denied) est piloté par la balise Cookiebot CMP dans GTM. C'est elle qui charge la bannière, pose les valeurs par défaut, transmet les mises à jour du consentement et active les déclencheurs conditionnels.
Conteneur serveur (côté serveur)
Conteneur GTM serveur
Procédure d'import
Importer le conteneur serveur
- Téléchargez le conteneur serveur ci-dessous
- GTM serveur (via Addingwell) → Administration → Importer un conteneur
- Espace de travail :
Default - Mode d'import :
Fusionner, en écrasant les balises, déclencheurs et variables en conflit
Télécharger le conteneur serveur : sgtm-workspace.json. Le fichier contient des valeurs d'exemple : remplacez chacune par votre identifiant avant l'import, ou juste après dans GTM.
| Valeur d'exemple | À remplacer par |
|---|---|
G-XXXXXXXXXX | ID de mesure GA4 |
https://tags.yourdomain.com | URL du conteneur serveur |
| YOUR_META_PIXEL_ID | ID du pixel Meta |
| YOUR_META_ACCESS_TOKEN | Jeton d'accès Meta |
| YOUR_GOOGLE_ADS_ID | ID de conversion Google Ads |
| YOUR_CONVERSION_LABEL | Libellé de conversion Google Ads |
GTM-YYYYYYYY | ID du conteneur GTM serveur |
Contenu du conteneur
| Élément | Contenu |
|---|---|
| 15 balises | GA4 Server, Meta CAPI (Full server-only), Google Ads EC (10 conversions), Addingwell Monitoring |
| 12 déclencheurs | Événements du client GA4 (page_view, purchase, add_to_cart, view_item, begin_checkout, etc.) |
| 8 variables | Event Data (items, value, currency, event_id, fbc, gclid) et la constante Conversion ID |
| 4 modèles | Meta CAPI by Addingwell, Addingwell Monitoring, URL Builder, Facebook CAPI |
Routage dans le sGTM
GA4 Client (reçoit les requêtes du transport Addingwell)
├── GA4 Server → transfert vers GA4
├── META - CAPI → API Conversions (Full server-only)
│ └── cookies 1P fbp/fbc, event_id, user_data
├── GADS - Conv (x10) → conversions améliorées
│ └── purchase, add_to_cart, begin_checkout, view_item, etc.
├── Addingwell Monitoring → logs et analyses
└── Enrichissement automatique :
• user data via la GA4 Event Settings Variable
• event_id pour la déduplication Meta
• signaux Consent Mode v2
Domaine personnalisé first-party
- Les hits partent vers tags.ma-boutique.com au lieu de google-analytics.com
- Les bloqueurs de publicité laissent passer les requêtes first-party
- Les cookies sont first-party : l'ITP n'y touche pas
- Une meilleure attribution et des cookies qui durent plus longtemps
DNS
tags.ma-boutique.com → CNAME → hébergement du sGTM
GTM Web
GA4 Config → server_container_url = https://tags.ma-boutique.com
Résultat
Tous les hits GA4 passent par le domaine personnalisé
HTTPS obligatoire
Le domaine personnalisé doit être servi en HTTPS. Le fournisseur du sGTM (Addingwell, Stape, etc.) gère le certificat SSL automatiquement.
Destinations côté serveur
| Destination | Balise sGTM | API | Événements |
|---|---|---|---|
| Meta | Meta Conversions API | graph.facebook.com | PageView, ViewContent, AddToCart, Purchase |
| Google Ads | Google Ads Conversions | googleads.googleapis.com | purchase (action de conversion) |
Déduplication
| Plateforme | Clé de déduplication |
|---|---|
| Meta | event_id (identique côté client et côté serveur) |
| Google Ads | transaction_id / order_id |
Modèles Addingwell
Les modèles Addingwell (Meta CAPI, Google Ads Conversions) enrichissent automatiquement les événements avec les user_data, les cookies et les paramètres d'URL. Aucune variable à configurer à la main.
Conteneur clé en main : les connecteurs côté serveur, le routage first-party et les identifiants des destinations (ID de pixel, jetons d'accès) sont des constantes du conteneur, à renseigner avec vos valeurs. Meta tourne en Full CAPI, sans pixel dans le navigateur.
Configuration et publication
Vérifier les valeurs
Chaque valeur d'exemple des conteneurs importés doit maintenant porter votre identifiant. Ouvrez chaque variable ou balise dans GTM et vérifiez que la valeur est la bonne.
GTM Web : 3 constantes
| Élément | Champ | Format attendu |
|---|---|---|
| ID de mesure GA4 | ID de mesure | G-XXXXXXX |
| URL du conteneur serveur | URL du conteneur | https://tags.ma-boutique.com |
| CBID Cookiebot | CBID | xxxxxxxx-xxxx-... |
GTM serveur : identifiants des destinations
| Élément | Champ | Format attendu |
|---|---|---|
| Meta CAPI | ID du pixel | 123456789 |
| Meta CAPI | Jeton d'accès | EAAG... |
| Google Ads | ID de conversion | AW-XXXXXXXXX |
| Google Ads | Libellé de conv. | AbCdEf... |
Procédure :
GTM → Variables (conteneur Web) ou Balises (conteneur serveur) → ouvrez l'élément → vérifiez que la valeur est la vôtre, et non la valeur d'exemple.
Les variables DataLayer (DLV - ecommerce - *) se remplissent d'elles-mêmes grâce à Addingwell.
Désactiver les destinations inutilisées
Si une destination ne vous sert pas, mettez ses balises en pause : ne les supprimez pas.
| Destination absente | Balise Web à suspendre | Balise serveur à suspendre |
|---|---|---|
| Pas de Meta Ads | META - Pixel - All Events | META - CAPI - All Events |
| Pas de Google Ads | GADS - Remarketing - All Pages | GADS - Conv - purchase |
Procédure :
GTM → Balises → ouvrez la balise → menu ... → « Pause » (suspendre) → enregistrez.
Publier les conteneurs
Une fois les valeurs vérifiées et les destinations inutiles mises en pause :
Avant de publier
Ne publiez pas si une valeur vous semble fausse, ou si des valeurs d'exemple (placeholders) apparaissent encore dans les variables ou les balises. Remplacez-les d'abord par vos identifiants.
Référence et vérification
Référence des balises
Conversions améliorées (Enhanced Conversions)
Les conversions améliorées envoient aux plateformes des données hachées (SHA-256), ce qui améliore la correspondance avec les utilisateurs.
| Donnée | Source | Hachage |
|---|---|---|
| DataLayer (purchase) | SHA-256 automatique | |
| Téléphone | DataLayer (purchase) | SHA-256 automatique |
| Prénom | DataLayer (purchase) | SHA-256 automatique |
| Nom | DataLayer (purchase) | SHA-256 automatique |
| Adresse | DataLayer (purchase) | SHA-256 automatique |
Tunnel de paiement Shopify (purchase)
↓
DataLayer (user_data en clair)
↓
GTM Web → transport GA4 → sGTM
↓
Les modèles sGTM hachent automatiquement
↓
Les plateformes reçoivent les données hachées
Consentement obligatoire
Les données utilisateur ne partent jamais sans consentement marketing. Le Consent Mode v2 bloque leur transmission si ad_user_data = Denied.
Variables DataLayer (conteneur Web)
| Variable | Chemin DataLayer | Utilisation |
|---|---|---|
| DLV - ecommerce.currency | ecommerce.currency | Devise (EUR, USD, etc.) |
| DLV - ecommerce.value | ecommerce.value | Montant de la transaction |
| DLV - ecommerce.transaction_id | ecommerce.transaction_id | ID unique de la commande |
| DLV - ecommerce.items | ecommerce.items | Produits (tableau) |
Identifiants nécessaires (conteneur serveur)
| Destination | Identifiants |
|---|---|
| Meta CAPI | ID du pixel + jeton d'accès |
| Google Ads | ID de conversion + libellé de conversion |
| GA4 | ID de mesure (repris du conteneur Web) |
Convention de nommage
Les variables DataLayer portent le préfixe DLV -. Les constantes de configuration sont nommées d'après leur rôle. Les déclencheurs portent le préfixe CE - (Custom Event, soit événement personnalisé).
Vérification
Mode Aperçu de GTM (conteneur Web)
- Ouvrez GTM → Prévisualiser (bouton en haut à droite)
- Saisissez l'URL de la boutique Shopify
- Naviguez sur la boutique dans l'onglet d'aperçu
- Regardez dans le panneau de débogage quelles balises se déclenchent
| Contrôle | Résultat attendu |
|---|---|
| Consent Initialization | Cookiebot CMP se déclenche en premier |
| Avant consentement | Seules les balises Cookiebot et GA4 Config se déclenchent |
| Après consentement marketing | Meta et Google Ads se déclenchent |
| Événement purchase | Toutes les variables ecommerce du dataLayer sont remplies |
| server_container_url | Les hits GA4 partent vers le domaine personnalisé |
Mode Aperçu de GTM (conteneur serveur)
- Ouvrez GTM serveur → mode Aperçu
- Naviguez sur la boutique et déclenchez quelques événements
- Vérifiez que le client GA4 reçoit les hits
- Vérifiez que chaque balise serveur se déclenche correctement
Vérifier les destinations
| Destination | Outil de vérification |
|---|---|
| Meta CAPI | Gestionnaire d'événements Meta → Tester les événements |
| Google Ads | Google Ads → Conversions → Diagnostics |
| GA4 | DebugView de GA4 (temps réel) |
Proxy CDN et mode Aperçu
Quand le proxy CDN d'Addingwell est actif, le mode Aperçu peut ne pas fonctionner sur le domaine personnalisé. Testez en désactivant le proxy le temps du test, ou passez par l'URL GTM directe.
Phase 2 : socle GTM et consentement
Socle GTM et consentement
- Conteneur GTM Web chargé par Addingwell (et non par un snippet direct)
- Balise Cookiebot CMP active dans GTM, avec Denied par défaut
- Cookiebot CMP se déclenche sur Consent Initialization (avant les autres balises)
- Option « Tout refuser » présente dans la bannière
- Passerelle Cookiebot → Shopify Privacy API installée (cookie-consent_boostecom.liquid)
- Pixel personnalisé DataLayer Monitor actif dans Événements clients (?awdebug=1 pour déboguer)
- Régions Shopify : bannière native désactivée, bannière personnalisée pour les régions EEE et Royaume-Uni
Test avant consentement (navigation privée)
- Ouvrez le site en navigation privée
- Cliquez sur « Tout refuser » dans la bannière Cookiebot
- Aperçu GTM : vérifiez que seules les balises nécessaires (Necessary) se déclenchent
- Onglet Réseau : aucune requête vers GA4, Meta ou Google Ads
Test après consentement
- Ouvrez le site en navigation privée
- Cliquez sur « Tout accepter » dans la bannière
- Aperçu GTM : les balises analytics et marketing doivent se déclencher
- DebugView de GA4 : les événements apparaissent en temps réel
Dépannage
Checklist complète
GTM : import, configuration et publication
- Conteneur GTM Web importé
- Conteneur GTM serveur importé
- Constantes vérifiées (ID GA4, URL du serveur, CBID)
- Identifiants côté serveur vérifiés (Meta CAPI, Google Ads)
- Destinations inutilisées mises en pause
- Conteneur GTM Web publié
- Conteneur GTM serveur publié
- Mode Aperçu GTM Web : les balises se déclenchent correctement
- Mode Aperçu GTM serveur : destinations OK