Jaki jest najlepszy sposób na wykluczenie botów z liczby wyświetleń?

12

Moja witryna liczy wyświetlenia odwiedzających na niektórych stronach. Zauważyłem, że Google i inne boty „klikają” na mojej stronie jak szalone, a niektóre strony uzyskują nierealistyczną liczbę wyświetleń (w porównaniu do tych wytwarzanych przez ludzi).

Proszę o najlepsze praktyki, aby wykluczyć te boty z mojego widoku. Oczywiście prosty „agent użytkownika” zawiera „bot” tego nie zrobi.

Nie sądzę, aby istniało rozwiązanie potwierdzające pocisk, ani go nie potrzebuję.

Uwaga: używam PHP + MySQL.

Eisberg
źródło
Prawidłowa odpowiedź na twoje pytanie zależy od rodzaju oprogramowania używanego do śledzenia twoich statystyk.
Goboozo,
@Goboozo Używam PHP + MySQL. To nie jest do śledzenia moich statystyk. Chodzi o zapytania dotyczące wpisów „pokrewnych”, „gorących” i „interesujących”.
eisberg,

Odpowiedzi:

19

Cieszę się, że wiesz, że nie będzie kuloodpornego sposobu na osiągnięcie tego. Oznacza to, że twoje perspektywy są co najmniej realistyczne.

Ponieważ JavaScript nie jest opcją, powiedziałbym, że masz:

  • Sprawdź w kliencie użytkownika słowo „bot”. To złapie większość z nich.

  • Zbuduj listę znanych botów i przefiltruj je na podstawie pewnego unikalnego identyfikatora, prawdopodobnie ich klienta użytkownika.

  • Umieść ukryty link w stopce witryny, który prowadzi do strony, na której gromadzone są programy użytkownika i / lub adresy IP. Użytkownicy tego nie zobaczą, ale boty. Więc każdy, kto odwiedzi tę stronę, będzie botem. Zapisz je, a następnie zablokuj je w swoich statystykach.

John Conde
źródło
To wygląda obiecująco. Podoba mi się pomysł pułapki. Robię coś podobnego do komentarzy użytkowników na mojej stronie z niewidocznym polem wejściowym (zamiast brzydkiego Captcha). :-)
eisberg,
2
@eisberg, To się nazywa plaster miodu. Sam jestem ich wielkim fanem.
John Conde
prawdopodobnie najlepsze rozwiązanie ...
vkGunasekaran
7

Istnieją trzy dość proste sposoby:

  1. Skorzystaj z Google Analytics, który przetwarza i obsługuje wszystkie dane za Ciebie, i przedstawia szczegółowe statystyki dla odwiedzających oraz sposób, w jaki dotarli do Twojej witryny. To zdecydowanie najłatwiejsze rozwiązanie.
  2. Użyj Javascript do liczenia. Po załadowaniu strony wygeneruj żądanie AJAX do skryptu zliczającego. Roboty i pająki nie uruchamiają Javascript.
  3. Wykrywanie „bota” w ciągu agenta użytkownika jest w rzeczywistości dość niezawodne. Alternatywnie możesz trzymać się tylko znanych botów, takich jak Googlebot, Yahoo, MSNbot itp. Sprawdzanie tych trzech powinno obejmować 99% ruchu botów. Ta strona ma kilka innych, ale wygląda na nieaktualną.

UPDATE: Googlebot i kilka głównych boty nie wykonywanie kodu JavaScript w tych dniach. Samo użycie opcji nr 2 nie jest już wykonalne. Oznacza to jednak, że używanie go w połączeniu z numerem 3 powinno być dość niezawodne, ponieważ można łatwo wykluczyć większość botów za pomocą JS, a następnie po stronie serwera wykluczyć główne boty, takie jak Googlebot, które uruchamiają JS.

Również jak wspomniano w komentarzach, możesz spróbować użyć interfejsu API Google Analytics do wyświetlenia wyświetleń dla każdej strony.

DisgruntledGoat
źródło
1 i 2 nie są związane z moim pytaniem. Może powinienem był zapytać „Jak uzyskać licznik widoków taki jak zmiana stosu, który ignoruje boty?” więc moje fałszywe :-) Niemniej jednak bardzo ładna lista w 3. Dziękuję, sprawdzę to.
eisberg,
Przepraszamy, nie zdawałem sobie sprawy, że wyświetlasz liczbę wyświetleń na stronie. W takim przypadku 2 i 3 są opłacalne.
Disgruntled Goo
Dziękuję za wysiłek. Przynajmniej dla mnie javascript nigdy nie jest odpowiedzią, więc utknąłem z 3, ale jest tak wiele wskaźników :-(
eisberg
W rzeczywistości niektóre boty obsługują JavaScript. Skonfigurowałem żądanie Ajax, aby śledzić rozmiar rzutni w stosunku do rozmiaru ekranu. Googlebot zgłasza dwa różne rozmiary ekranu.
toxalot
Wiem, że pytanie jest stare i ma już rozwiązanie, ale dlaczego by nie użyć interfejsu API Google Analitycs, jeśli ma on wyświetlać tylko licznik wyświetleń? stackoverflow.com/questions/19484009/…
KeizerBridge
3

Jeśli używasz Javascript do liczenia wyświetleń, większość botów go nie uruchomi, a więc nie zostanie uwzględniona w liczeniu wyświetleń. Ta odpowiedź może być zbliżona do tego, co chcesz /programming/1973448/how-can-i-count-a-page-views

paulmorriss
źródło
Nie, nie używam Javascript. To normalna strona PHP + MySQL. Ale i tak dziękuję za odpowiedź :-)
eisberg,
Nie odrzucaj tej odpowiedzi tak szybko. Nawet w przypadku witryny korzystającej z PHP + MySQL nic nie stoi na przeszkodzie, abyś wygenerował licznik wyświetleń w JavaScript. Zamiast wyprowadzać licznik bezpośrednio, wypisz coś takiego jak „<script> document.write (<counter-code>) </script> 'gdzie <counter-code> jest tym, czego potrzebujesz, aby stworzyć swój licznik.
Itai,
@Itai Przepraszam, ale nie będę używać javascript do liczenia moich gości. Ale i tak dziękuję.
eisberg,
Jeśli nie chcesz używać JavaScriptu, po prostu wyraź to w swoim pytaniu. Jak powiedział Itai, nic nie stoi na przeszkodzie, aby myśleć o rozwiązaniu JavaScript dla strony PHP.
Tien Do
W rzeczywistości niektóre boty obsługują JavaScript. Skonfigurowałem żądanie Ajax, aby śledzić rozmiar rzutni w stosunku do rozmiaru ekranu. Googlebot zgłasza dwa różne rozmiary ekranu.
toxalot
3

Moje podejście obejmuje dwa przejścia:

  1. Filtruj tylko przeglądarki i konsole, dopasowując początek ciągu agenta użytkownika do Mozilla|Opera|PSP|Bunjalloo|wii. Dzięki sfałszowaniu się agenta użytkownika ta kontrola wykryje prawie wszystkie przeglądarki
  2. Wyklucz boty przez wspólne ciągi stop bot|crawl|slurp|spider

Więc jeśli pierwszy krok zostanie zaliczony, zakładamy, że jest to przeglądarka, a za nim stoi prawdziwy gość. Jak się dowiedziałem, niektóre boty udają, że są Mozillakompatybilne i rozpoczynają od tego swój ciąg agenta użytkownika. Dlatego drugie podanie może się przydać i je wyeliminować.

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'] );
}
Anton Gudov
źródło
2

Korzystam z prostego wykluczenia analizowania klienta użytkownika. Pozbywa się 99% botów wchodzących na moje strony.

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%')
jagarock
źródło
1
Nie pomogłoby to (przynajmniej w moim przypadku), ponieważ prawie każdy bot, który mogę zidentyfikować na podstawie jego zachowania (zbyt szybkie przeglądanie, chronologiczne przeglądanie wszystkich linków, ...) używa prawidłowego agenta użytkownika. Ale dobry pomysł na inne projekty.
eisberg,
2

Możesz użyć obrazu jako licznika, w tym przypadku nie będzie on liczyć botów, a nazwa strony jest przekazywana jako zapytanie o nazwie obrazu

Korzystam z tego w img.php, które aktualizują widok strony w bazie danych:

<?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);
Ashraf
źródło