Question

Je remarque que StackOverflow a un nombre de vues pour chaque question et que ces nombres de vues sont assez faibles et précis.

J'ai une chose similaire sur un de mes sites.Il enregistre essentiellement un "hit" chaque fois que la page est chargée dans le code backend.Malheureusement, il le fait également pour les résultats des moteurs de recherche donnant des chiffres gonflés et inexacts.

Je suppose qu'une façon de ne pas compter un robot serait de compter les vues avec un appel AJAX une fois la page chargée, mais je suis sûr qu'il existe d'autres, meilleures façons d'ignorer les moteurs de recherche dans vos compteurs d'accès tout en les laissant entrer. explorez votre site.En connaissez-vous ?

Était-ce utile?

La solution

Un appel AJAX le fera, mais généralement les moteurs de recherche ne chargeront pas d'images, de fichiers javascript ou CSS, il peut donc être plus facile d'inclure l'un de ces fichiers dans la page et de transmettre l'URL de la page sur laquelle vous souhaitez enregistrer une requête. comme paramètre dans la demande de fichier.

Par exemple, dans la page...

http://www.example.com/example.html

Vous pouvez inclure dans la section d'en-tête

<link href="empty.css?log=example.html" rel="stylesheet" type="text/css" />

Et demandez à votre serveur d'enregistrer la demande, puis de renvoyer un fichier CSS vide.La même approche s'appliquerait à JavaScript ou aux fichiers image, même si dans tous les cas, vous souhaiterez examiner attentivement la mise en cache qui pourrait avoir lieu.

Une autre option serait d'éliminer les moteurs de recherche en fonction de leur agent utilisateur.Il existe une grande liste d'agents utilisateurs possibles sur http://user-agents.org/ pour vous aider à démarrer.Bien sûr, vous pouvez aller dans l'autre sens et ne compter que les requêtes provenant de choses que vous savez être des navigateurs Web (couvrant IE, Firefox, Safari, Opera et cette nouvelle version de Chrome vous mènerait à 99 % du chemin).

Il serait encore plus simple d'utiliser un outil d'analyse de journaux comme awstats ou un service comme Google Analytics, qui ont tous deux déjà résolu ce problème.

Autres conseils

Pour résoudre ce problème, j'ai implémenté un filtre simple qui examinerait l'en-tête User-Agent dans la requête HTTP et le comparerait à une liste de robots connus.

J'ai reçu la liste des robots de www.robotstxt.org.Il est téléchargeable dans un format texte simple qui peut facilement être analysé pour générer automatiquement la « liste noire ».

Vous n'avez pas vraiment besoin d'utiliser AJAX, utilisez simplement JavaScript pour ajouter un iFrame hors écran.RESTER SIMPLE

<script type="javascript">
document.write('<iframe src="myLogScript.php" style="visibility:hidden" width="1" height="1" frameborder="0">');
</script>

Une extension de la réponse de Matt Sheppard pourrait ressembler à ce qui suit :

  <script type="text/javascript">
  var thePg=window.location.pathname;
  var theSite=window.location.hostname;
  var theImage=new Image;
  theImage.src="/test/hitcounter.php?pg=" + thePg + "?site=" + theSite;
  </script>

qui peut être branché sur un modèle d'en-tête ou de pied de page sans avoir besoin de remplacer le nom de la page côté serveur.Notez que si vous incluez la chaîne de requête (window.location.search), une version robuste de celle-ci devrait coder la chaîne pour empêcher les malfaiteurs de créer des requêtes de page exploitant des vulnérabilités basées sur des éléments étranges dans les URL.Ce qui est bien avec ce vs.un habitué <img> étiquette ou <iframe> est que l'utilisateur ne verra pas de x rouge s'il y a un problème avec le script hitcounter.Dans certains cas, il est également important de connaître l'URL vue par le navigateur, avant les réécritures, etc.cela se produit côté serveur, et cela vous donne cela.Si vous voulez les deux sens, ajoutez un autre paramètre côté serveur qui insère également cette version du nom de la page dans la chaîne de requête.

Un exemple des fichiers journaux d'un test de cette page :

10.1.1.17 - - [13/Sep/2008:22:21:00 -0400] "GET /test/testpage.html HTTP/1.1" 200 306 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16"
10.1.1.17 - - [13/Sep/2008:22:21:00 -0400] "GET /test/hitcounter.php?pg=/test/testpage.html?site=www.home.***.com HTTP/1.1" 301 - "http://www.home.***.com/test/testpage.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16"

La raison pour laquelle Stack Overflow a un nombre de vues précis est qu'il ne compte qu'une seule fois chaque vue/utilisateur.

Les applications tierces de compteur d'accès (et de statistiques Web) filtrent souvent les moteurs de recherche et les affichent dans une fenêtre/un onglet/une section séparé.

Soit vous devrez faire ce que vous avez dit dans votre question avec AJAX.Ou excluez les chaînes User-Agent qui sont des moteurs de recherche connus.Le seul moyen sûr d’arrêter les robots est d’utiliser AJAX.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top