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.
À renseigner dans les guides correspondants (section Connecteurs en haut de chaque guide).
1Rô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. Vos identifiants y sont injectés depuis le bloc Connecteurs au moment du téléchargement.
2Architecture 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 └── Variables du bloc Connecteurs
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.gPrincipes
- 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
3Conteneur GTM Web
Procédure d'import
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
Contenu du conteneur
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é serveurserver_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.
4Conteneur GTM serveur
Procédure d'import
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
Contenu du conteneur
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 préremplis depuis le bloc Connecteurs. Meta tourne en Full CAPI, sans pixel dans le navigateur.
5Vérifier les valeurs
Toutes les valeurs sont déjà renseignées dans les conteneurs importés. Ouvrez chaque variable ou balise dans GTM et vérifiez que la valeur est la bonne.
G-XXXXXXXhttps://tags.ma-boutique.comxxxxxxxx-xxxx-...123456789EAAG...AW-XXXXXXXXXAbCdEf...Procédure :
GTM → Variables (conteneur Web) ou Balises (conteneur serveur) → ouvrez l'élément → vérifiez la valeur reprise du bloc Connecteurs.
Les variables DataLayer (DLV - ecommerce - *) se remplissent d'elles-mêmes grâce à Addingwell.
6Désactiver les destinations inutilisées
Si une destination ne vous sert pas, mettez ses balises en pause : ne les supprimez pas.
META - Pixel - All EventsMETA - CAPI - All EventsGADS - Remarketing - All PagesGADS - Conv - purchaseProcédure :
GTM → Balises → ouvrez la balise → menu ... → « Pause » (suspendre) → enregistrez.
7Publier 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. Corrigez-les d'abord dans le bloc Connecteurs.
8Ré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éesConsentement 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é).
9Vérification
Mode Aperçu de GTM (conteneur Web)
- 1Ouvrez GTM → Prévisualiser (bouton en haut à droite)
- 2Saisissez l'URL de la boutique Shopify
- 3Naviguez sur la boutique dans l'onglet d'aperçu
- 4Regardez 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 sont remplies |
| server_container_url | Les hits GA4 partent vers le domaine personnalisé |
Mode Aperçu de GTM (conteneur serveur)
- 1Ouvrez GTM serveur → mode Aperçu
- 2Naviguez sur la boutique et déclenchez quelques événements
- 3Vérifiez que le client GA4 reçoit les hits
- 4Vé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
10Dépannage
Vérifier :
- 1GTM injecté par Addingwell (aucun snippet manuel en conflit)
- 2ID de conteneur correct
- 3Événements DataLayer présents (console → dataLayer)
- 4Déclencheurs bien associés aux événements
Vérifier :
- Balise Cookiebot sur Consent Initialization (et non sur All Pages)
- Consentement intégré configuré sur chaque balise marketing
- Aucune balise réglée sur « No additional consent required » (aucun consentement supplémentaire requis)
Vérifier :
- 1server_container_url correct dans GTM Web (balise GA4 Config)
- 2Domaine personnalisé opérationnel (curl https://tags.ma-boutique.com/healthz)
- 3Conteneur serveur publié
- 4Client GA4 configuré dans le sGTM
Vérifier :
- Jeton d'accès valide et non expiré
- ID du pixel correct
- Permissions du jeton (ads_management, ads_read)
- Format des événements (event_name, user_data)
Vérifier :
- event_id identique côté client et côté serveur
- Pas de balise purchase en double dans GTM Web
- Aucune conversion importée à la main en parallèle
- Déduplication activée côté plateforme
Vérifier :
- user_data présent dans le DataLayer (e-mail, téléphone)
- Données non vides au moment du purchase
- Hachage automatique actif dans les modèles
- Consentement ad_user_data = Granted
Checklist complète
Vérifiez la couche que vous venez d'installer
Scannez la boutique : 41 contrôles lisent ce qu'elle envoie maintenant à GA4, Meta et Google Ads.