Google Tag Manager
Guide complet : Web Container (client-side) et Server Container (server-side). Import des containers pre-configures, verification des valeurs, publication, architecture tags, consent, GA4 transport, destinations CAPI, Enhanced Conversions.
Remplir dans les guides correspondants (section Connectors en haut de chaque guide).
1Role / Objectif
GTM est le hub central du tracking. Il recoit les events du DataLayer (injecte par Addingwell), gere le consent (Cookiebot CMP), conditionne les tags marketing, et route les hits vers le server container (sGTM) via un custom domain first-party.
Shopify Store
↓
Addingwell (DataLayer + Custom Pixel + GTM injection)
↓
┌─────────────────────────────────────────────────┐
│ GTM Web Container (client-side) │
│ Consent, tags marketing, GA4 transport │
└─────────────────────────────────────────────────┘
↓ GA4 hits via server_container_url
┌─────────────────────────────────────────────────┐
│ GTM Server Container (server-side) │
│ GA4 Server, Meta CAPI, Google Ads EC, etc. │
└─────────────────────────────────────────────────┘| Container | Role | Heberge sur |
|---|---|---|
| Web (client-side) | Consent, pixels marketing, GA4 config/transport, forwarding sGTM | Navigateur (via Addingwell) |
| Server (server-side) | Destinations CAPI, Enhanced Conversions, first-party tracking | Custom domain (tags.monstore.com) |
Les deux containers sont pre-configures et livres complets. Tous les tags, triggers, variables et templates vendor sont inclus. Les credentials sont interpolees depuis le Connectors au telechargement.
2Architecture Web + Server
Organisation du Web Container
GTM Web Container
├── Consent Initialization
│ └── Cookiebot CMP (defaults Denied)
│
├── GA4 Config / Transport
│ └── GA4 tag → server_container_url → sGTM
│
├── Marketing Tags (attendent consent)
│ ├── Meta Pixel (PageView, ViewContent, AddToCart, Purchase)
│ └── Google Ads Remarketing
│
├── DataLayer Triggers
│ ├── page_view, view_item_list, view_item
│ ├── add_to_cart, remove_from_cart, view_cart
│ └── begin_checkout, purchase
│
└── Variables
├── DataLayer Variables (ecommerce.*)
├── Consent State Variables
└── Connectors VariablesOrganisation du Server Container
sGTM Server Container
├── Client
│ └── GA4 Client (recoit les hits du Web Container)
│
├── Tags
│ ├── GA4 Server Tag → Google Analytics
│ ├── Meta Conversions API Tag → Meta
│ └── Google Ads Server Conversions Tag → Google Ads
│
├── Triggers
│ └── Bases sur event_name GA4 (purchase, page_view, etc.)
│
└── Variables
├── Event Data Variables (transaction_id, value, etc.)
└── User Data Variables (email, phone — hashees)Flux complet Web → Server
GTM Web → GA4 transport → server_container_url
↓
sGTM Server Container
↓
┌───────────────┼───────────────┐
↓ ↓ ↓
GA4 Server Meta CAPI Google Ads EC
↓ ↓ ↓
google-analytics graph.facebook googleads.gPrincipes
- Chaque tag a un trigger DataLayer specifique
- Les tags marketing sont conditionnes au consent
- GA4 sert de transport vers le sGTM via le custom domain first-party
- Aucun tag ne fire sans trigger explicite
- Client-side et server-side utilisent le meme event_id pour la deduplication
3GTM Web Container
Procedure d'import
DefaultMerge → Overwrite conflicting tags, triggers, and variablesContenu du container
DataLayer & Triggers
Le DataLayer est alimente par Addingwell (pas par le theme). Les events arrivent automatiquement dans GTM.
| Event DataLayer | Trigger GTM | Tags associes |
|---|---|---|
| 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 → defaults Denied
(ad_storage, analytics_storage, ad_user_data, ad_personalization)
2. Utilisateur accepte/refuse
└── Cookiebot → consent_update
3. Tags conditionnes
└── Built-in Consent checks avant chaque tag fire| Tag | Consent 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 utilise le Advanced Consent Mode : meme sans consent, il envoie des pings anonymises (sans cookies). Les tags marketing sont strictement bloques sans consent.
GA4 Config / Transport
Le tag GA4 Config initialise GA4 et configure le transport des hits vers le server container (sGTM) via le custom domain.
| Parametre | Valeur | Role |
|---|---|---|
| Measurement ID | G-XXXXXXXXXX | Identifiant GA4 |
| server_container_url | https://tags.monstore.com | Custom domain sGTM (first-party) |
| send_page_view | false | Desactive — gere par trigger page_view |
DataLayer event (ex: purchase)
↓
GA4 Event Tag (purchase)
↓
GA4 Config (server_container_url)
↓
https://tags.monstore.com (sGTM)
↓
Destinations server-sideserver_container_url
Le server_container_url route les hits GA4 vers le sGTM au lieu de google-analytics.com. C'est ce qui permet le bypass adblockers et le first-party tracking.
Tags Marketing Client-Side
| Plateforme | Tag | Events |
|---|---|---|
| Meta | Meta Pixel | PageView, ViewContent, AddToCart, InitiateCheckout, Purchase |
| Google Ads | Remarketing | Page view + audiences |
- Client-side : enrichit les signaux first-party (cookies _fbp, _fbc, ttclid, etc.)
- Server-side (sGTM) : envoie les conversions via API (resilient, deduplication)
- La deduplication event_id / transaction_id evite les doubles
- Les deux canaux se completent pour maximiser le signal
Rappel — Consent Mode
Le Consent Mode v2 (tous les defaults a Denied) est gere par le tag Cookiebot CMP dans GTM. Ce tag charge la banniere, definit les defaults, envoie les updates de consent, et declenche les triggers conditionnels.
4GTM Server Container
Procedure d'import
DefaultMerge → Overwrite conflicting tags, triggers, and variablesContenu du container
Flux de routing sGTM
GA4 Client (recoit les requetes transport Addingwell)
├── GA4 Server → Forward vers GA4
├── META – CAPI → Conversion API (Full server-only)
│ └── fbp/fbc cookies 1P, event_id, user_data
├── GADS – Conv (x10) → Enhanced Conversions
│ └── purchase, add_to_cart, begin_checkout, view_item, etc.
├── Addingwell Monitoring → Logs & analytics
└── Enrichissement auto :
• User data via GA4 Event Settings Variable
• event_id pour deduplication Meta
• Consent Mode v2 signauxCustom Domain First-Party
- Les hits partent vers tags.monstore.com au lieu de google-analytics.com
- Les adblockers ne bloquent pas les requetes first-party
- Les cookies sont first-party (pas affectes par ITP)
- Meilleure attribution et duree de vie des cookies
DNS tags.monstore.com → CNAME → sGTM hosting GTM Web GA4 Config → server_container_url = https://tags.monstore.com Resultat Tous les hits GA4 transitent par le custom domain
SSL obligatoire
Le custom domain doit etre en HTTPS. Le certificat SSL est gere automatiquement par le provider sGTM (Addingwell, Stape, etc.).
Destinations Server-Side
| Destination | Tag sGTM | API | Events |
|---|---|---|---|
| Meta | Meta Conversions API | graph.facebook.com | PageView, ViewContent, AddToCart, Purchase |
| Google Ads | Google Ads Conversions | googleads.googleapis.com | purchase (Conversion Action) |
Deduplication
| Plateforme | Cle de deduplication |
|---|---|
| Meta | event_id (identique client + serveur) |
| Google Ads | transaction_id / order_id |
Templates Addingwell
Les templates Addingwell (Meta CAPI, Google Ads Conversions) enrichissent automatiquement les events avec user_data, cookies et parametres URL. Pas de configuration manuelle des variables.
Container cle en main : connecteurs server-side, routage first-party et credentials destinations (Pixel IDs, Access Tokens) sont pre-remplis via Connectors. Meta fonctionne en Full CAPI (pas de pixel browser).
5Verifier les valeurs
Toutes les valeurs sont pre-remplies dans les containers importes. Ouvrir chaque variable/tag dans GTM et verifier que la valeur correspond.
G-XXXXXXXhttps://tags.ma-boutique.comxxxxxxxx-xxxx-...123456789EAAG...AW-XXXXXXXXXAbCdEf...Procedure : GTM → Variables (Web) ou Tags (Server) → ouvrir l'element → verifier la valeur Connectors. Les variables DataLayer (DLV - ecommerce - *) se remplissent automatiquement via Addingwell.
6Desactiver les destinations non utilisees
Si certaines destinations ne sont pas utilisees, mettre en pause les tags (ne pas supprimer).
META - Pixel - All EventsMETA - CAPI - All EventsGADS - Remarketing - All PagesGADS - Conv - purchaseProcedure : GTM → Tags → ouvrir le tag → menu ... → Pause → sauvegarder.
7Publier les containers
Une fois les valeurs verifiees et les destinations inutiles pausees :
Attention avant de publier
Ne pas publier si des valeurs semblent incorrectes ou si des placeholders sont encore visibles dans les variables ou les tags. Retourner au Connectors pour corriger.
8Tags Reference
Enhanced Conversions
Les Enhanced Conversions ameliorent le matching utilisateur en envoyant des donnees hashees (SHA-256) aux plateformes.
| Donnee | Source | Hashage |
|---|---|---|
| DataLayer (purchase) | SHA-256 automatique | |
| Phone | DataLayer (purchase) | SHA-256 automatique |
| First Name | DataLayer (purchase) | SHA-256 automatique |
| Last Name | DataLayer (purchase) | SHA-256 automatique |
| Address | DataLayer (purchase) | SHA-256 automatique |
Shopify Checkout (purchase)
↓
DataLayer (user_data en clair)
↓
GTM Web → GA4 transport → sGTM
↓
Templates sGTM hashent automatiquement
↓
Plateformes recoivent les donnees hasheesConsent obligatoire
Les donnees utilisateur ne sont jamais envoyees sans consent marketing. Le Consent Mode v2 bloque la transmission si ad_user_data = Denied.
Variables DataLayer (Web Container)
| Variable | DataLayer Path | Usage |
|---|---|---|
| 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 (array) |
Credentials necessaires (Server Container)
| Destination | Credentials |
|---|---|
| Meta CAPI | Pixel ID + Access Token |
| Google Ads | Conversion ID + Conversion Label |
| GA4 | Measurement ID (herite du Web) |
Convention de nommage
Les variables DataLayer utilisent le prefixe DLV -. Les constantes de configuration sont nommees par leur role. Les triggers utilisent le prefixe CE - (Custom Event).
9Verification
GTM Preview Mode (Web Container)
- 1Ouvrir GTM → Preview (bouton en haut a droite)
- 2Entrer l'URL du store Shopify
- 3Naviguer sur le store dans l'onglet de preview
- 4Verifier les tags fires dans le panneau de debug
| Verification | Attendu |
|---|---|
| Consent Initialization | Cookiebot CMP fire en premier |
| Avant consent | Seuls Cookiebot et GA4 Config fires |
| Apres consent marketing | Meta, Google Ads fires |
| Event purchase | Toutes les variables ecommerce remplies |
| server_container_url | Les hits GA4 partent vers le custom domain |
GTM Preview Mode (Server Container)
- 1Ouvrir GTM Server → Preview Mode
- 2Naviguer sur le store et declencher des events
- 3Verifier que le GA4 Client recoit les hits
- 4Verifier que chaque tag server fire correctement
Verifier les destinations
| Destination | Outil de verification |
|---|---|
| Meta CAPI | Meta Events Manager → Test Events |
| Google Ads | Google Ads → Conversions → Diagnostics |
| GA4 | GA4 DebugView (Realtime) |
CDN Proxy et Preview
Si le CDN proxy Addingwell est actif, le Preview Mode peut ne pas fonctionner sur le custom domain. Tester en desactivant temporairement le proxy ou en utilisant l'URL directe GTM.
Phase 2 : Fondations GTM + Consent
10Troubleshooting
Verifier :
- 1GTM injecte par Addingwell (pas de snippet manuel en conflit)
- 2Container ID correct
- 3Events DataLayer presents (console → dataLayer)
- 4Triggers correctement mappes aux events
Verifier :
- Tag Cookiebot en Consent Initialization (pas All Pages)
- Consent built-in configure sur chaque tag marketing
- Pas de tag avec "No additional consent required"
Verifier :
- 1server_container_url correct dans GTM Web (tag GA4 Config)
- 2Custom domain fonctionnel (curl https://tags.monstore.com/healthz)
- 3Container server publie
- 4GA4 Client configure dans le sGTM
Verifier :
- Access Token valide et non expire
- Pixel ID correct
- Permissions du token (ads_management, ads_read)
- Format des events (event_name, user_data)
Verifier :
- event_id identique entre client-side et server-side
- Pas de double tag purchase dans le GTM Web
- Pas de conversion importee manuellement en parallele
- Deduplication activee cote plateforme
Verifier :
- user_data present dans le DataLayer (email, phone)
- Donnees non vides au moment du purchase
- Hashage automatique actif dans les templates
- Consent ad_user_data = Granted