Quelle est la meilleure façon d'exclure les bots du nombre de vues?


11

Mon site Web compte les vues des visiteurs sur certaines pages. J'ai remarqué que Google et d'autres robots "cliquaient" sur mon site comme un fou et certaines des pages avaient un nombre de vues irréaliste (par rapport à celles produites par les humains).

Je demande les meilleures pratiques pour exclure ces robots de mon nombre de vues. Évidemment, un simple "agent utilisateur" contient "bot" ne le fera pas.

Je ne pense pas qu'il existe de solution prouvée par balle ni que j'en ai besoin.

Remarque: j'utilise PHP + MySQL.


La bonne réponse à votre question dépend du type de logiciel que vous utilisez pour suivre vos statistiques.
Goboozo

@Goboozo J'utilise PHP + MySQL. Ce n'est pas pour suivre mes statistiques. Il s'agit de requêtes pour des entrées "liées", "chaudes" et "intéressantes".
eisberg

Réponses:


19

Je suis heureux que vous sachiez qu'il n'y aura pas de moyen pare-balles pour y parvenir. Cela signifie que vos perspectives sont au moins réalistes.

Puisque JavaScript n'est pas une option, je dirais qu'il vous reste:

  • Vérifiez dans l'agent utilisateur le mot "bot" qu'il contient. Cela va attraper la plupart d'entre eux.

  • Compilez une liste de bots connus et filtrez-les en fonction d'une sorte d'identifiant unique, probablement leur agent utilisateur.

  • Mettez un lien caché dans le pied de page de votre site Web qui renvoie à une page qui recueille les agents utilisateurs et / ou les adresses IP. Les utilisateurs ne verront pas cela, mais les bots le verront. Donc, quiconque visite cette page sera un bot. Enregistrez-les, puis bloquez-les de vos statistiques.


Cela semble prometteur. J'aime l'idée d'un piège. Je fais quelque chose de même pour les commentaires des utilisateurs sur mon site avec un champ de saisie invisible (au lieu d'un laid Captcha). :-)
eisberg

2
@eisberg, ça s'appelle un pot de miel. J'en suis moi-même un grand fan.
John Conde

probablement la meilleure solution ...
vkGunasekaran

7

Il existe trois façons assez simples:

  1. Utilisez Google Analytics, qui traitera et traitera toutes les données pour vous, et vous présentera des statistiques détaillées pour les visiteurs et comment ils sont arrivés sur votre site. C'est de loin la solution la plus simple.
  2. Utilisez Javascript pour faire le comptage. Une fois la page chargée, générez une requête AJAX dans votre script de comptage. Les robots et les araignées n'exécutent pas Javascript.
  3. La détection de "bot" dans la chaîne d'agent utilisateur est en fait assez fiable. Alternativement, vous ne pouvez vous en tenir qu'aux robots connus tels que Googlebot, Yahoo, MSNbot, etc. La vérification de ces trois devrait couvrir 99% de votre trafic de robots. Cette page en contient d'autres mais elle semble assez obsolète.

MISE À JOUR: Googlebot et certains robots collecteurs principaux ne JavaScript ces jours fonctionnent. Ainsi, l'utilisation de l'option # 2 seule n'est plus viable. Cependant, cela signifie que l'utiliser en conjonction avec # 3 devrait être assez fiable, car vous pouvez facilement exclure la plupart des bots en utilisant JS, puis côté serveur exclure les bots majeurs comme Googlebot qui exécutent JS.

De plus, comme mentionné dans les commentaires, vous pouvez essayer d'utiliser l'API Google Analytics pour afficher les vues de chaque page.


1 et 2 sont sans rapport avec ma question. Peut-être aurais-je dû demander "Comment puis-je obtenir un compteur de vues comme stackechange qui ignore les bots?" donc mon faux :-) Néanmoins très belle liste en 3. Merci je vais vérifier ça.
eisberg

Désolé, je ne savais pas que vous étiez en train d'afficher le nombre de vues sur la page. Dans ce cas, 2 et 3 sont tous deux viables.
DisgruntledGoat

Merci pour l'effort. Au moins pour moi javascript n'est jamais la réponse donc je suis coincé avec 3 mais il y a tellement d'indicateurs :-(
eisberg

En fait, certains bots exécutent du JavaScript. J'ai mis en place une requête Ajax pour suivre la taille de la fenêtre par rapport à la taille de l'écran. Googlebot signale deux tailles d'écran différentes.
toxalot

Je sais que la question est ancienne et a déjà une solution, mais pourquoi ne pas utiliser l'API Google Analitycs si c'est uniquement pour afficher un compteur de vues humaines? stackoverflow.com/questions/19484009/…
KeizerBridge

3

Si vous utilisez Javascript pour compter les vues, la plupart des robots ne l'exécuteront pas et ne seront donc pas inclus dans votre nombre de vues. Cette réponse peut être proche de ce que vous voulez /programming/1973448/how-can-i-count-a-page-views


Non, je n'utilise pas Javascript. Il s'agit d'un site Web PHP + MySQL normal. Mais merci pour la réponse quand même :-)
eisberg

Ne négligez pas cette réponse si vite. Même avec un site utilisant PHP + MySQL, rien ne vous empêche d'émettre un peu de JavaScript pour générer votre compteur de vues. Au lieu de sortir le compteur directement, sortez quelque chose comme '<script> document.write (<counter-code>) </script>' où <counter-code> est tout ce dont vous avez besoin pour créer votre compteur.
Itai

@Itai Désolé, mais je n'utiliserai pas javascript pour compter mes visiteurs. Mais merci quand même.
eisberg

Si vous ne souhaitez pas utiliser JavaScript, indiquez-le clairement dans votre question. Comme l'a dit Itai, rien ne nous empêche de penser à une solution JavaScript pour un site PHP.
Tien Do

En fait, certains bots exécutent du JavaScript. J'ai mis en place une requête Ajax pour suivre la taille de la fenêtre par rapport à la taille de l'écran. Googlebot signale deux tailles d'écran différentes.
toxalot

3

Ma démarche comporte deux passes:

  1. Filtrez uniquement les navigateurs Web et les consoles en faisant correspondre le début de la chaîne de l'agent utilisateur avec Mozilla|Opera|PSP|Bunjalloo|wii. Grâce à l'usurpation de l'agent utilisateur, cette vérification détectera presque tous les navigateurs
  2. Exclure les bots par des chaînes d'arrêt communes bot|crawl|slurp|spider

Donc, si la première étape est franchie, nous supposons qu'il s'agit d'un navigateur et qu'il y a un vrai visiteur derrière. Comme je l'ai découvert, certains robots prétendent être Mozillacompatibles et démarrent leur chaîne d'agent utilisateur avec. C'est pourquoi la deuxième passe peut être utile et les éliminer.

function isBrowser () {

    return preg_match( '/^(Mozilla|Opera|PSP|Bunjalloo|wii)/i', $_SERVER['HTTP_USER_AGENT'] ) && !preg_match( '/bot|crawl|slurp|spider/i', $_SERVER['HTTP_USER_AGENT'] );
}

2

J'utilise une simple exclusion d'analyse de l'agent utilisateur. Il supprime 99% des bots entrant dans mes pages.

SELECT * FROM `live_visitors` where (
lower(agent) != '%bot%' and
lower(agent) != '%slurp%' and
lower(agent) != '%spider%' and
lower(agent) != '%crawl%' and
lower(agent) != '%archiver%' and
lower(agent) != '%facebook%')

1
Cela n'aiderait pas (du moins dans mon cas) car presque tous les bots que je peux identifier par leur comportement (navigation trop rapide, navigation chronologique de tous les liens, ...) utilisent un User-Agent valide. Mais bonne idée pour d'autres projets.
eisberg

2

Vous pouvez utiliser une image comme compteur, dans ce cas, elle ne comptera pas les bots et le nom de la page est passé en tant que requête avec le nom de l'image

J'utilise ceci sur img.php qui met à jour la vue de la page dans la base de données:

<?php
$xnt = $_GET["ID"]; if (isset($xnt) && is_numeric($xnt)) {
$DBServer = "localhost"; $DBUser = "xxx"; $DBPass = "xxx"; $DBaze = "xxx";
$conn = mysqli_connect($DBServer, $DBUser, $DBPass, $DBaze); 
mysqli_query($conn, "UPDATE stats SET stats_vz=stats_vz+1 WHERE stats_id=".$xnt);
mysqli_close($conn);}
$im = @imagecreatetruecolor(1, 1); imagesavealpha($im, true); imagealphablending($im, false); $white = imagecolorallocatealpha($im, 255, 255, 255, 127); imagefill($im, 0, 0, $white);
header("Content-type: image/png"); imagepng($im); imagedestroy($im);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.