Tracking & CMP User ids 😇

Technical Deep Dive

Approche client-side

Identifiants persistants des CMP

Utilisation des identifiants stables générés par les Consent Management Platforms dans les outils de tracking

Principe général

Dans l'écosystème web moderne, chaque site déploie une CMP (Consent Management Platform) pour gérer les choix de l'utilisateur en matière de cookies et de traitements de données. La plupart de ces CMP génèrent un ID utilisateur dès le chargement, avant même que l'utilisateur n'ait fait son choix.

Et bonne nouvelle, ces identifiants sont accessibles et utilisables très facilement 😊😊😊

Bien sûr, il faut vérifier si un consentement est nécessaire, mais ces identifiants sont accessibles sans 😇

Ci-dessous, je vous explique comment les récupérer pour les utiliser avec Google Analytics (GA4). La même logique s'applique à la plupart des autres outils de tracking.

Propriétés techniques

  • ID first-party
  • Créés automatiquement dès le premier chargement
  • Conservés dans des cookies propres à chaque CMP
  • Exposés par des APIs JavaScript côté navigateur
  • Stables entre les pages et les sessions

Modes d'accès

Par les cookies

Lecture via document.cookie

Par les APIs JavaScript

Objets globaux exposés

GA4

Rappel de fonctionnement

GA4 Principe commun

Pour mémoire, voici un script de chargement type pour GA4. Le principe étant d'enrichir GA4 avec les ID des CMP, il faut le préparer à les recevoir.

Pour commencer, chargez GA4 sans envoyer l'événement "page_view".

Tag GA4
<script async src="https://www.googletagmanager.com/gtag/js?id=G-ABCDEFGHI"></script>
<script>
    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag('js', new Date());
    gtag('config', 'G-ABCDEFGHI', {'send_page_view': false});
</script>

Ensuite, récupérez l'ID utilisateur de la CMP et déclarez-le comme un user_id dans GA4. Enfin, déclenchez l'événement page_view.

Reportez-vous ci-dessous à la section qui concerne votre CMP pour savoir comment faire 😊

Axeptio

Configuration et intégration technique

API Axeptio

L'API d'Axeptio permet de récupérer très simplement l'ID utilisateur, appelé token, qui a ce format :

p7ewelbd7mbt8pp6m27dqf

Voici comment le récupérer et le déclarer comme paramètre user_id dans GA4, avant de déclencher l'événement page_view.

Code complet GA4
<script>
    window._axcb = window._axcb || [];
    window._axcb.push(function(sdk){
      sdk.on("token:update", function(payload){
        const uuid = payload?.value;
        if (uuid) {
            gtag('set', 'user_id', uuid);
        }
        gtag('event','page_view');
      });
    });
</script>

Voici un exemple de données envoyées à GA4 avec le paramètre uid ajouté :

https://region1.google-analytics.com/g/collect?v=2&tid=G-ABCDEFGHI&gcs=G100
&cid=1032432403.1752537491&dl=https%3A%2F%2Fwww.exemple.com%2F&dt=exemple
&en=page_view&uid=p7ewelbd7mbt8pp6m27dqf

CookieYes

Configuration et intégration technique

API CookieYes

L'API de CookieYes permet de récupérer très simplement l'ID utilisateur, appelé token, qui a le format suivant :

N0l2ZTNTR083cng2d2Vpd1UUSW5RdDBJdnh1N1RHU1I

Voici comment le récupérer et le déclarer comme paramètre user_id dans GA4, avant de déclencher l'événement page_view.

Code complet GA4
<script>
    (function() {
        var uuid = (window.getCkyConsent()||{}).consentID;;
        if (uuid) {
            gtag('set', 'user_id', uuid);
        }
        gtag('event','page_view');
    })()
</script>

Voici un exemple de données envoyées à GA4 avec le paramètre uid ajouté :

https://region1.google-analytics.com/g/collect?v=2&tid=G-ABCDEFGHI&gcs=G100
&cid=1032432403.1752537491&dl=https%3A%2F%2Fwww.exemple.com%2F&dt=exemple
&en=page_view&uid=N0l2ZTNTR083cng2d2Vpd1UUSW5RdDBJdnh1N1RHU1I

Didomi

Configuration et intégration technique

API Didomi

L'API de Didomi permet de récupérer très simplement l'ID utilisateur, appelé user_id, qui a ce format :

0a573e1d-5f45-4af3-8570-0a311125b797

Voici comment le récupérer et le déclarer comme paramètre user_id dans GA4, avant de déclencher l'événement page_view.

Code complet GA4
<script>
    window.didomiOnReady = window.didomiOnReady || [];
    window.didomiOnReady.push(function (Didomi) {
        const uuid = (Didomi.getUserStatus() || {}).user_id;
        if (uuid) {
            gtag('set', 'user_id', uuid);
        }
        gtag('event','page_view');
    });
</script>

Voici un exemple de données envoyées à GA4 avec le paramètre uid ajouté :

https://region1.google-analytics.com/g/collect?v=2&tid=G-ABCDEFGHI&gcs=G100
&cid=1032432403.1752537491&dl=https%3A%2F%2Fwww.exemple.com%2F&dt=exemple
&en=page_view&uid=0a573e1d-5f45-4af3-8570-0a311125b797

fastCMP

Configuration et intégration technique

API fastCMP

Le plus simple pour fastCMP est de récupérer l'ID utilisateur via l'API de la CMP (window.FastCMP), et ce dernier a ce format :

5066d49a-0a99-4fc1-bf6c-87612028c0e6

Voici comment le récupérer et le déclarer comme paramètre user_id dans GA4, avant de déclencher l'événement page_view.

Code complet GA4
<script>
    (function() {
        var uuid = window.FastCMP?.utils?.analytics?.DYNAMIC_SEGMENTS?.user_id
        if (uuid) {
            gtag('set', 'user_id', uuid);
        }
        gtag('event','page_view');
    })()
</script>

Voici un exemple de données envoyées à GA4 avec le paramètre uid ajouté :

https://region1.google-analytics.com/g/collect?v=2&tid=G-ABCDEFGHI&gcs=G100
&cid=1032432403.1752537491&dl=https%3A%2F%2Fwww.exemple.com%2F&dt=exemple
&en=page_view&uid=5066d49a-0a99-4fc1-bf6c-87612028c0e6

OneTrust

Configuration et intégration technique

API OneTrust

L'API d'OneTrust permet de récupérer très simplement l'ID utilisateur, appelé token, qui a ce format :

ccd4d684-36ff-49fd-8469-ac50233bee16

Voici comment le récupérer et le déclarer comme paramètre user_id dans GA4, avant de déclencher l'événement page_view.

Code complet GA4
<script>
    (function() {
        var uuid = window.OneTrust?.getDataSubjectId();
        if (uuid) {
            gtag('set', 'user_id', uuid);
        }
        gtag('event','page_view');
    })()
</script>

Voici un exemple de données envoyées à GA4 avec le paramètre uid ajouté :

https://region1.google-analytics.com/g/collect?v=2&tid=G-ABCDEFGHI&gcs=G100
&cid=1032432403.1752537491&dl=https%3A%2F%2Fwww.exemple.com%2F&dt=exemple
&en=page_view&uid=ccd4d684-36ff-49fd-8469-ac50233bee16

Sourcepoint

Configuration et intégration technique

Cookie Sourcepoint

Le plus simple pour Sourcepoint est de récupérer l'ID utilisateur dans le cookie qui sert à le stocker, appelé consentUUID, qui a ce format :

6e5ba72d-dbe3-463d-9144-3cccaf388686

Avec parfois un suffixe comme "_42" :

6e5ba72d-dbe3-463d-9144-3cccaf388686_42

Voici comment le récupérer et le déclarer comme paramètre user_id dans GA4, avant de déclencher l'événement page_view.

Code complet GA4
<script>
    (function() {
        var cookies = document.cookie.split(';');
        var uuid = null;
        for (var i = 0; i < cookies.length; i++) {
            var cookie = cookies[i].trim();
            if (cookie.indexOf('consentUUID=') === 0) {
                uuid = cookie.substring('consentUUID='.length, cookie.length);
                break;
            }
        }
        if (uuid) {
            uuid = uuid.split('_')[0];
            if (uuid) {
                gtag('set', 'user_id', uuid);
            }
        }
        gtag('event','page_view');
    })()
</script>

Voici un exemple de données envoyées à GA4 avec le paramètre uid ajouté :

https://region1.google-analytics.com/g/collect?v=2&tid=G-ABCDEFGHI&gcs=G100
&cid=1032432403.1752537491&dl=https%3A%2F%2Fwww.exemple.com%2F&dt=exemple
&en=page_view&uid=6e5ba72d-dbe3-463d-9144-3cccaf388686

À suivre...

Cette liste n'est pas exhaustive, et d'autres connecteurs seront ajoutés. Toutefois, cetaines CMP n'exposent pas d'ID utilisateur via API ni dans leurs cookies (Funding Choices, Usercentrics, Abconsent...).

Synthèse technique

Ces identifiants sont stables et persistants, disponibles dès la première page vue. Ils permettent un suivi cohérent entre les pages et ouvrent une passerelle vers d'autres systèmes.

La limite de cette approche est le caractère visible de la récupération de l'ID utilisateur. La section Server-Side apporte une réponse concrète à ce détail 😝

Approche server-side

Identifiants persistants des CMP
en server-side tagging

Exploiter les cookies exemptés des CMP pour tirer parti de leurs identifiants stables (discrètement)

Problème : Côté client, les identifiants de CMP envoyés vers GA4 transitent via le paramètre uid et restent visibles dans les requêtes réseau (Chrome DevTools → Network → collect).

Cette visibilité les expose à des risques, notamment le blocage par les adblockers 😧
Solution : ajouter le paramètre uid de manière invisible, côté serveur 😈

Principe général

CMP et server-side sont intimement liés, à l'image de Didomi qui a racheté Addingwell, ou d'Axeptio et son partenariat stratégique avec Taggr.

Il est d'ailleurs encore plus facile d'utiliser les identifiants stables stockés dans les cookies de CMP en server-side que de les gérer côté navigateur.

Tout simplement en les lisant dans les cookies lors d'appels server-side sur le même domaine que votre site 😉

Google Tag Manager Server-side

Ajout d'un user_id aux données GA4

Fonctionnement général

Un conteneur GTM serveur-side reçoit des hits (web/app/pixels) depuis les navigateurs, les normalise et peut les enrichir, puis il relaye le tout vers vos plateformes (GA4, Ads, Meta CAPI, etc.).

Pour ce qui concerne GA4, la balise fournie par Google s'occupe de tout :

Exemple de données transférées à GA4
donnee-ga4

Ajouter un user_id basé sur un cookie CMP est aussi simple que :

1) Créer une variable UUID Cookie CMP avec le nom du cookie de la CMP concernée, en cochant l'option "Cookie avec URI décodé "

Exemple de variable de récupération du cookie cmp_cookie (à remplacer par celui de votre CMP)
donnee-ga4

2) Ajouter un Paramètre d'événement nommé user_id à la balise GA4, et lui affecter la variable UUID Cookie CMP créée ci-dessus

Utilisation de la variable UUID Cookie CMP
donnee-ga4

3) Constater que le paramètre uid est ajouté après publication 😉

Exemple de données avec user_id transférées à GA4
donnee-ga4

Cas général

Utilisation directe des cookies

Cookie cookies CMP → GA4

Voici les cookies utilisables tels quels dans la manipulation expliquée ci-dessus :

1) consentmanager => cookie __cmpiuid à utiliser :

consentmanager-cookie-ga4

2) Osano => cookie osano_consentmanager_uuid à utiliser :

osano-cookie-ga4

Cas Particulier

Axeptio

Cookie & Processing Axeptio

Le cookie Axeptio contient un ID utilisateur, mais le cookie en lui-même contient un JSON. Il faut donc le parser et utiliser la valeur qui nous intéresse. Voici les étapes :

1) Récupérez le contenu du cookie axeptio_cookies dans la variable UUID Cookie CMP, comme expliqué ci-dessus :

axeptio-ga4

2) Ajoutez le template de variable Extract From JSON par mbaersch depuis la galerie Google, en cliquant sur Ajouter à l'espace de travail :

extract__template

3) Utilisez ce template custom pour créer une variable Axeptio user_id, en utilisant la variable précédente Axeptio Cookie Decoded comme valeur du champ JSON Input, et la clé $$token pour le champ Path to Element :

axeptio_uid

4) Enfin, utilisez cette variable Axeptio user_id pour alimenter le paramètre user_id de la balise GA4 :

ga4_axeptio

5) Publiez ! Vous pouvez voir le contenu des variables dans la prévisualisation :

variables_axeptio

...Et la donnée qui part vers GA4 avec le User ID d'Axeptio 👏 :

axeptio_ping_ga4

Cas Particulier

CookieYes

Cookie & Processing CookieYes

Le cookie CookieYes contient un ID utilisateur dans une grande chaîne de caractères dont il faut l'extraire. Voici les étapes :

1) Récupérez le contenu du cookie CookieYes-consent dans la variable UUID Cookie CMP, comme expliqué ci-dessus :

CookieYes_cookie

2) Créez une variable CookieYes user_id, en utilisant le type Tableau d'expressions régulières, avec variable précédente UUID Cookie CMP comme valeur du champ Variable d'entrée, .*consentid:([^,]+).* en valeur du champ Format et $1 en valeur du champ Sortie :

CookieYes_uid

3) Enfin, utilisez cette variable CookieYes user_id pour alimenter le paramètre user_id de la balise GA4 :

CookieYes_ga4

5) Publiez ! Vous pouvez voir le contenu des variables dans la prévisualisation :

CookieYes_variables

...Et la donnée qui part vers GA4 avec le User ID de CookieYes 👏 :

CookieYes_ping_ga4

Cas Particulier

Didomi

Cookie & Processing Didomi

Le cookie Didomi contient un ID utilisateur, mais le cookie en lui-même est un JSON compressé en base-64. Il faut donc le décoder avant d'utiliser la section qui nous intéresse. Voici les étapes :

1) Récupérer le contenu du cookie didomi_token dans la variable UUID Cookie CMP, comme expliqué ci-dessus :

didomi-cookie-ga4

2) Ajoutez le template de variable Base64 par mbaersch depuis la galerie Google en cliquant sur Ajouter à l'espace de travail :

base_64_template

3) Utilisez ce template custom pour créer une variable Didomi Cookie Decoded en utilisant la première variable UUID Cookie CMP comme valeur du champ Input Value et l'action Decode:

didomi_decoded

4) Ajoutez le template de variable Extract From JSON par mbaersch depuis la galerie Google en cliquant sur Ajouter à l'espace de travail :

extract__template

5) Utilisez ce template custom pour créer une variable Didomi user_id, en utilisant la variable précédente Didomi Cookie Decoded comme valeur du champ JSON Input, et la clé user_id pour le champ Path to Element :

didomi_uid

6) Enfin, utilisez cette variable Didomi user_id pour alimenter le paramètre user_id de la balise GA4 :

ga4_didomi

7) Publiez ! Vous pouvez voir le contenu des variables dans la prévisualisation :

variables_didomi

...Et la donnée qui part vers GA4 avec le User ID de Didomi 👏 :

didomi_ping_ga4

Cas Particulier

OneTrust

Cookie & Processing OneTrust

Le cookie OneTrust contient un ID utilisateur v4 dans une grande chaîne de caractères dont il faut l'extraire. Voici les étapes :

1) Récupérez le contenu du cookie OptanonConsent dans la variable UUID Cookie CMP, comme expliqué ci-dessus :

onetrust_cookie

2) Créez une variable OneTrust user_id, en utilisant le type Tableau d'expressions régulières, avec variable précédente UUID Cookie CMP comme valeur du champ Variable d'entrée, .*consentId=([^&]+).* en valeur du champ Format et $1 en valeur du champ Sortie :

onetrust_uid

3) Enfin, utilisez cette variable OneTrust user_id pour alimenter le paramètre user_id de la balise GA4 :

onetrust_ga4

5) Publiez ! Vous pouvez voir le contenu des variables dans la prévisualisation :

onetrust_variables

...Et la donnée qui part vers GA4 avec le User ID de OneTrust 👏 :

onetrust_ping_ga4

Cas Particulier

Sourcepoint

Cookie & Processing Sourcepoint

Le cookie Sourcepoint contient un ID utilisateur v4 avec parfois un suffix qu'il est préférable de retirer. Voici les étapes :

1) Récupérez le contenu du cookie consentUUID dans la variable UUID Cookie CMP, comme expliqué ci-dessus :

sourcepoint

2) Créez une variable Sourcepoint user_id, en utilisant le type Tableau d'expressions régulières, avec variable précédente UUID Cookie CMP comme valeur du champ Variable d'entrée, ^([^_]+).* en valeur du champ Format et $1 en valeur du champ Sortie :

sourcepoint_uid

3) Enfin, utilisez cette variable Sourcepoint user_id pour alimenter le paramètre user_id de la balise GA4 :

ga4_sourcepoint

5) Publiez ! Vous pouvez voir le contenu des variables dans la prévisualisation :

variables_sourcepoint

...Et la donnée qui part vers GA4 avec le User ID de Sourcepoint 👏 :

sourcepoint_ping_ga4

Avantages du server-side

En pratique : L'approche server-side permet de conserver la puissance des identifiants CMP tout en adoptant une méthode plus propre, invisible côté navigateur, et mieux intégrée dans les architectures modernes de tracking.

À noter que d'autres cookies déposés sans consentement peuvent tout à fait servir d'identifiants uniques... Par exemple les cookies __cf_bm de Cloudflare, utilisés conjointement avec la passerelle de balise Google.