Magazine Focus Emploi

Mettre Google Analytics en conformité avec le RGPD, sans bandeau de cookie

Publié le 15 avril 2021 par Abouchard

De quoi on parle ?

Google Analytics est sûrement l’outil de statistiques web le plus utilisé. Son premier avantage est d’être gratuit, mais il faut dire qu’il propose énormément de fonctionnalités, avec une ergonomie plutôt bonne une fois qu’on s’est repéré dans les options.
Pour fonctionner, Google Analytics a besoin de poser un cookie sur le navigateur des internautes, afin de pouvoir les suivre tout au long de leurs visites (sans cela, chaque page vue serait perçue comme étant la première d’une nouvelle visite). Au passage, Google récolte un certain nombre d’infos ; certaines sont accessibles (la taille de l’écran, la langue du navigateur…), d’autres comme l’adresse IP des internautes sont utilisées par Google en interne.

Le RGPD a été promulgué en 2016, et si la CNIL a fait preuve de tolérance dans l’application de certaines contraintes, il est temps désormais de se mettre en conformité sous peine de sanctions.

Ce dont je parle, ce n’est pas seulement l’obligation de prévenir les internautes qu’on pose des cookies sur leur navigateur. En effet, pendant très longtemps la majorité des sites se contentaient de mettre un bandeau alertant les internautes (avec un simple bouton « OK » pour cacher le panneau). Mais cela n’était déjà pas suffisant. Depuis 5 ans, en plus d’informer il faut aussi donner la possibilité de refuser l’ajout de cookies.
On peut regrouper les cookies en plusieurs groupes, permettant d’accepter ou de refuser tous les cookies de statistiques d’un côté, tous les cookies publicitaires de l’autre, etc.

Est-ce qu’on peut simplifier ?

Mais vous avez peut-être un site sur lequel vous ne diffusez pas de publicités, et pour lequel vous n’avez besoin que d’un minimum de statistiques (nombre de visiteurs, nombre de pages vues, etc.). Vous voulez utiliser Google Analytics, mais vous n’avez pas envie de mettre un bandeau de cookie.
Il faut voir aussi que si votre solution de statistiques est configurée pour déposer des cookies, et que vous laissez la possibilité à l’utilisateur de le refuser, une partie (potentiellement importante) de votre trafic ne sera plus comptabilisée. Donc ce serait doublement avantageux de trouver une solution qui n’impose pas de pollution visuelle (le bandeau d’information sur les cookies), et qui ne risque pas de fausser vos statistiques.

Il existe quelques alternatives qui mettent en avant le respect de la vie privée des internautes, comme Matomo ou Analytics Suite Delta d’AT Internet (si configuré comme le préconise la CNIL). Mais ce sont des solutions payantes (avec la possibilité de l’installer gratuitement sur ses propres serveurs dans le cas de Matomo, mais ça représente aussi des coûts).

Ça tombe bien, il est possible d’utiliser Google Analytics sans mettre de bandeau cookies, tout en étant en conformité avec le RGPD. Pour cela, il faut appliquer deux modifications dans l’appel à Google Analytics :

  • demander à ce qu’aucun cookie ne soit déposé sur le navigateur ;
  • anonymiser les requêtes pour que Google ne stocke pas les adresses IP.

Ensuite, on verra une astuce pour que les différentes pages vues par un même internaute soient comptabilisées correctement.

Modification de l’appel Javacript

Je vais partir du principe que vous utilisez la dernière version de Google Analytics, dont l’appel utilise Google Tag Manager.

Vous devez donc avoir dans votre code HTML quelque chose qui ressemble à ça :

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

On va donc modifier ce code. Tout se passe dans le dernier appel de fonction, à laquelle on va passer des paramètres supplémentaires :

<script async src="https://www.googletagmanager.com/gtag/js?id=VOTRE_IDENTIFIANT_GA"></script>
<script>
    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag('js', new Date());
    gtag('config', 'VOTRE_IDENTIFIANT_GA', {
        client_storage: 'none',
        anonymize_ip: true
    });
</script>

La clé client_storage sert à indiquer de ne rien enregistrer sur le navigateur (grâce à la valeur « none« ), et donc de ne pas déposer de cookie. La clé anonymize_ip fait en sorte que Google ne stocke pas l’adresse IP exacte de l’internaute.

Et voilà, pas besoin de plus pour être en conformité avec le RGPD. Et si vous ne déposez pas de cookies par ailleurs (soit par vous-même, soit par de la publicité ou autre appels à des librairies externes), vous n’avez pas besoin de mettre de bandeau cookie. Merveilleux, non ?

Et le suivi des visites ?

Il reste un problème avec le code ci-dessus : si un internaute visite plusieurs pages, au gré de ses clics sur les liens internes du site, vous ne saurez pas qu’il s’agit de la même personne. Chaque page sera considérée comme faisant partie d’une nouvelle visite ; vous aurez un nombre de visiteurs, un nombre de visites et un nombre de pages vues qui seront tous égaux.
C’est logique ; sans cookie sur le navigateur, il n’est pas possible de savoir que deux accès sont effectués depuis le même navigateur.

Mais ne serait-il pas possible d’utiliser un autre moyen pour identifier un visiteur ?

L’idée va être de générer un identifiant côté serveur, qui sera le même pour toutes les pages consultées par un même visiteur. On fournira cet identifiant à Google Analytics, qui pourra ainsi rapprocher les différentes connexions pour les regrouper au sein de la même “visite”.

La question est maintenant de savoir comment générer cet identifiant, sans déposer de cookie ni enregistrer des données personnelles en base de données. Ce qu’on peut faire, c’est utiliser l’adresse IP du visiteur. C’est une solution imparfaite, car plusieurs personnes peuvent visiter le site avec la même adresse IP ; mais c’est une approximation dont on se satisfera faute de mieux.

On ne va évidemment pas utiliser l’adresse IP telle quelle, car encore une fois c’est une donnée personnelle qu’il ne faut surtout pas transmettre en clair à Google. Par contre, il est possible de l’utiliser dans un calcul, dont le résultat sera toujours le même pour une adresse IP donnée.

On va donc calculer un hash MD5 à partir de l’adresse IP, à laquelle on aura concaténé l’année courante et le numéro de semaine courante. L’identifiant généré changera donc toutes les semaines, ce qui est suffisant pour suivre les pages vues pendant une visite.
Si on pinaille, on pourra remarquer qu’une personne qui visite le site du dimanche soir 23h30 jusqu’au lundi matin 00h30 sera vue comme deux visiteurs séparés. Si c’est vraiment problématique, on peut remplacer le numéro de la semaine par le numéro du mois ; le phénomène existera toujours, mais 12 fois par an au lieu de 52.

Voici un exemple de code serveur en PHP pour faire ce calcul :

$gaClientId = md5($_SERVER[‘REMOTE_ADDR’] . date(‘YW’));

Il faut ensuite utiliser cette variable dans le code Javascript. Voici un exemple d’utilisation en pur PHP (a priori vous utilisez sûrement un système de templates, mais c’est facilement adaptable) :

<script async src="https://www.googletagmanager.com/gtag/js?id=VOTRE_IDENTIFIANT_GA"></script>
<script>
    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag('js', new Date());
    gtag('config', 'VOTRE_IDENTIFIANT_GA', {
        client_storage: 'none',
        anonymize_ip: true,
        client_id: '<?=$gaClientId?>'
    });
</script>

Concernant la publicité

Le cas de la publicité en ligne est un peu particulier, notamment parce que Google crée des passerelles entre ses différents outils. Dans la console de Google Analytics, il est possible d’activer les fonctionnalités de remarketing. Donc pour être certain de ne pas commettre d’impair, vous pouvez vouloir les désactiver dans le code Javascript.

Pour cela, on va faire un appel de fonction supplémentaire :

<script async src="https://www.googletagmanager.com/gtag/js?id=VOTRE_IDENTIFIANT_GA"></script>
<script>
    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag('js', new Date());
    gtag('set', 'allow_google_signals', false);
    gtag('config', 'VOTRE_IDENTIFIANT_GA', {
        client_storage: 'none',
        anonymize_ip: true,
        client_id: '<?=$gaClientId?>'
    });
</script>

Avec cet appel supplémentaire, tous les appels publicitaires seront désactivés.

Événements Javascript

Google Analytics permet aussi de pister les clics qui sont faits. Cela peut être utile si vous chargez des pages en Javascript.

Dans ce cas, il faudra appeler la fonction gtag() en lui passant un paramètre supplémentaire.
Mais, pour commencer, on va reprendre le code précédent, en créant des variables globales qui faciliteront l’accès à l’identifiant Google Analytics et à l’identifiant client :

<script async src="https://www.googletagmanager.com/gtag/js?id=VOTRE_IDENTIFIANT_GA"></script>
<script>
    window._googleAnalyticsId = "VOTRE_IDENTIFIANT_GA";
    window._googleAnalyticsClientId = "<?=$gaClientId?>";

    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag('js', new Date());
    gtag('set', 'allow_google_signals', false);
    gtag('config', window._googleAnalyticsId, {
        client_storage: 'none',
        anonymize_ip: true,
        client_id: window._googleAnalyticsClientId
    });
</script>

Ensuite, à chaque fois qu’une page va être chargée en Javascript, on appellera le code suivant :

gtag('config', window._googleAnalyticsId, {
    page_path: "/URL/de/la/page",
    client_storage: 'none',
    anonymize_ip: true,
    client_id: window._googleAnalyticsClientId
});

La clé page_path doit contenir l’URL que vous voulez voir apparaître dans Google Analytics.


Retour à La Une de Logo Paperblog

A propos de l’auteur


Abouchard 392 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte