it-swarm.com.de

Was ist der beste Weg, um Bots von der Anzahl der Aufrufe auszuschließen?

Meine Website zählt die Besucheraufrufe auf bestimmten Seiten. Mir ist aufgefallen, dass Google und andere Bots wie verrückt auf meine Website "klicken" und einige der Seiten eine unrealistische Anzahl von Anzeigen erhalten (im Vergleich zu den von Menschen erstellten).

Ich bitte um die beste Vorgehensweise, um diese Bots aus meiner Sichtweise auszuschließen. Ein einfacher "User Agent", der "Bot" enthält, wird dies offensichtlich nicht tun.

Ich glaube nicht, dass es eine kugelsichere Lösung gibt, und ich brauche auch keine.

Hinweis: Ich verwende PHP + MySQL.

11
eisberg

Ich bin froh, dass Sie wissen, dass es keinen kugelsicheren Weg geben wird, um dies zu erreichen. Das heißt, Ihr Ausblick ist zumindest realistisch.

Da JavaScript keine Option ist, würde ich sagen, dass Ihnen Folgendes verbleibt:

  • Überprüfen Sie den User-Agent auf das Wort "bot". Das wird die meisten von ihnen fangen.

  • Kompilieren Sie eine Liste bekannter Bots und filtern Sie sie auf der Grundlage einer eindeutigen Kennung, wahrscheinlich ihres Benutzeragenten.

  • Fügen Sie in die Fußzeile Ihrer Website einen versteckten Link ein, der auf eine Seite verweist, auf der Benutzeragenten und/oder IP-Adressen erfasst werden. Benutzer werden dies nicht sehen, Bots jedoch. Jeder, der diese Seite besucht, ist ein Bot. Zeichne sie auf und blockiere sie dann aus deinen Statistiken.

18
John Conde

Es gibt drei ziemlich einfache Möglichkeiten:

  1. Verwenden Sie Google Analytics, das alle Daten für Sie verarbeitet und verarbeitet und Ihnen detaillierte Statistiken für Besucher und deren Zugriff auf Ihre Website bereitstellt. Dies ist bei weitem die einfachste Lösung.
  2. Verwenden Sie Javascript, um die Zählung durchzuführen. Wenn die Seite geladen wurde, generieren Sie eine AJAX -Anforderung an Ihr Zählskript. Roboter und Spinnen betreiben kein Javascript.
  3. Das Erkennen von "bot" in der Benutzeragentenzeichenfolge ist tatsächlich ziemlich zuverlässig. Alternativ können Sie sich an bekannte Bots wie Googlebot, Yahoo, MSNbot usw. halten. Wenn Sie diese drei aktivieren, sollten 99% Ihres Bot-Traffics abgedeckt sein. Diese Seite hat einige andere, aber es sieht ziemlich veraltet aus.

UPDATE: Googlebot und einige große Bots führen heutzutage JavaScript aus . Daher ist die Verwendung von Option 2 allein nicht mehr rentabel. Dies bedeutet jedoch, dass die Verwendung in Verbindung mit # 3 sehr zuverlässig sein sollte, da Sie die meisten Bots mit JS problemlos ausschließen können. Auf der Serverseite sollten Sie dann wichtige Bots wie Googlebot, auf denen JS ausgeführt wird, ausschließen.

Wie in den Kommentaren erwähnt, können Sie versuchen, mithilfe der Google Analytics-API Ansichten für jede Seite anzuzeigen.

7
DisgruntledGoat

Wenn Sie zum Zählen der Aufrufe JavaScript verwenden, wird es von den meisten Bots nicht ausgeführt und wird daher nicht in die Anzahl Ihrer Aufrufe einbezogen. Diese Antwort entspricht möglicherweise Ihren Vorstellungen https://stackoverflow.com/questions/1973448/how-can-i-count-a-page-views

3
paulmorriss

Mein Ansatz umfasst zwei Durchgänge:

  1. Filtern Sie nur Webbrowser und Konsolen, indem Sie den Anfang der Benutzeragentenzeichenfolge mit Mozilla|Opera|PSP|Bunjalloo|wii abgleichen. Dank der Spoofing-Funktion des Benutzeragenten werden bei dieser Überprüfung fast alle Browser erkannt
  2. Ausschließen von Bots durch gemeinsame Stoppzeichenfolgen bot|crawl|Slurp|spider

Wenn also der erste Schritt bestanden ist, gehen wir davon aus, dass es sich um einen Browser handelt und ein echter Besucher dahinter steckt. Wie ich jedoch herausgefunden habe, geben einige Bots vor, Mozilla kompatibel zu sein, und beginnen ihre User-Agent-Zeichenfolge damit. Deshalb könnte der zweite Durchgang nützlich sein und sie beseitigen.

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

Sie können ein Bild als Zähler verwenden. In diesem Fall werden keine Bots gezählt und der Seitenname wird als Abfrage mit dem Bildnamen übergeben

Ich benutze dies in der Datei img.php, um die Seitenanzeige in der Datenbank zu aktualisieren:

<?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

Ich verwende nur einen einfachen Ausschluss beim Parsen von Benutzeragenten. 99% der Bots, die auf meine Seiten gelangen, werden entfernt.

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