Publié le 01/07/2018
Auteur fobec
Réseaux sociaux
0 partages
0 tweets
0 plus
2 commentaires

Detecter un visiteur humain sur son site internet

Comment déterminer l'origine d'une requête sur un serveur web ? La question parait toute bête puisque les serveurs sont équipés d'un ensemble d'outil permettant de suivre le trafic. A y regarder de plus prêt, on se rend compte qu'une multitude de bot et de robot en tout genre visitent nos sites internet.

Outil de suivi à notre disposition

Le principal outil de suivi des requêtes est le fichier log de Apache. Ce journal ajoute une entrée à chaque fois qu'une ressource est sollicitée (html, image, js, css). Pour identifier l'origine de la requête, le webmaster peut analyser les adresses IP et l'User Agent qui y sont associés.
Par contre, ces données ne permettent pas de savoir s'il s'agit d'un robot ou d'un humain qui demande à voir la page internet. En y réfléchissant, le serveur est forcément aveugle face à requête et l'identification du visiteur se fera du côté du navigateur internet.

Intercepter des évènements utilisateur

La question à se poser est: que fait un utilisateur en plus d'un robot lorsqu'il visite un site internet ?
Pour économiser de la bande passante, les crawlers ont tendance à ne pas charger les ressources associées à une page internet. Donc on pourrait se dire, que si les images, les scripts JS ou encore les feuilles de style ne sont pas chargés, la requête provient d'un robot. Seulement voila, les robots comme GoogleBot par exemple chargent aléatoirement ces ressources et interprêtent même le code JS pour trouver les liens.
L'idée suivi dans le script qui va suivre est qu'un utilisateur bouge la souris pour faire défile le contenu d'une page internet.

/* 
 * Detecter les utilisateurs humains sur une page internet
 */
 
// lance la fonction au chargement du script
initUI_setListener();
 
/**
 * Attache deux evenements au body
 * @returns {none}
 */
function initUI_setListener() {
    //Si la valeur est true (vrai), le listener sera automatiquement supprimé après son appel.
    //Evenement pour les utilisateurs desktop
    document.body.addEventListener("mousemove", initUI_handle, {once: true});
    //Evenement pour les smartphone
    document.body.addEventListener("touchmove", initUI_handle, {once: true});
    console.log('attach');
}
 
/**
 * Traiter le déclenchement de l'évènement
 * @returns {undefined}
 */
function initUI_handle() {
    //Retirer les event au listener
    //inutile en théorie
    document.body.removeEventListener("mousemove", initUI_handle, true);
    document.body.removeEventListener("touchmove", initUI_handle, true);
    console.log('detach');
    
    //page id
    var params='page_id=10';
    
    //screen size
    var width = document.documentElement.clientWidth;
    var height = document.documentElement.clientHeight;
    params += '&width=' + width + '&height=' + height;
 
    //Envoyer la requete
    $.ajax({
        url: 'myXiti.php',
        type: 'POST',
        data: params,
        dataType: "text",      
        success: function (response, status) {
            /* alert(response);*/
        },
        error: function (result, statut, erreur) {
           /* alert(result.responseText);*/
        }
    });    
}

Le principe est que dès que la souris bouge sur la page, il s'agit d'un humain. Pour les tablettes et téléphones portables, il est préférable d'utiliser évènement touchmove qui correspond au touche sur un écran mobile. Cette solution n'est pas parfaite à 100% par contre elle permet de trier un minimum le trafic sur ses pages internet.

Le script est en test depuis plusieurs jours sur un site internet lancé récemment. ça a l'air de marcher ;)
Le but de ce script JS est d’expérimenter un cocon sémantique avec un peu de cloaking pour les robots. Les résultats devraient être visibles d'ici un mois ou deux, reste à vérifier que les visiteurs humains aient correctement aux liens dont ils ont besoin lors de leur navigation.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.
avatar Toluar

Publié par Toluar

le 31/07/2018 à 10:31:32

Je viens de lire votre article que seulement aujourd'hui.
Une autre solution consiste a regarder le user-agent utilise par le navigateur du visiteur. Les crawlers sont clairement identifies ;-)

avatar Fobec

Publié par Fobec

le 31/07/2018 à 14:44:02

Merci pour la remarque Toluar,
Les user-agent sont effectivement un bon indicateur pour les utilisateurs. Les crawlers et robots en tout genre ne prennent pas toujours la peine de renseigner cette balise dans la requete.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
tuto - webmaster
Mise a jour
01/07/2018
Visualisation
vu 1231 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 264 articles
|BIO_PSEUDO|
Commentaires récents

Publié par traitstone dans CMS

c'est bou et tres bon chose

Publié par eldiablo dans java

Malheureusement, ce code n'est pas correct.
Cette classe accepte des dates comme : "31/00/2011"

Publié par Adresse IP dans news

Je cherche un moyen pour afficher une correspondance entre adresse IPv4 et adresse IPv6 sans possibilite d'installer le protocole ipv6. Comment faire J'ai vu qu'il existait des possibilites de faire...

Publié par Kal747 dans php5

Merci pour l'info !

Publié par Roy2014 dans tuto

Bonjour et merci pour ce tuto interessant. Je pense que tout le monde souffre avec 1and1 du fait que l'on puisse pas gziper directement via le htaccess!!
j'aurais une petite question:
tu dis a p...