Consent Mode v2 & CMP Sirdata

Le Consent Mode v2 est le langage commun entre votre CMP et les tags Google : il indique à chaque tag ce que l'utilisateur a accepté. Depuis mars 2024, les signaux ad_user_data et ad_personalization sont obligatoires pour la publicité dans l'EEE.

Consentement Niveau : intermédiaire ~35 min

Les signaux du Consent Mode

SignalContrôleObligatoire v2
ad_storageCookies publicitaires (ex. cookie de clic gclid)
analytics_storageCookies analytics (GA4 : _ga)
ad_user_dataEnvoi de données utilisateur à Google Ads
ad_personalizationPublicité personnalisée / remarketing
functionality_storageCookies fonctionnels (langue, préférences)
personalization_storagePersonnalisation de contenu (reco, vidéos)
security_storageSécurité (anti-fraude, authentification)

Étape 1 — Installer la CMP Sirdata (ABconsent)

1

Créer la configuration

Depuis votre console Sirdata CMP, créez la configuration du site : design de la bannière, finalités TCF v2.2, vendors, langues. La CMP est certifiée Google CMP Partner : le Consent Mode v2 est géré nativement, sans code supplémentaire.

2

Poser le script

Intégrez le script CMP le plus haut possible dans le <head>, avant GTM et tout autre tag :

HTML — script CMP Sirdata (IDs d'exemple)
<!-- CMP Sirdata / ABconsent : toujours AVANT GTM -->
<script type="text/javascript"
        src="https://cache.consentframework.com/js/pa/12345/c/abcde/stub"
        referrerpolicy="unsafe-url"
        charset="utf-8"></script>

<!-- Puis le snippet GTM web habituel -->
💡
Ordre de chargement = 90 % des bugsSi GTM se charge avant la CMP, les tags partent avant que le consentement par défaut ne soit posé. CMP d'abord, GTM ensuite, toujours.

Étape 2 — Consent default

Avant toute interaction utilisateur, un état par défaut doit être défini — denied pour tout ce qui est traceur dans l'EEE. La CMP Sirdata le fait automatiquement ; voici l'équivalent gtag pour comprendre ce qui se passe sous le capot :

JavaScript — consent default (posé par la CMP)
window.dataLayer = window.dataLayer || [];
function gtag(){ dataLayer.push(arguments); }

gtag('consent', 'default', {
  ad_storage: 'denied',
  analytics_storage: 'denied',
  ad_user_data: 'denied',
  ad_personalization: 'denied',
  functionality_storage: 'denied',
  personalization_storage: 'denied',
  security_storage: 'granted',
  wait_for_update: 500,   // laisse 500 ms à la CMP pour restaurer un choix existant
  region: ['FR', 'BE', 'DE', 'ES', 'IT']  // optionnel : cibler certains pays
});

// Recommandé avec le consent mode :
gtag('set', 'ads_data_redaction', true);  // supprime les identifiants pubs si ad_storage=denied
gtag('set', 'url_passthrough', true);     // fait suivre gclid/dclid via l'URL sans cookie

Étape 3 — Consent update

Quand l'utilisateur fait son choix dans la bannière, la CMP pousse un update :

JavaScript — consent update « tout accepter »
gtag('consent', 'update', {
  ad_storage: 'granted',
  analytics_storage: 'granted',
  ad_user_data: 'granted',
  ad_personalization: 'granted',
  functionality_storage: 'granted',
  personalization_storage: 'granted'
});
JavaScript — consent update « analytics uniquement »
gtag('consent', 'update', {
  ad_storage: 'denied',
  analytics_storage: 'granted',
  ad_user_data: 'denied',
  ad_personalization: 'denied'
});

🧪 À rejouer en démo : le playground affiche l'état des 7 signaux en temps réel et permet de simuler default, accept all, refuse all et choix partiels.

Ouvrir le playground

Étape 4 — Comportement des tags

Deux modes d'implémentation possibles :

ModeFonctionnementEffet si denied
Advanced (par défaut) Les tags Google se chargent toujours et adaptent leur comportement aux signaux Pings anonymes sans cookies (« cookieless pings »), permettant la modélisation des conversions
Basic Les tags sont bloqués tant que le consentement n'est pas accordé (déclencheurs conditionnés) Aucune donnée envoyée, pas de modélisation

Pour les tags non-Google (Meta pixel, TikTok…), utilisez les paramètres de consentement supplémentaires de GTM (onglet Consentement du tag) ou des déclencheurs basés sur le TC string / les finalités exposées par la CMP Sirdata.

Étape 5 — Consentement côté serveur

Bonne nouvelle : les hits GA4 embarquent automatiquement l'état de consentement dans le paramètre gcs (et gcd). Votre conteneur serveur y a accès et peut conditionner ses tags :

1

Lire le consentement dans sGTM

Créez une variable serveur de type Query Parameter sur gcs, ou utilisez les données de consentement de l'événement (champs x-ga-gcs exposés par le client GA4).

2

Conditionner les tags serveur

Exemple : le tag Meta CAPI ne se déclenche que si le consentement publicitaire est accordé. Ajoutez une condition de déclenchement : gcs se termine par 11 (ads + analytics) ou vérifiez la finalité TCF correspondante.

⚠️
Le serveur n'exonère pas du consentementUn hit qui transite par votre serveur reste un traitement de données. Le server-side permet de mieux appliquer le consentement (filtrage centralisé), pas de le contourner.

Étape 6 — Vérifier

JavaScript — inspecter le TC string (console)
__tcfapi('getTCData', 2, function (tcData, success) {
  if (success) {
    console.log('TC string :', tcData.tcString);
    console.log('Finalités acceptées :', tcData.purpose.consents);
    console.log('Google (vendor 755) :', tcData.vendor.consents[755]);
  }
});