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.
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.
Il y a trois manières assez simples:
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.
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
Mon approche implique deux passes:
Mozilla|Opera|PSP|Bunjalloo|wii
. Grâce à l'usurpation de l'agent utilisateur, cette vérification détectera presque tous les navigateurs.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'] );
}
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);
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%')