Sommaire
1. Principes de base
- Le problème des "(not set)" dans GA4
- Fonctionnement des dimensions personnalisées
- Impact sur l'attribution marketing
2. Préparation
- Audit de vos données d'attribution
- Comparaison Client-Side vs Server-Side
- Document de mapping des dimensions
3. Configuration technique avec Google Tag Manager
- Configuration des variables GTM
- Création du cookie d'attribution
- Implémentation des dimensions personnalisées dans GA4
- Configuration des tags GA4
- Adaptation du Measurement Protocol
- Création des rapports personnalisés
4. Validation et maintenance
- Tests avec DebugView et Preview Mode
- Monitoring des résultats
- Dépannage et optimisation
INTRODUCTION
À quoi servent les dimensions personnalisées ?
Les dimensions personnalisées dans GA4 permettent de récupérer des informations d'attribution cruciales qui seraient autrement perdues, en particulier lors de l'utilisation du Measurement Protocol en configuration server-side.
Cette solution technique, implémentée via Google Tag Manager, permet de résoudre le problème des conversions "(not set)" qui représentent souvent une part significative des données, rendant impossible l'analyse précise du ROI marketing et l'optimisation des campagnes.
La méthode présentée ici a été testée et validée sur plusieurs sites e-commerce, permettant de réduire considérablement le taux de données non attribuées et d'améliorer la qualité des analyses marketing.
1. Principes de base
1.1 Le problème des "(not set)" dans GA4
Lorsque vous utilisez GA4 en configuration server-side, particulièrement avec le Measurement Protocol, vous pouvez rencontrer un problème majeur d'attribution :
- Perte massive d'attribution : Une grande partie des conversions apparaissent comme "(not set)" dans les rapports d'acquisition
- Déconnexion entre session et conversion : Le Measurement Protocol envoie les événements de conversion sans conserver le lien avec la session initiale
- Impact du consentement cookies : Les utilisateurs refusant les cookies analytiques génèrent davantage de conversions non attribuées
Nos analyses sur plusieurs sites e-commerce révèlent que jusqu'à 48% des conversions peuvent être attribuées à "(not set)" dans une configuration server-side standard.
Cas concret observé :
- Propriété Server-Side : 862 achats dont 410 "(not set)" (48%)
- Propriété Client-Side : 443 achats correctement attribués
Cette observation clé montre que les achats correctement attribués en server-side (452) correspondent presque exactement au nombre total d'achats en client-side (443), confirmant que le problème est lié à la transmission du session_id.
1.2 Fonctionnement des dimensions personnalisées
Les dimensions personnalisées dans GA4 offrent une solution technique élégante à ce problème :
- Capture indépendante : Elles permettent de capturer et stocker des informations d'attribution indépendamment du mécanisme standard de GA4
- Persistance configurable : Les données peuvent être conservées selon vos besoins business (30, 60, 90 jours)
- Transmission via Measurement Protocol : Les informations d'attribution peuvent être incluses dans chaque événement envoyé
- Granularité analytique : Elles permettent des analyses cross-session et cross-device impossibles autrement
Contrairement aux mécanismes d'attribution standards de GA4, les dimensions personnalisées peuvent fonctionner même sans session_id, offrant ainsi une solution robuste au problème des "(not set)".
1.3 Impact sur l'attribution marketing
L'utilisation de dimensions personnalisées pour corriger l'attribution transforme la qualité de vos analyses marketing :
- Réduction des "(not set)" : Diminution significative des conversions sans source identifiée
- Vision complète du parcours client : Compréhension claire de l'origine des conversions
- Optimisation budgétaire : Allocation des investissements marketing basée sur des données complètes
- Mesure précise du ROI : Évaluation correcte de la performance par canal et par campagne
- Continuité analytique : Conservation de l'historique tout en améliorant l'attribution future
Cet impact se traduit directement par une meilleure prise de décision marketing et une optimisation des investissements.
2. Préparation
2.1 Audit de vos données d'attribution
Avant d'implémenter les dimensions personnalisées, réalisez un audit complet de vos données actuelles :
- Analysez vos rapports d'acquisition :
- Identifiez le pourcentage de conversions "(not set)"
- Observez la répartition par source/medium
- Comparez avec les données de vos plateformes publicitaires
- Examinez les parcours de conversion :
- Utilisez l'outil Exploration pour analyser les chemins menant aux conversions
- Identifiez les points de rupture où l'attribution est perdue
- Vérifiez votre implémentation actuelle :
- Configuration du Measurement Protocol
- Paramétrage de votre CMP (Consent Management Platform)
- Structure des URLs avec UTM dans vos campagnes
Cet audit vous permettra de quantifier précisément l'ampleur du problème et d'adapter la solution à votre situation spécifique.
2.2 Comparaison Client-Side vs Server-Side
La comparaison des données entre vos propriétés client-side et server-side est essentielle pour comprendre la nature exacte du problème :
- Analysez une période identique :
- Comparez les volumes de conversions totales
- Identifiez les écarts d'attribution par source
- Vérifiez si le nombre de conversions attribuées en server-side correspond au total client-side
- Identifiez les facteurs de différence :
- Taux de refus des cookies
- Présence d'adblockers
- Problèmes techniques spécifiques (chargement GA4, pages de confirmation)
- Documentez les patterns :
- Certaines sources sont-elles plus affectées que d'autres ?
- Existe-t-il des différences selon les appareils ou navigateurs ?
- Les conversions de valeur élevée sont-elles plus touchées ?
Cette comparaison fournit la base de votre stratégie de correction d'attribution.
2.3 Document de mapping des dimensions
Créez un document de référence qui servira de guide pour l'implémentation et la maintenance :
Structure recommandée :
- Logique d'attribution :
- Règles de priorité entre sources
- Durée de conservation des cookies
- Traitement des cas spéciaux (direct, referral)
- Plan d'implémentation GTM :
- Structure des variables et des tags
- Déclencheurs à configurer
- Séquence de déploiement
Ce document garantit une approche cohérente et facilite la communication entre équipes techniques et marketing.
3. Configuration technique avec Google Tag Manager
3.1 Configuration des variables GTM
La première étape consiste à créer les variables nécessaires dans Google Tag Manager :
- Créez une variable JavaScript personnalisée pour gérer l'attribution :
- Nom : "JS - Cookie Attribution"
- Type : JavaScript personnalisé
- Code :
javascriptjavascript function() { // Configuration var COOKIE_NAME = '_te'; var COOKIE_DURATION_DAYS = 30; // Fonction pour lire le cookie d'attribution function getAttributionCookie() { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = cookies[i].trim(); if (cookie.indexOf(COOKIE_NAME + '=') === 0) { try { return JSON.parse(decodeURIComponent(cookie.substring(COOKIE_NAME.length + 1))); } catch (e) { return null; } } } return null; } // Fonction pour définir le cookie d'attribution function setAttributionCookie(data) { var expiryDate = new Date(); expiryDate.setDate(expiryDate.getDate() + COOKIE_DURATION_DAYS); document.cookie = COOKIE_NAME + '=' + encodeURIComponent(JSON.stringify(data)) + ';expires=' + expiryDate.toUTCString() + ';path=/;SameSite=Lax'; } // Extraction des paramètres UTM de l'URL function getUTMParameters() { var urlParams = new URLSearchParams(window.location.search); var utmParams = { utm_source: urlParams.get('utm_source') || '', utm_medium: urlParams.get('utm_medium') || '', utm_campaign: urlParams.get('utm_campaign') || '', utm_content: urlParams.get('utm_content') || '', utm_term: urlParams.get('utm_term') || '', timestamp: Date.now() }; // Si aucun UTM n'est présent, vérifier le référent if (!utmParams.utm_source && document.referrer) { try { var referrer = new URL(document.referrer); utmParams.utm_source = referrer.hostname; utmParams.utm_medium = 'referral'; } catch (e) { // Gérer les erreurs d'URL invalide } } return utmParams; } // Gestion de l'attribution var existingData = getAttributionCookie(); var currentUTMs = getUTMParameters(); // Si nous avons des UTMs actuels ou s'il n'y a pas de données existantes if ((currentUTMs.utm_source || currentUTMs.utm_medium) || !existingData) { setAttributionCookie(currentUTMs); return currentUTMs; } // Sinon retourner les données existantes return existingData; }
- Créez des variables dédiées pour chaque paramètre d'attribution : Pour utm_source : Pour utm_medium : Pour utm_campaign :
- Nom : "JS - Cookie Attribution - utm_source"
- Type : JavaScript personnalisé
- Code :
- Nom : "JS - Cookie Attribution - utm_medium"
- Type : JavaScript personnalisé
- Code :
- Nom : "JS - Cookie Attribution - utm_campaign"
- Type : JavaScript personnalisé
- Code :
javascriptjavascript function() { var attribution = {{JS - Cookie Attribution}}; return attribution && attribution.utm_source ? attribution.utm_source : '(not set)'; }
javascriptfunction() { var attribution = {{JS - Cookie Attribution}}; return attribution && attribution.utm_medium ? attribution.utm_medium : '(not set)'; }
javascriptfunction() { var attribution = {{JS - Cookie Attribution}}; return attribution && attribution.utm_campaign ? attribution.utm_campaign : '(not set)'; }
- Créez une variable pour le statut de consentement :
- Nom : "JS - Consent Status"
- Type : JavaScript personnalisé
- Code (exemple avec OneTrust) :
javascriptfunction() { // Adapter à votre CMP if (typeof OnetrustActiveGroups !== 'undefined') { return OnetrustActiveGroups.includes('C0002') ? 'opt-in' : 'opt-out'; } return 'unknown'; }
- Créez des variables pour les configurations GA4 :
- Nom : "Const - GA4 Measurement ID"
- Type : Constante
- Valeur : "G-XXXXXXXXXX" (votre ID GA4)
- Nom : "Const - GA4 API Secret"
- Type : Constante
- Valeur : "YYYYYYYYYY" (votre API Secret pour le Measurement Protocol)
3.2 Création du cookie d'attribution
Configurez un tag pour initialiser le cookie d'attribution :
- Créez un nouveau tag :
- Nom : "JS - Attribution Cookie Initializer"
- Type : HTML personnalisé
- Code HTML :
html<script> // Ce tag initialise simplement la variable d'attribution// pour déclencher la logique de création/mise à jour du cookie var attribution = {{JS - Cookie Attribution}}; // Aucune action supplémentaire nécessaire,// la variable s'occupe de la logique de cookie </script>
- Configurez le déclencheur :
- Type : "All Pages"
- Priorité : Définir comme "Élevée" pour s'exécuter avant les tags GA4
- Options avancées :
- Dans "Séquence de balises", sélectionnez "Shoot Before Other Tags"
- Cela garantit que le cookie d'attribution sera initialisé avant l'envoi des événements GA4
3.3 Implémentation des dimensions personnalisées dans GA4
Configurez les dimensions personnalisées dans l'interface GA4 :
- Accédez à l'interface d'administration :
- Connectez-vous à votre compte GA4
- Cliquez sur "Admin" (icône d'engrenage)
- Sélectionnez "Propriété > Définitions personnalisées > Dimensions personnalisées"
- Créez les dimensions suivantes : UTM Source : UTM Medium : UTM Campaign : Opt Status :
- Nom : "utm_source"
- Description : "Source d'acquisition via cookie d'attribution"
- Portée : "Événement"
- Nom du paramètre d'événement : "utm_source"
- Nom : "utm_medium"
- Description : "Canal média via cookie d'attribution"
- Portée : "Événement"
- Nom du paramètre d'événement : "utm_medium"
- Nom : "utm_campaign"
- Description : "Campagne marketing via cookie d'attribution"
- Portée : "Événement"
- Nom du paramètre d'événement : "utm_campaign"
- Nom : "opt_status"
- Description : "État du consentement cookies"
- Portée : "Événement"
- Nom du paramètre d'événement : "opt_status"
Afficher l'image
3.4 Configuration des tags GA4
Modifiez vos tags GA4 pour inclure les dimensions personnalisées :
- Tag de configuration GA4 :
- Ouvrez votre tag de configuration GA4 existant
- Dans la section "Champs à définir", ajoutez les mappings suivants :
- custom_map.dimension1 : "utm_source"
- custom_map.dimension2 : "utm_medium"
- custom_map.dimension3 : "utm_campaign"
- custom_map.dimension4 : "opt_status"
Afficher l'image
- Tags d'événements GA4 :
- Pour chaque tag d'événement GA4, dans la section "Paramètres d'événement", ajoutez :
- utm_source : {{JS - Cookie Attribution - utm_source}}
- utm_medium : {{JS - Cookie Attribution - utm_medium}}
- utm_campaign : {{JS - Cookie Attribution - utm_campaign}}
- opt_status : {{JS - Consent Status}}
Afficher l'image
3.5 Adaptation du Measurement Protocol
Si vous utilisez le Measurement Protocol pour envoyer des événements server-side, créez un tag dédié pour enrichir ces appels :
- Créez un tag pour le Measurement Protocol :
- Nom : "GA4 - MP - Purchase Event"
- Type : Balise HTML personnalisée
- Code HTML :
html<script> // Cette fonction est appelée lors d'un achat function sendPurchaseEventMP(transactionData) { // Récupération des données d'attribution var attributionSource = {{JS - Cookie Attribution - utm_source}}; var attributionMedium = {{JS - Cookie Attribution - utm_medium}}; var attributionCampaign = {{JS - Cookie Attribution - utm_campaign}}; var consentStatus = {{JS - Consent Status}}; // Construction du payload var payload = { client_id: transactionData.clientId || {{Client ID}}, events: [{ name: 'purchase', params: { transaction_id: transactionData.transactionId, value: transactionData.value, currency: 'EUR', items: transactionData.items, // Dimensions personnalisées utm_source: attributionSource, utm_medium: attributionMedium, utm_campaign: attributionCampaign, opt_status: consentStatus } }] }; // Envoi via Measurement Protocol fetch('https://www.google-analytics.com/mp/collect?measurement_id=' + {{Const - GA4 Measurement ID}} + '&api_secret=' + {{Const - GA4 API Secret}}, { method: 'POST', body: JSON.stringify(payload) }); } // Appel de la fonction avec les données de transaction// Ces données devraient être fournies par votre dataLayer var transactionData = { transactionId: {{Transaction ID}}, value: {{Transaction Value}}, items: {{Transaction Items}} // Les variables ci-dessus doivent être configurées dans GTM }; sendPurchaseEventMP(transactionData); </script>
- Configurez le déclencheur :
- Type : Événement personnalisé
- Nom de l'événement : "send_mp_purchase" (ou l'événement que vous utilisez pour déclencher les appels MP)
- Alternative : Adaptation côté serveur :
- Si vous générez les appels Measurement Protocol côté serveur, transmettez les valeurs des cookies à votre serveur :
html<script> // Envoyer les données d'attribution au serveur lors de la soumission du formulaire document.addEventListener('DOMContentLoaded', function() { var checkoutForm = document.getElementById('checkout-form'); if (checkoutForm) { checkoutForm.addEventListener('submit', function() { // Ajouter des champs cachés avec les données d'attribution var attributionSource = document.createElement('input'); attributionSource.type = 'hidden'; attributionSource.name = 'utm_source'; attributionSource.value = {{JS - Cookie Attribution - utm_source}}; checkoutForm.appendChild(attributionSource); // Répéter pour les autres dimensions// ... }); } }); </script>
3.6 Création des rapports personnalisés
Pour exploiter pleinement les dimensions personnalisées, créez des rapports dédiés :
- Accédez à l'outil Exploration :
- Dans GA4, cliquez sur "Exploration"
- Sélectionnez "Créer une exploration"
- Choisissez le modèle "Tableau libre"
- Configurez votre rapport :
- Dans la section "Variables", ajoutez vos dimensions personnalisées
- Sélectionnez les métriques pertinentes (conversions, revenus)
- Définissez la période d'analyse appropriée
- Construisez votre tableau :
- Glissez-déposez "utm_source" dans les lignes
- Ajoutez "utm_medium" comme dimension secondaire
- Placez vos métriques de conversion dans les colonnes
- Ajoutez des segments :
- Créez un segment pour les utilisateurs opt-in
- Créez un segment pour les utilisateurs opt-out
- Comparez les performances entre ces segments
Résultats observés avec les sources retrouvées :
4. Validation et maintenance
4.1 Tests
Validez votre implémentation en utilisant à la fois le mode Preview de GTM et DebugView de GA4 :
- Tests GTM en Preview Mode :
- Cliquez sur "Aperçu" dans GTM
- Sur votre site, vérifiez que :
- Le tag "JS - Attribution Cookie Initializer" se déclenche correctement
- Les variables d'attribution contiennent les valeurs attendues
- Les tags GA4 incluent les dimensions personnalisées
- Validation dans GA4 DebugView :
- Dans GA4, accédez à "Admin > DebugView"
- Dans GTM Preview, vérifiez que les événements envoyés à GA4 incluent les dimensions personnalisées
- Confirmez que les valeurs correspondent à celles de vos variables GTM
- Test des différents scénarios :
- Visitez votre site avec différents paramètres UTM
- Effectuez une conversion complète
- Vérifiez la persistance entre sessions
- Testez avec et sans consentement
Afficher l'image
4.2 Monitoring des résultats
Mettez en place un processus de surveillance régulier :
- Métriques clés à suivre :
- Pourcentage de conversions "(not set)" vs attribuées
- Répartition des sources d'acquisition
- Comparaison avec les plateformes publicitaires
- Rapport périodique :
- Créez un tableau de bord dédié à l'attribution
- Établissez un rapport hebdomadaire d'amélioration
- Comparez les données avant/après implémentation
- Alertes automatiques :
- Configurez des alertes pour détecter les augmentations de "(not set)"
- Surveillez les écarts significatifs entre propriétés client-side et server-side
- Mettez en place des notifications en cas d'anomalies
4.3 Dépannage et optimisation
Anticipez les problèmes courants et optimisez votre solution :
- Problèmes fréquents avec GTM et solutions :
- Variables non définies : Vérifiez l'ordre d'exécution des tags
- Conflit avec la CMP : Assurez-vous que la CMP ne bloque pas vos cookies
- Erreurs JavaScript : Validez votre code dans la console du navigateur
- Problèmes de timing : Ajustez les déclencheurs et la priorité des tags
- Optimisations GTM recommandées :
- Groupes de tags : Organisez vos tags en groupes logiques
- Versions annotées : Documentez clairement les changements dans chaque version
- Environnements distincts : Utilisez les environnements GTM pour tester avant production
- Mise en cache : Optimisez le chargement avec la mise en cache du conteneur
- Évolution de la solution :
- GTM Server-Side : Envisagez une migration vers GTM Server-Side pour plus de contrôle
- Intégration avec d'autres outils : Connectez les données à votre CRM ou outil BI
- Automatisation : Développez des processus automatisés de vérification et de rapport
Conclusion
L'implémentation de dimensions personnalisées via Google Tag Manager offre une solution robuste au problème critique des "(not set)" dans l'attribution server-side GA4. Cette approche, testée et validée sur plusieurs sites e-commerce, permet de récupérer une visibilité précieuse sur l'origine réelle de vos conversions.
La combinaison de GTM et des dimensions personnalisées GA4 présente plusieurs avantages clés :
- Flexibilité de configuration sans intervention des développeurs
- Facilité de maintenance et d'évolution
- Capacité à tester rapidement différentes approches
- Intégration harmonieuse avec les CMP et autres outils marketing
La réduction significative des conversions non attribuées se traduit directement par une meilleure optimisation des investissements marketing et une analyse ROI plus précise, créant ainsi un avantage compétitif tangible pour votre organisation.