Google Analytics et Google Adwords sans cookies

22 janvier 2023

Les cookies ont pour fonction de d’identifier un utilisateur lorsqu’il parcourt votre site. Lorsque plusieurs pages sont parcourues par un même utilisateur la méthode utilisée pour savoir qu’il s’agit d’une seule et même personne est le dépôt de cookie dans son navigateur.

Le RGPD

Avec le RGPD cette méthode est devenue moins intéressante car cela implique d’afficher un message de consentement qui peut rendre l’expérience utilisateur moins agréable, voire qui peut faire fuir les visiteurs qui ne souhaitent pas donner leur consentement.

Autre inconvénient du RGPD : la possibilité pour l’utilisateur de refuser le dépôt de cookies, possibilité qui doit en principe (au vu de la loi sur le RGPD) être proposée à l’utilisateur en à peine un clic. Dans ce cas le visiteur n’est pris en compte ni par Google Analytics ni par Google Adwords.

Les conversions Google Adwords et les cookies

Il y a aussi les cookies utilisés par Google Adwords, qui s’activent parce que vous mettez, comme pour analytics, une balise dans l’en tête de votre site. Cela fonctionne de la même manière que la balise Google Analytics, cela permet de « pister » l’utilisateur et de savoir que telle personne qui a cliqué sur telle annonce après avoir tapé tel mot clé aura tel comportement ensuite sur le site. Grâce à ses informations l’algorithme saura que certaines annonces ou certains mots clés enregistrent d’avantage de conversions et fera ensuite apparaitre ces annonces plus souvent au détriment des annonces n’ayant abouti sur aucune conversion.

Identifier un utilisateur sans cookies ?

Maintenant est il possible de permettre à Google Analytics et Google Adwords d’identifier un utilisateur à travers les différentes pages de votre site sans que des cookies soient déposés dans son navigateur ?

Théoriquement on devrait pouvoir identifier l’utilisateur grâce à son adresse IP ainsi que son navigateur, ces informations étant accessibles à chaque fois qu’une page est visitée.

Les cas où l’adresse IP ne suffit pas

Il existe pourtant certains cas de figure pour lesquels l’adresse IP seule ne permettrait pas d’identifier un utilisateur :

Si plusieurs utilisateurs utilisent le même VPN ou se connectent à partir d’un mobile : dans ce cas la méthode d’identification par adresse IP vous donnera comme information qu’il s’agit du même utilisateur alors que ce n’est pas le cas.

Si l’utilisateur change d’adresse IP durant sa visite : encore une fois l’identification par adresse IP donnerait donc une fausse information : celle que plusieurs utilisateurs se sont connectés alors qu’il s’agissait du même.

C’est pourquoi la méthode par dépôt de cookie est celle utilisée. Il n’y a dans ce cas aucun risque de que l’information soit fausse.

En utilisant à la fois son adresse IP et son navigateur ce risque tombe à zéro : le risque que plusieurs utilisateurs se connectent en même temps à partir de la même adresse IP et en utilisant le même navigateur peut être considéré comme nul.

Il est donc possible de créer un identifiant unique généré à partir de l’adresse IP du visiteur, du jour de connexion, du navigateur utilisé… et d’informer Google Analytics, à chaque fois qu’une page est affichée, que cette connexion est associée à tel identifiant. Ainsi Analytics sait s’il s’agit du même utilisateur.

Le code Google Analytics à utiliser

Le code que nous utiliserons ici est tiré de ce site : https://helgeklein.com/blog/google-analytics-cookieless-tracking-without-gdpr-consent/

Le voici :

<script>
const cyrb53 = function(str, seed = 0) {
let h1 = 0xdeadbeef ^ seed,
h2 = 0x41c6ce57 ^ seed;
for (let i = 0, ch; i < str.length; i++) { ch = str.charCodeAt(i); h1 = Math.imul(h1 ^ ch, 2654435761); h2 = Math.imul(h2 ^ ch, 1597334677); } h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507) ^ Math.imul(h2 ^ h2 >>> 13, 3266489909);
h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507) ^ Math.imul(h1 ^ h1 >>> 13, 3266489909);
return 4294967296 * (2097151 & h2) + (h1 >>> 0);
};
let clientIP = "{$_SERVER['REMOTE_ADDR']}";
let validityInterval = Math.round (new Date() / 1000 / 3600 / 24 / 4);
let clientIDSource = clientIP + ";" + window.location.host + ";" + navigator.userAgent + ";" + navigator.language + ";" + validityInterval;
let clientIDHashed = cyrb53(clientIDSource).toString(16);
(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', 'YOUR-GA-TRACKING-CODE', {
'storage': 'none',
'clientId': clientIDHashed
});
ga('set', 'anonymizeIp', true);
ga('send', 'pageview');
</script>

Ce code est à insérer dans l’en tête de votre site il génère un identifiant à partir de l’adresse IP, du jour de connexion, du navigateur utilisé (navigator.userAgent), de la langue du navigateur (navigator.language), du nom de domaine (window.location.host ), et le transmet à Google Analytics via la variable clientId tout en demandant de ne pas déposer de cookies (storage : none).
Pour utiliser ce code vous devez remplacer YOUR-GA-TRACKING-CODE par votre identifiant Google Analytics qui est de la forme UA-XXXXXXXXX-X.

Attention : cela ne fonctionne qu’avec des identifiants de la forme UA-XXXXX. Lors de la configuration de votre site sur Google Analytics il faut donc choisir de créer une propriété de Google Analytics qui ait un identifiant de cette forme, et refuser la nouvelle version proposée. A la date d’écriture de cet article c.a.d au 22 janvier 2023, il est encore tout à fait possible d’utiliser un identifiant de l’ancienne forme (UA-XXXX) au moment de créer sa propriété Analytics.

La partie PHP du code et le problème qui se pose avec une mise en cache

Le code présenté ci-dessus comporte une ligne let clientIP = "{$_SERVER['REMOTE_ADDR']}"; qui doit être remplacée par du code php.
Il faut donc l’écrire de cette manière :

let clientIP = "<?php echo $_SERVER['REMOTE_ADDR']; ?>";

Ce qui s’affichera dans le code de la page sera l’adresse IP du visiteur, par exemple :

let clientIP = "155-155-155-155";

Le problème qui se pose c’est lorsque vous utilisez une mise en cache, c.a.d lorsque les pages sont stockées sous forme de fichiers statiques sur le serveur. Dans ce cas la page contiendra toujours la même adresse IP c.a.d celle détectée au moment où la page a été générée. Bien que la variable contienne également le navigateur et la langue il est préférable de générer l’identifiant à partir de l’adresse IP réelle.

C’est pourquoi j’ai créé une adaptation de ce code utilisable avec une mise en cache activée.

Pour ce faire il faut créer un fichier PHP très court sur votre serveur nous l’appellerons « get_ip.php ».

<?php echo $_SERVER['REMOTE_ADDR']; ?>

Ce fichier stocké sur votre serveur affiche simplement l’adresse IP de la personne qui l’exécute. C.a.d que si vous ouvrez : http://www.votredomaine.com/get_ip.php vous verrez apparaitre l’adresse IP à partir de laquelle vous vous connectez.

A partir de là le code précédent doit être modifié. Voici la nouvelle version du code :

 <script>
jQuery.get("https://www.votredomaine.com/get_ip.php", function (data) {
const cyrb53 = function(str, seed = 0) {
let h1 = 0xdeadbeef ^ seed,
h2 = 0x41c6ce57 ^ seed;
for (let i = 0, ch; i < str.length; i++) { ch = str.charCodeAt(i); h1 = Math.imul(h1 ^ ch, 2654435761); h2 = Math.imul(h2 ^ ch, 1597334677); } h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507) ^ Math.imul(h2 ^ h2 >>> 13, 3266489909);
h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507) ^ Math.imul(h1 ^ h1 >>> 13, 3266489909);
return 4294967296 * (2097151 & h2) + (h1 >>> 0);
};
let clientIP = (data);
let validityInterval = Math.round (new Date() / 1000 / 3600 / 24 / 4);
let clientIDSource = clientIP + ";" + window.location.host + ";" + navigator.userAgent + ";" + navigator.language + ";" + validityInterval;
let clientIDHashed = cyrb53(clientIDSource).toString(16);
(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', 'YOUR-GA-TRACKING-CODE', {
'storage': 'none',
'clientId': clientIDHashed
});
ga('set', 'anonymizeIp', true);
ga('send', 'pageview');
});
</script>

C’est exactement la même chose sauf qu’il n’y a plus la partie contenant du code PHP, celle ci est stockée dans un fichier externe.

Cette nouvelle version implique que vous utilisiez la librairie jQuery, mais vous pouvez très bien l’adapter en pur javascript.

Ainsi vous pouvez activer la mise en cache et utiliser Google Analytics sans que des cookies ne soient utilisés.

Voyons maintenant ce qu’il en est des conversions Adwords

Les conversions Google Adwords

Avec cette méthode nous avons déjà Analytics qui fonctionne. Dans un premier temps votre travail consiste à vous en assurer, par exemple en parcourant vous même votre site et en vérifiant qu’Analytics considère bien qu’il s’agit d’un seul et unique visiteur, vous pouvez ensuite changer d’adresse IP et constater qu’Analytics vous considère alors comme un nouveau visiteur. Si c’est le cas voyons maintenant comment faire remonter l’information jusqu’à Google Adwords pour pouvoir utiliser le système des conversions.

Sur Analytics vous constaterez qu’il vous est possible de créer des objectifs. Créez un ou plusieurs objectifs comme par exemple lorsqu’un visiteur parcoure au moins 3 pages, un autre lorsqu’un visiteur parcoure au moins 5 pages, un autre lorsqu’un visiteur reste au moins 2 minutes sur votre site, et un dernier lorsqu’un visiteur navigue sur telle page de votre site (par exemple la page de contact). Libre à vous de créer les objectifs qui vous sont pertinents et d’attribuer des valeurs différentes à chaque objectif, ceux énoncés précédemment ne le sont qu’à titre d’exemple.

Ensuite sur Google Adwords vous avez la possibilité de lier votre compte Analytics à votre compte Adwords. Une fois les deux comptes liés, vous avez la possibilité, au moment où vous créez une conversion sur Adwords, de choisir l’option « importer à partir d’Analytics » et là de choisir le compte Analytics précédemment lié puis les objectifs créés sur Analytics.

Attention :il peut être nécessaire d’attendre un certain laps de temps, disons une heure, après avoir créé les objectifs sur Analytics pour que ceux ci vous soient proposés sur Adwords avec cette méthode d’importation.

Une fois toutes ces étapes réalisées vous aurez la mise en cache activée, l’enregistrement du trafic sur Analytics, l’enregistrement des conversions sur Adwords et tout cela sans qu’aucun cookie ne soit déposé sur le navigateur de vos visiteurs.

N’hésitez pas à nous contacter si vous avez besoin de l’aide d’un professionnel.