Bien que la CNIL ait rendu un avis favorable sur la mise en place du tracker Matomo sans demande de consentement préalable, elle l'a fait en donnant des contraintes fortes sur sa configuration. Les conditions obligatoires pour être exempté de consentement sont :
  • Désactiver les exports de données
  • Permettre aux visiteurs de refuser d'être suivis (Opt-out)
  • S'assurer que les adresses IP sont anonymes
  • S'assurer que les cookies tiers et le cross-domain ne sont pas utilisés
  • S'assurer que la mesure du "User ID" n'est pas utilisée
  • S'assurer que la mesure du e-commerce n'est pas utilisée
  • S'assurer que les cartes de chaleurs et enregistrements de session sont désactivés
  • Vérifier qu'il n'y a pas de collecte de données personnelles (dimension et événements personnalisés)
Si une seule de ces conditions n'est pas satisfaite, il devient alors obligatoire de demander le consentement de l'internaute. Typiquement, pour les sites e-commerce, le simple fait de remonter les commandes dans Matomo oblige le commerçant à réactiver les mécanismes de gestion des cookies et du consentement.

Si vous êtes dans le cas où une ou plusieurs de ces conditions sont rédhibitoires, pas de panique. Ce guide contient toutes les explications pour configurer et activer la demande de consentement pour Matomo via le service tarteaucitron.

Déjà utilisé par bon nombre de kiubistes sur leurs sites, gratuit, très complet et extrêmement simple d'utilisation, tarteaucitron (abrégé en TAC dans la suite de cet article) prend en charge nativement la gestion du tracker Matomo et de ses cookies. Il fonctionne avec le service Matomo Cloud mais aussi avec les dernières versions de Matomo en mode auto-hébergé (On-Premise).

Cependant, cette prise en charge comporte deux défauts :
  • Les URLs des trackers ne sont pas tout à fait à jour
  • TAC gère Matomo en opt-out par défaut
Nous allons donc utiliser TAC et créer un gestionnaire sur-mesure pour corriger ces défauts.

Pour installer manuellement TAC sur un site, il suffit de télécharger la dernière version sur le site officiel et de le déployer dans son site ou alternativement d'utiliser une version mise à disposition par un CDN. On utilisera ici celui de Cloudflare.

On ajoute alors dans le <head> des pages de son site la librairie TAC :

<script src="https://cdnjs.cloudflare.com/ajax/libs/tarteaucitronjs/1.9.6/tarteaucitron.js" integrity="sha512-gXl6bTROZxxymUcoVPuH93os9XPq+SrORZCtUiYDNoaxrrJhDX9o0b/kl3a+MeQJxeYqUBejvkCi4gziE6xrqQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

Vient ensuite la déclaration d'un gestionnaire sur-mesure matomoconsent pour TAC, à ajouter avant la balise </body> :

<script>

tarteaucitron.services.matomoconsent = {
	"key": "matomoconsent",
	"type": "analytic",
	"name": "Matomo (privacy by design)",
	"uri": "https://matomo.org/faq/general/faq_146/",
	"needConsent": true,
	"cookies": ['_pk_ref', '_pk_cvar', '_pk_id', '_pk_ses', '_pk_hsr', 'mtm_consent', 'matomo_ignore', 'matomo_sessid'],
	"js": function () {
		"use strict";
		if (tarteaucitron.user.matomoId === undefined || tarteaucitron.user.matomoHost === undefined) {
			return;
		}

		window._paq = window._paq || [];
		window._paq.push(["setSiteId", tarteaucitron.user.matomoId]);
		window._paq.push(["setTrackerUrl", tarteaucitron.user.matomoHost + "matomo.php"]);
		window._paq.push(["setDoNotTrack", 1]);
		window._paq.push(["trackPageView"]);
		window._paq.push(["setIgnoreClasses", ["no-tracking", "colorbox"]]);
		window._paq.push(["enableLinkTracking"]);
		window._paq.push([function () {
			var self = this;
			function getOriginalVisitorCookieTimeout() {
				var now = new Date(),
					nowTs = Math.round(now.getTime() / 1000),
					visitorInfo = self.getVisitorInfo();
				var createTs = parseInt(visitorInfo[2]);
				var cookieTimeout = 33696000; // 13 mois en secondes
				var originalTimeout = createTs + cookieTimeout - nowTs;
				return originalTimeout;
			}
			this.setVisitorCookieTimeout(getOriginalVisitorCookieTimeout());
		}]);

		// Handle specific cdn matomo cloud url
		var isCloud = tarteaucitron.user.matomoHost.match(/^https:\/\/([^\.]+\.matomo\.cloud\/)/)
		var trackerDomain = isCloud ? 'https://cdn.matomo.cloud/' + isCloud[1] : tarteaucitron.user.matomoHost;
		tarteaucitron.addScript(trackerDomain + 'matomo.js', '', '', true, 'defer', true);

		// waiting for Matomo to be ready to check first party cookies
		var interval = setInterval(function () {
			if (typeof Matomo === 'undefined') return;

			clearInterval(interval);

			// make Matomo cookie accessible by getting tracker
			Matomo.getTracker();

			// looping through cookies
			var theCookies = document.cookie.split(';');
			for (var i = 1; i <= theCookies.length; i++) {
				var cookie = theCookies[i - 1].split('=');
				var cookieName = cookie[0].trim();

				// if cookie starts like a matomo one, register it
				if (cookieName.indexOf('_pk_') === 0) {
					tarteaucitron.services.matomoconsent.cookies.push(cookieName);
				}
			}
		}, 100);
	}
};

À noter que ce gestionnaire active la fonction "Do Not Track" (cf ["setDoNotTrack", 1]) du tracker Matomo pour un meilleur respect de la vie privée des internautes.

Et juste après, l'initialisation classique de TAC à personnaliser selon vos besoins :

tarteaucitron.init({
"privacyUrl": "/donnees-personnelles.html", /* Privacy policy url */
"cookieName": "tarteaucitron" /* Cookie name */
});
</script>

Il est très important de laisser la valeur de cookieName à tarteaucitron.

Il ne reste plus qu'à activer le module Matomo dans la console d'administration de votre site en précisant bien que la gestion du consentement se faire via TAC et Kiubi se charge du reste.

Le module va exécuter automatique le gestionnaire matomoconsent dans toutes les pages du site, ce qui va permettre le tracking des visites et des commandes uniquement des internautes ayant donné leurs consentements. Il ne reste plus qu'à serveiller l'arrivée des données dans Matomo !