PHP : Détecter le Do Not Track d’un navigateur

Un article court et très simple sur la récupération du paramètre DNT, le fameux Do Not Track. Pour ceux qui ne seraient pas au courant, la plupart des navigateurs proposent aujourd’hui un paramètre pour demander aux sites Internet de ne pas être suivi.

Sur Google Chrome, vous le trouverez dans les paramètres avancés et se nomme « Envoyer une demande « Interdire le suivi » pendant la navigation ». Attention, Google est bien prétentieux en utilisant le terme « Interdire » car c’est au bon vouloir des sites web que vous visitez. D’ailleurs, ils le disent :

L’activation de la demande « Interdire le suivi » implique l’inclusion de cette dernière avec votre trafic de navigation. Le résultat dépend de la réponse d’un site Web à cette demande et de la façon dont cette dernière est interprétée. Par exemple, des annonces qui ne sont pas basées sur d’autres sites que vous avez consultés peuvent s’afficher sur certains sites Web en réponse à cette demande. Vos données de navigation continuent d’être collectées et utilisées sur de nombreux sites Web, notamment pour améliorer le niveau de sécurité, ou pour fournir du contenu, des services, des annonces et des recommandations sur le site, ainsi que pour générer des statistiques destinées à la création de rapports.

Mon côté white hat fait que j’ai envie de prendre en compte la demande. La première fois que j’ai voulu le faire, c’était pour Piwik, l’outil de suivi analytiques que j’utilise. Ce dernier tient compte des demandes DNT, toutefois, ça n’empêche pas le fichier Javascript de Piwik de se charger pour récolter cette information. Alors je me suis dit que je pouvais facilement optimiser cela en gérant la demande directement sur le site, si bien que je ne charge même plus les éléments de Piwik. Comment fait-on ?

Pour ma part, j’en ai fait une fonction glissée dans le functions.php de WordPress, cela simplifie la vie.

<?php 
function getDntStatus() {
  /** 
   * HTTP_DNT peut avoir pour valeur 1 (on), 0 (off), ou vide (unset)
   * Retourne TRUE si HTTP_DNT est égal à 1 (on)
   * Retourne FALSE si HTTP_DNT n'est pas défini ou différent de 1
   */
  return (isset($_SERVER['HTTP_DNT']) && $_SERVER['HTTP_DNT'] == 1);
} ?>

Il faut ensuite s’en servir dans votre site avec un if bien placé et le tour est joué.