Google Analytics : les recommandations de la CNIL [JavaScript]

La loi a changé concernant les cookies déposés chez les utilisateurs. Pour cela la CNIL a créé une page qui explique ce qu’il en est. Ils proposent même un bout de code pour le opt-in et le opt-out, que j’ai légèrement modifié :

// Remplacez la valeur UA-XXXXXX-Y par l'identifiant analytics de votre site.
var gaProperty = 'UA-XXXXXX-Y';
// Désactive le tracking si le cookie d'Opt-out existe déjà
var disableStr = 'ga-disable-' + gaProperty;
if (document.cookie.indexOf('hasConsent=false') > -1) window[disableStr] = true;
//Cette fonction retourne la date d.expiration du cookie de consentement 
function getCookieExpireDate() { 
  var cookieTimeout = 34214400000; // Le nombre de millisecondes que font 13 mois 
  var date = new Date();
  date.setTime(date.getTime()+cookieTimeout);
  var expires = "; expires="+date.toGMTString();
  return expires;
}
// Cette fonction est appelée pour afficher la demande de consentement
function askConsent(){
  var bodytag = document.getElementsByTagName('body')[0];
  var div = document.createElement('div');
  div.setAttribute('id','cookie-banner');
  div.style.width="50%";
  div.style.position="absolute";
  div.style.left="20%";
  // Le code HTML de la demande de consentement
  // Vous pouvez modifier le contenu ainsi que le style
  div.innerHTML =  '<div style="background-color:transparent;color:#fff">Ce site utilise Google Analytics.\
  En continuant à naviguer, vous nous autorisez à déposer des cookies à des fins de \
  mesure d\'audience. Vous pouvez vous <a href="#optout" onclick="gaOptout()">opposer à ce dépôt</a> ou <a href="#optin" onclick="gaOptIn(); document.getElementById(\'cookie-banner\').style.display=\'none\'">ignorer ce message</a>.</div>';          
  bodytag.insertBefore(div,bodytag.firstChild); // Ajoute la bannière juste au début de la page 
  document.getElementsByTagName('body')[0].className+=' cookiebanner';              
}      
// Retourne la chaine de caractère correspondant à nom=valeur
function getCookie(NomDuCookie)  {
  if (document.cookie.length > 0) {        
    var begin = document.cookie.indexOf(NomDuCookie+"=");
    if (begin != -1)  {
      begin += NomDuCookie.length+1;
      var end = document.cookie.indexOf(";", begin);
      if (end == -1) end = document.cookie.length;
      return unescape(document.cookie.substring(begin, end)); 
    }
  }
  return null;
}
// Fonction d'effacement des cookies   
function delCookie(name)   {
  var path = ";path=" + "/";
  var domain = ";domain=" + "."+document.location.hostname;
  var expiration = "Thu, 01-Jan-1970 00:00:01 GMT";       
  document.cookie = name + "=" + path + domain + ";expires=" + expiration;
}
// Efface tous les types de cookies utilisés par Google Analytics    
function deleteAnalyticsCookies() {
  var cookieNames = ["__utma","__utmb","__utmc","__utmz","_ga"]
  for (var i=0; i<cookieNames.length; i++) delCookie(cookieNames[i])
}
// La fonction d'opt-out   
function gaOptout() {
  document.cookie = disableStr + '=true;'+ getCookieExpireDate() +' ; path=/';       
  document.cookie = 'hasConsent=false;'+ getCookieExpireDate() +' ; path=/';
  var div = document.getElementById('cookie-banner');
  // Ci dessous le code de la bannière affichée une fois que l'utilisateur s'est opposé au dépôt
  // Vous pouvez modifier le contenu et le style
  if ( div!= null ) div.innerHTML = '<div style="background-color:#ffffff"> Vous vous êtes opposé \
  au dépôt de cookies de mesures d\'audience dans votre navigateur.</div>'
  window[disableStr] = true;
  deleteAnalyticsCookies();
}
function gaOptIn() {
  document.cookie = 'hasConsent=true; '+ getCookieExpireDate() +' ; path=/';
}
//Ce bout de code vérifie que le consentement n'a pas déjà été obtenu avant d'afficher la bannière
var consentCookie = getCookie('hasConsent');
//L'utilisateur n'a pas encore de cookie de consentement
if (!consentCookie) askConsent()
// Google Analytics
var _gaq = _gaq || [];
_gaq.push(['_setAccount', gaProperty]);
_gaq.push(['_trackPageview']);

(function() {
  var ga = document.createElement('script');
  ga.src = 'http://www.google-analytics.com/ga.js';
  ga.setAttribute('async', 'true');
  document.documentElement.firstChild.appendChild(ga);
})();

2 avis sur “Google Analytics : les recommandations de la CNIL [JavaScript]

  1. Renaud

    Bonjour,
    merci pour ce code,
    quelle est sa différence par rapport à celui de Google ?
    Je vois qu’on efface plus les cookies dans certains cas mais j’ai du mal à suivre…
    merci d’avance

  2. Aymeric Auteur de la publication

    Renaud> je ne sais pas ce que tu appelles « celui de Google » ?? En tout cas, le code de la CNIL proposet aux internautes d’accepter ou de refuser la présence de cookies, à la différence de la plupart des sites qui aujourd’hui ne font que faire apparaitre une bannière indiquant qu’il y a des cookies sur le site (et ne donnent pas de moyen de faire de opt-out et donc de refuser le tracking, sauf en arrêtant de surfer sur le site en question).

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*