Skip to Content
CNIL - Proxyfication

Proxyfication & minimisation des données

Minimiser la transmission des données personnelles

Ce guide vous montre comment configurer GTM côté serveur pour minimiser les données personnelles transmises à vos partenaires de mesure d’audience : suppression de l’adresse IP, des identifiants utilisateur, du referrer, de la page location et du user agent.

Cette technique, appelée proxyfication, consiste à faire transiter les données par votre propre serveur, qui les nettoie avant de les relayer.

Cette proxyfication a été initialement recommandée par la CNIL en juin 2022 pour mettre Google Analytics en conformité (voir la recommandation)  . Ce contexte réglementaire a depuis évolué, mais la proxyfication reste une bonne pratique de minimisation des données, applicable à GA4 comme à tout autre outil de mesure.

Nous passons en revue chaque type de donnée et comment le traiter dans GTM, côté serveur.

Adresse IP

La recommandation initiale de la CNIL est l’absence de transfert de l’adresse IP vers les serveurs de l’outil de mesure. Si une localisation est transmise vers les serveurs de l’outil de mesure, celle-ci doit être opérée par le serveur proxy et le niveau de précision doit permettre de s’assurer que cette information ne permet pas une réidentification de la personne (par exemple en utilisant un maillage géographique assurant d’un nombre minimum d’internautes par cellule) ;

Solution 1

Par défaut, le tag GA4 du sGTM définit automatiquement l’IP d’un utilisateur sur une adresse IP “modifiée”. La dernière partie de l’adresse IP est modifiée en ajoutant un 0, ce qui devrait généralement suffire à diminuer le niveau de précision et donc à ne pas permettre la ré-identification d’un internaute.

Solution 1 pour l'anonymisation de l'adresse IP

Solution 2

Supposons que la CNIL décide que cette première solution est insuffisante. Dans ce cas, un paramètre dans la configuration de la balise GA4 dans sGTM vous permet de ne pas envoyer votre adresse IP à Google (Redact visitor IP address). Ce paramètre est réglé sur false par défaut. En le mettant à true, aucune adresse IP ne sera envoyée à GA4.

Paramètre Redact visitor IP address
Résultat de l'activation du paramètre Redact visitor IP address

Identification utilisateur

La recommandation initiale de la CNIL est le remplacement de l’identifiant utilisateur par le serveur de proxification. Pour assurer une pseudonymisation effective, l’algorithme effectuant le remplacement devrait assurer un niveau de collision suffisant (c’est-à-dire une probabilité suffisante que deux identifiants différents donnent un résultat identique après hachage) et comporter une composante temporelle variable (ajouter à la donnée hachée une valeur qui évolue avec le temps pour que le résultat du hachage ne soit pas toujours le même pour un même identifiant) ;

Solution

Deux champs envoyés au GA4 permettent d’identifier l’utilisateur dans le temps :

  • x-ga-js_client_id : Le x-ga-js_client_id est la valeur du cid envoyé dans la requête du navigateur. Dans la requête envoyée par le serveur au GA4, ce champ est appelé jscid.
  • client_id : Le client_id est basé sur cette même valeur (cid) mais a été traité par le client GA4. Dans la requête qui est envoyée par le serveur au GA4, ce champ est appelé cid.
Données d'événement du js_client_id

Nous devrons pseudonymiser ces deux champs afin que Google ne puisse pas relier plusieurs sessions du même utilisateur.

Pour assurer cette unicité entre plusieurs sessions, nous allons créer un modèle de variable qui va hacher une valeur d’entrée (dans ce cas, notre client_id) en ajoutant une composante temporelle (partie d’un timestamp).

Pour ce faire, allez dans Templates > Variable Templates > New.

Dans la partie “Info”, nous nommerons le modèle (ici, il sera appelé “Pseudonymize Variable”).

Création d'un modèle de variable Pseudonymize Variable

Dans le deuxième onglet (Fields), nous ajouterons un champ permettant d’associer notre variable au fait d’être pseudonymisée.

Créer un nouveau champ

  • Cliquez sur ‘Add Field’ > Sélectionnez ‘Text Input’ > Renommez le champ en ‘input’ > Entrez ‘Value to pseudonymize’ comme nom d’affichage.

Ajouter un nouveau contrôle

  • Cliquez sur la roue dentée (paramètres) > Activez ‘Validation rules’ > Cliquez sur ‘Add rules’ > L’option ‘This value cannot be empty’ doit être sélectionnée par défaut.
Configuration des champs dans le modèle de variable

Le troisième onglet (Code) est le traitement appliqué à cette variable. Voici le code à copier et à coller dans le champ approprié.

Custom Variable code
const ts = require("getTimestampMillis"); const sha256Sync = require('sha256Sync'); const math = require("Math"); var t = ts(); var key = math.round(t / 10000000); return sha256Sync(data.input + '.' + key, {outputEncoding: 'hex'});
Code du modèle de variable Pseudonymize Variable

Notre variable sera hachée après concaténation avec une clé qui change toutes les 2 heures et 45 minutes. Cette modification nous permet de créer des client_ids identiques au sein d’une session mais différents d’une session à l’autre. Cela empêchera GA4 de suivre un utilisateur dans le temps.

Maintenant que nous avons créé ce modèle de variable, nous allons devoir mettre à jour notre client_id et x-ga-js_client_id avant de l’envoyer à Google.

Tout d’abord, nous créons une variable GA4 - Client ID, qui récupérera la valeur de client_id dans les données des événements.

Variables > New:

  • Variable name: GA4 - Client ID
  • Variable type: Event Data
  • Key path: client_id

Ensuite, nous utilisons notre modèle précédemment créé pour pseudonymiser cette variable.

Variables > New:

  • Variable name: GA4 - Client ID Pseudonymized
  • Variable type: Pseudonymized Variable
  • Key path: {{GA4 - Client ID}}

Notre client_id est maintenant pseudonymisé ; nous devons répéter ces deux dernières étapes pour le x-ga-js_client_id.

Variables > New:

  • Variable name: GA4 - JS Client ID
  • Variable type: Event Data
  • Key path: x-ga-js_client_id

Ensuite, nous utilisons notre modèle précédemment créé pour pseudonymiser cette variable.

Variables > New:

  • Variable name: GA4 - JS Client ID Pseudonymized
  • Variable type: Pseudonymized Variable
  • Key path: {{GA4 - JS Client ID}}

Une fois que ces deux variables sont pseudonymisées, elles doivent être attribuées dans la balise GA4 pour remplacer les variables existantes

  • Tags > Ouvrez le tag GA4 > Ouvrez la partie ‘Event Parameters’ > Ajoutez ces deux variables dans la partie ‘Parameters to Add / Edit’.
Ajouter les variables CID et JSCID dans la balise GA4

Nos cid et jscid sont maintenant pseudonymisés.

Configuration des CID et JSCID dans la balise GA4

Page referrer

La recommandation initiale de la CNIL est la suppression de l’information de site référent (ou « referer ») externe au site.

Solution

Le champ page_referrer doit être conservé pour les liens internes mais supprimé pour les liens externes. En pratique, si le domaine du page_referrer correspond à celui du site, on conserve ce champ. Sinon, on le vide.

Nous commençons par créer une variable qui contient notre page_referrer.

Variables > New:

  • Variable name: GA4 - Page Referrer
  • Variable type: Event Data
  • Key Path: page_referrer

Nous créons ensuite une deuxième variable qui nous permettra de récupérer uniquement le domaine du page_referrer. Pour ce faire, nous allons utiliser le modèle de variable ‘URL Parser’ de Simo Ahava.

Variables > New:

  • Variable name: GA4 - Page Referrer Domain
  • Variable type: URL Parser (via Community Template Gallery)
  • URL Source: {{GA4 - Page Referrer}} (créé précédemment)
  • Component Type: Host Name
  • Strip ‘www’: true
Création de la variable GA4 - Page Referrer Domain

Et la dernière variable à créer est la page_referrer que nous enverrons à Google, qui sera soit vide soit remplie en fonction de l’origine.

Variables > New:

  • Variable name: GA4 - Page Referrer Pseudonymized
  • Variable type: Lookup Table
  • Input Variable: {{GA4 - Page Referrer Domain}} (notre domaine précédemment créé)
  • Output Variable: (liste de nos domaines autorisés)
  • input: example1.com / output: {{GA4 - Page Referrer}}
  • input: example2.com / output: {{GA4 - Page Referrer}}
  • Set default value: true (laisser le default vide)
Création de la variable GA4 - Page Referrer Pseudonymized

Nous devons utiliser cette dernière variable dans la configuration du tag GA4 en ajoutant un champ page_referrer dans la liste des champs à ajouter/modifier et en lui attribuant cette valeur.

Paramètre page_referrer dans la balise GA4

Page location

La recommandation initiale de la CNIL est La suppression de tout paramètre contenu dans les URL collectées (par exemple les UTM, mais aussi les paramètres d’URL permettant le routage interne du site) ;

Solution

L’idée est de supprimer les paramètres dans l’URL envoyée dans le champ page_location.

Une URL avec des paramètres ressemble à ceci : https://www.addingwell.com/?gclid=Cj0KCQjwio6XBhCMARIsAC0u9aGc7gQZfDc8YvuTRIMgrR6bxatLaoc6t6qriAZm0ozMsaam6UjW

Il devrait, après le traitement appliqué, ressembler à ceci : https://www.addingwell.com/

Pour pouvoir supprimer les paramètres de cette URL, nous allons créer un modèle qui renvoie cette URL nettoyée.

Pour ce faire, allez dans Templates > Variable Templates > New

Dans la partie “Info”, nous nommerons le modèle (ici, il s’agit de “Clean Page Location”).

Création d'un modèle Clean Page Location

Le troisième onglet (Code) est le code à copier et à coller dans le champ approprié.

Custom Variable code
const getEventData = require('getEventData'); const parseUrl = require('parseUrl'); const parsedUrl = parseUrl(getEventData('page_location')); if (!parsedUrl) return; return parsedUrl.protocol + '//' + parsedUrl.hostname + parsedUrl.pathname;
Onglet Code du modèle Clean Page Location

Dans le quatrième onglet (Permissions), ouvrez l’accordéon “Reads event data” et sélectionnez “Any”.

Onglet Permissions du modèle Clean Page Location

Nous pouvons maintenant enregistrer et fermer le template.

Maintenant que nous avons créé ce modèle de variable, nous allons devoir créer une variable qui contient cette valeur. Cette variable remplacera notre page_location originale.

Variables > New:

  • Variable name: GA4 - Page Location Cleaned
  • Variable type: Clean Page Location (Template name previously created)

Une fois cette variable créée, elle doit être assignée dans la balise GA4 pour remplacer la page_location existante.

  • Tags > Ouvrez le tag GA4 > Ouvrez la partie ‘Event Parameters’ > Ajoutez cette variable dans la partie ‘Parameters to Add / Edit’.
Paramètre Clean Page Location dans la balise GA4

Notre page de localisation est désormais anonymisée et ne contient plus aucune information personnelle.

User Agent

La recommandation de la CNIL est le retraitement des informations pouvant participer à la génération d’une empreinte (ou fingerprint), tels que les « user-agent », pour supprimer les configurations les plus rares pouvant mener à une réidentification ;

Solution

La CNIL parle ici de retraiter des informations telles que le user_agent ou la screen_resolution. De mon point de vue, il ne sert à rien d’envoyer ces informations si Google Analytics ne peut pas les comprendre.

Nous supprimerons ces champs de la demande envoyée au GA4.

Pour le user_agent, dans la configuration du tag, nous ajouterons ce champ à la liste des paramètres à exclure (‘Event Parameters’ > ‘Parameters to exclude’).

Exclure le champ user_agent de la requête GA4

Nous pourrions faire la même chose avec le champ screen_resolution, mais en ajoutant ce champ à la liste des paramètres à exclure, ce champ reste mystérieusement dans la requête. Nous allons l’ajouter aux paramètres à ajouter/modifier mais laisser sa valeur vide.

Champ screen_resolution avec une valeur vide dans la requête GA4

Identifiants cross-site ou deterministe

La recommandation initiale de la CNIL est l’absence de toute collecte d’identifiant entre sites (cross-site) ou déterministe (CRM, unique ID ) ;

La suppression de toute autre donnée pouvant mener à une réidentification.

Solution

Ces deux recommandations ne concernent pas une implémentation basique de GA4 mais nous rappellent que nous devons également supprimer tous les champs qui pourraient permettre la ré-identification d’un utilisateur. Nous parlons de paramètres tels que user_id, adresse email, numéro de téléphone, etc…

Conclusion

Une fois ces modifications appliquées, nous pouvons voir la requête envoyée à Google dans l’aperçu côté serveur de GTM. Cette requête ne devrait plus contenir d’informations personnelles ou d’identifiants permettant d’identifier un utilisateur.

Si tel était le cas, nous pourrions supprimer, anonymiser ou pseudonymiser définitivement ces champs dans la configuration du tag GA4 comme nous venons de le faire.

Comment voir les requêtes sortantes de sGTM vers GA4 :

Preview > Sélectionnez l’événement à tester dans la liste de gauche > Request (1er onglet) > Outgoing HTTP Requests from Server > Sélectionnez la requête qui nous intéresse > toutes les informations envoyées à GA4 se trouvent sur cette page.

Exemple de requête sortante de sGTM vers GA4 sans données personnelles