web-dev-qa-db-fra.com

Quel est le meilleur moyen d’exclure les robots du nombre de vues?

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

Je demande la meilleure pratique pour exclure ces bots de mon point de vue. Évidemment, un simple "agent utilisateur" contenant "bot" ne le fera pas.

Je ne pense pas qu'il existe une solution prouvant la balle ni j'en ai besoin.

Note: J'utilise PHP + MySQL.

11
eisberg

Je suis heureux que vous sachiez qu'il n'y aura pas de moyen infaillible pour accomplir cela. Cela signifie que votre perspective est au moins réaliste.

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

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

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

  • Placez un lien masqué dans le pied de page de votre site Web qui mène à une page qui collecte des agents d'utilisateur et/ou des 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 dans vos statistiques.

18
John Conde

Il y a trois manières assez simples:

  1. Utilisez Google Analytics, qui traitera et gérera toutes les données pour vous et vous présentera des statistiques détaillées pour les visiteurs et leur accès à 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 demande AJAX dans votre script de comptage. Les robots et les araignées ne fonctionnent pas avec Javascript.
  3. Détecter "bot" dans la chaîne de l'agent utilisateur est en fait assez fiable. Alternativement, vous pouvez ne vous en tenir qu'aux robots connus tels que Googlebot, Yahoo, MSNbot, etc. Vérifier ces trois sites devrait couvrir 99% de votre trafic de bot. Cette page en a d'autres mais elle a l'air tout à fait dépassée.

MISE À JOUR: Googlebot et certains des principaux robots exécutent JavaScript ces jours-ci. Donc, l’option n ° 2 seule n’est plus viable. Cependant, cela signifie que son utilisation en conjonction avec # 3 devrait être relativement fiable, car vous pouvez facilement exclure la plupart des robots en utilisant JS, puis du côté serveur, excluez les principaux robots comme Googlebot qui exécutent JS.

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

7
DisgruntledGoat

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 https://stackoverflow.com/questions/1973448/how-can-i-count-a-page-views

3
paulmorriss

Mon approche implique deux passes:

  1. Filtrez uniquement les navigateurs Web et les consoles en faisant correspondre le début de la chaîne d'agent d'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 robots par des chaînes de stop communes bot|crawl|Slurp|spider

Donc, si la première étape est franchie, supposons que c'est un navigateur et qu'il y a un vrai visiteur derrière. Comme je l'ai découvert, certains robots prétendent être compatibles Mozilla et commencent leur chaîne d'agent utilisateur avec celle-ci. C'est pourquoi le second passage pourrait ê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'] );
}
3
Anton Gudov

Vous pouvez utiliser une image en tant que compteur. Dans ce cas, elle ne comptera pas les robots et le nom de la page est transmis en tant que requête avec le nom de l'image.

J'utilise ceci à img.php qui met à jour la vue de 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);
2
Ashraf

J'utilise simplement une analyse par agent utilisateur d'exclusion. Il élimine 99% des robots qui entrent 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%')
2
jagarock