En finir avec l’acceptation des cookies RGPD

Vous en avez marre des panneaux demandant l’acceptation des cookies ?
Eh bien, les visiteurs de votre site aussi !
surtout sur mobiles, bien souvent cela empêche toute navigation avant d’avoir cliqué.

Vous allez me dire que pas le choix, c’est obligatoire ? mais non, pas forcément !

Le respect de la RGPD

Tout d’abord, même si votre site affiche cet avertissement, la plupart du temps votre site ne respecte pas pour autant la RGPD, car les solutions (ex. extension WordPress) les plus utilisées n’empêchent pas d’écrire les cookies même avant validation de la demande d’acceptation ou même début de la navigation.

Ensuite, de quels cookies parle-t-on ? la plupart du temps, il s’agit des cookies de mesure d’audience et en particulier celui utilisé par Google Analytics. Si vous n’avez que des cookies de mesure d’audience, il sera possible de se passer du recueil de consentement. Bien entendu, vous pouvez avoir d’autres types de cookies si vous utilisez d’autres services, par exemple le pixel Facebook et dans ce cas-là, il ne sera pas possible de se passer du recueil de consentement.
A noter que les cookies de session (dont la durée de vie est la visite du site) ne sont pas soumis à demande de consentement.

Comment ne pas avoir à demander le consentement

Voyons maintenant un peu ce que nous dit la CNIL. En ce qui concerne les cookies de mesure d’audience, il est possible d’être dispensé de recueil consentement sous certaines conditions (cf. : https://www.cnil.fr/fr/cookies-traceurs-que-dit-la-loi) :

  • « L’éditeur du site doit délivrer une information claire et complète » : à priori, un lien vers une page Utilisation des cookies en pied de page, pointant vers une page donnant des informations doit suffire.
  • « Un mécanisme d’opposition doit être accessible simplement » : c’est à priori point le plus complexe à mettre en oeuvre. Le paradoxe avec l’opposition du visiteur à l’utilisation des cookies de mesure d’audience est qu’il faut un cookie pour pouvoir le mettre en oeuvre ! Mais il s’agit là d’un cookie de session qui n’est pas soumis à approbation. Je vous propose une solution assez simple à mettre en oeuvre dans la majorité des cas, notamment sous WordPress. Voir plus bas.
  • « Les données collectées ne doivent pas être recoupées avec d’autres traitements » : s’il s’agit de Google Analytics utilisé seul, cela ne pose donc pas de problème. Par contre, si vous utilisez Google AdWords, cela va être bloquant, car supprimer le lien AdWords / Analytics ne permet plus l’optimisation des campagnes Google Ads :-(
  • « Le cookie déposé doit servir uniquement à la production de statistiques anonymes » : c’est le cas de Google Analytics.
  • « Le cookie ne doit pas permettre de suivre la navigation de l’internaute sur d’autres sites » : sauf paramétrages spécifiques, c’est le cas de Google Analytics.
  • « L’adresse IP permettant de géolocaliser l’internaute ne doit pas être plus précise que l’échelle de la ville. Concrètement les deux derniers octets de l’adresse IP doivent être supprimés » : le paramètre Google Analytics anonymizeIp (analytics.js) ou anonymize_ip (gtag.js) permet d’anonymiser les IP en ne collectant pas les 4 derniers chiffres (voir https://developers.google.com/analytics/devguides/collection/analyticsjs/ip-anonymization). Cela nécessite donc une petite modification du code Analytics chargé dans les pages. Voir en bas de page.
  • « Les cookies permettant la traçabilité des internautes et les adresses IP ne doivent pas être conservés au-delà de 13 mois à compter de la première visite » : par défaut, les cookies Google Analytics ont une durée de vie de 2 ans. Il faut donc limiter leur durée de vie. C’est possible grâce au paramètre cookieExpires (voir https://developers.google.com/analytics/devguides/collection/analyticsjs/ip-anonymizationhttps://developers.google.com/analytics/devguides/collection/analyticsjs/cookies-user-id?hl=fr) ou au paramètre cookie_expires (pour GTAG, voir https://developers.google.com/analytics/devguides/collection/gtagjs/cookies-user-id?hl=fr). Il faut donc appliquer une petite modification au code Analytics exécuté dans les pages.
  • « Les données de fréquentation brutes associant un identifiant ne doivent pas non plus être conservées plus de 13 mois » : Google Analytics permet de modifier la durée de conservation des données depuis Administration > Propriété > Informations de suivi > Conservation des données sur les utilisateurs et les événements (voir https://support.google.com/analytics/answer/7667196?hl=fr). Mais là on dirait qu’il se moque de nous car la durée minimale est 14 mois !
    Néanmoins, comme les cookies ont une durée de vie qui n’excède pas 13 mois (voir ci-dessus), on peut considérer que les données brutes conservées au-delà de 13 mois ne sont pas associées à un identifiant (l’identifiant quelles contiennent n’étant plus lié à aucun utilisateur identifiable).

Au premier coup d’oeil, cela semble beaucoup et compliqué. Mais la plupart des points sont faciles et rapide à régler. Et même si au total, vous perdez un peu de temps avec ça, on peut être sûr que l’amélioration du confort de navigation sur votre site en vaut la peine.

Exemples de codes Analytics modifiés

La valeur du délai d’expiration des cookies utilisée est 13 mois de 30 jours convertis en secondes.

Analytics.js

<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-XXXXXX-X', {'cookieExpires': 33696000});
ga('set', 'anonymizeIp', true);
ga('send', 'pageview');
</script>

gtag.js

<script async src="https://www.googletagmanager.com/gtag/js?id=UA-15905234-1"></script>
<script>
window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-XXXXXX-X', {'anonymize_ip': true, 'cookie_expires': 33696000});
</script>

Google Tag Manager

Si vous utilisez GTM, vous devez aller dans les paramètres avancés de la balise Universal Analytics.
Puis dans Métadonnées supplémentaires associées à la balise. Vous pouvez alors ajouter les 2 paramètres en cliquant sur le bouton Ajouter des métadonnées :

Mécanisme d’opposition

Concernant l’obligation de donner accès à un mécanisme d’opposition dans le cas où on ne demande pas préalablement l’approbation, voici la solution que je vous propose.

Dans les CMS et notamment WordPress, il va sans doute être nécessaire de modifier la façon dont vous insérez le code Analytics dans le site, car si vous utilisez une extension ou si c’est par l’intermédiaire des paramètres du thème que vous les insérez, vous n’allez pas pouvoir faire la modification nécessaire.

Pour WordPress, je vous propose donc d’insérer directement votre code Analytics dans le fichier header.php, ainsi, son affichage pourra être soumis à la valeur d’une variable PHP de session :

session_start();
if ($_GET['opposition']) {
	$_SESSION['opposition']=true;
}
if (!$_SESSION['opposition']) {
	echo "<script>
	(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
	(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
	m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
	})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
	ga('create', 'UA-XXXXXX-X', {'cookieExpires': 33696000});
	ga('set', 'anonymizeIp', true);
	ga('send', 'pageview');
	</script>";
}

L’initialisation de la variable qui entraîne le non-affichage du code Analytics se fera donc à l’aide d’un lien sur lequel les visiteurs pourront cliquer ; l’emplacement idéal étant la page d’information sur les cookies mentionnée plus haut. On peut faire ce lien vers la page en cours, en passant un paramètre dans l’URL qui sera détecté par le code PHP. Par exemple : /infosCookies/?opposition=1

Comme vous le voyez dans le code PHP ci-dessus, la détection de la variable d’URL opposition est enregistrée dans une variable de session.