Qual è il modo migliore per escludere i bot dal conteggio delle visualizzazioni?


11

Il mio sito web conta le visualizzazioni dei visitatori su determinate pagine. Ho notato che Google e altri robot stanno "facendo clic" sul mio sito come un matto e alcune pagine ottengono conteggi di visualizzazioni non realistici (rispetto a quelli prodotti dagli umani).

Sto chiedendo le migliori pratiche per escludere quei robot dal mio numero di visualizzazioni. Ovviamente un semplice "user agent" contiene "bot" non lo farà.

Non penso che ci sia una soluzione di prova proiettile né ne ho bisogno.

Nota: sto usando PHP + MySQL.


La risposta corretta alla tua domanda dipende dal tipo di software che usi per tenere traccia delle tue statistiche.
Goboozo,

@Goboozo Sto usando PHP + MySQL. Questo non è per il monitoraggio delle mie statistiche. Si tratta di query per voci "correlate", "calde" e "interessanti".
eisberg,

Risposte:


19

Sono contento che tu sappia che non ci sarà un modo a prova di proiettile per raggiungere questo obiettivo. Ciò significa che la tua prospettiva è almeno realistica.

Poiché JavaScript non è un'opzione, direi che ti rimane:

  • Controlla lo user-agent per la parola "bot" in esso. Ciò catturerà la maggior parte di loro.

  • Compila un elenco di robot noti e filtrali in base a un tipo di identificatore univoco, probabilmente il loro user-agent.

  • Inserisci un link nascosto nel piè di pagina del tuo sito Web che collega a una pagina che raccoglie user-agent e / o indirizzi IP. Gli utenti non lo vedranno ma lo faranno i robot. Quindi chiunque visiti quella pagina sarà un bot. Registrali e poi bloccali dalle tue statistiche.


Sembra promettente. Mi piace l'idea di una trappola. Faccio qualcosa di simile per i commenti degli utenti sul mio sito con un campo di input invisibile (anziché un brutto Captcha). :-)
eisberg,

2
@eisberg, si chiama honeypot. Ne sono un grande fan.
John Conde

probabilmente la migliore soluzione ...
vkGunasekaran

7

Esistono tre modi abbastanza semplici:

  1. Utilizza Google Analytics, che elaborerà e gestirà tutti i dati per te e ti presenterà statistiche dettagliate per i visitatori e come sono arrivati ​​al tuo sito. Questa è di gran lunga la soluzione più semplice.
  2. Usa Javascript per eseguire il conteggio. Quando la pagina è stata caricata, genera una richiesta AJAX nello script di conteggio. I robot e i ragni non eseguono Javascript.
  3. Il rilevamento di "bot" nella stringa dell'agente utente è in realtà abbastanza affidabile. In alternativa, è possibile attenersi solo a robot noti come Googlebot, Yahoo, MSNbot ecc. La verifica di questi tre dovrebbe coprire il 99% del traffico bot. Questa pagina ne contiene alcune ma sembra piuttosto obsoleta.

UPDATE: Googlebot e alcuni importanti bot non esecuzione di JavaScript in questi giorni. Pertanto, l'utilizzo dell'opzione n. 2 da solo non è più praticabile. Tuttavia, ciò significa che usarlo insieme a # 3 dovrebbe essere abbastanza affidabile, poiché puoi facilmente escludere la maggior parte dei bot utilizzando JS, quindi sul lato server escludi i principali bot come Googlebot che eseguono JS.

Inoltre, come indicato nei commenti, puoi provare a utilizzare l'API di Google Analytics per visualizzare le visualizzazioni per ogni pagina.


1 e 2 non sono correlati alla mia domanda. Forse avrei dovuto chiedere "Come posso ottenere un contatore di visualizzazioni come StackChange che ignora i robot?" quindi il mio falso :-) Comunque elenco molto bello in 3. Grazie controllerò questo.
eisberg,

Spiacenti, non mi ero reso conto che stavi visualizzando il conteggio delle visualizzazioni nella pagina. In tal caso, 2 e 3 sono entrambi vitali.
DisgruntledGoat

Grazie per lo sforzo Almeno per me javascript non è mai la risposta, quindi sono bloccato con 3 ma ci sono così tanti indicatori :-(
eisberg

In realtà, alcuni bot eseguono JavaScript. Ho impostato una richiesta Ajax per tenere traccia delle dimensioni della finestra in relazione alle dimensioni dello schermo. Googlebot sta segnalando due diverse dimensioni dello schermo.
Toxalot,

So che la domanda è vecchia e ha già una soluzione, ma perché non utilizzare l'API di Google Analitycs se è solo per mostrare un contatore di visualizzazioni umane? stackoverflow.com/questions/19484009/...
KeizerBridge

3

Se usi Javascript per contare le visualizzazioni, la maggior parte dei robot non lo eseguirà e quindi non verrà incluso nel conteggio delle visualizzazioni. Questa risposta potrebbe essere vicina a ciò che desideri /programming/1973448/how-can-i-count-a-page-views


No, non sto usando Javascript. È un normale sito Web PHP + MySQL. Ma grazie comunque per la risposta :-)
eisberg,

Non scontare questa risposta così in fretta. Anche con un sito che utilizza PHP + MySQL, nulla ti impedisce di emettere un po 'di JavaScript per generare il tuo contatore di visualizzazioni. Invece di emettere direttamente il contatore, emetti qualcosa come '<script> document.write (<counter-code>) </script>' dove <counter-code> è tutto ciò di cui hai bisogno per creare il tuo contatore.
Itai,

@Itai Siamo spiacenti, ma non userò JavaScript per contare i miei visitatori. Ma grazie comunque.
eisberg,

Se non desideri utilizzare JavaScript, inseriscilo chiaramente nella domanda. Come ha detto Itai, nulla ci impedisce di pensare alla soluzione JavaScript per un sito PHP.
Tien Do

In realtà, alcuni bot eseguono JavaScript. Ho impostato una richiesta Ajax per tenere traccia delle dimensioni della finestra in relazione alle dimensioni dello schermo. Googlebot sta segnalando due diverse dimensioni dello schermo.
Toxalot,

3

Il mio approccio prevede due passaggi:

  1. Filtra solo i browser Web e le console facendo corrispondere l'inizio della stringa dell'agente utente con Mozilla|Opera|PSP|Bunjalloo|wii. Grazie allo spoofing dell'agente utente questo controllo rileverà quasi tutti i browser
  2. Escludere i bot dalle stringhe di stop comuni bot|crawl|slurp|spider

Quindi, se il primo passo viene superato, supponiamo che sia un browser e dietro ci sia un vero visitatore. Come ho scoperto, però, alcuni robot fingono di essere Mozillacompatibili e iniziano con la loro stringa agente utente con esso. Ecco perché il secondo passaggio potrebbe tornare utile ed eliminarli.

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

Uso solo un semplice user agent che analizza l'esclusione. Elimina il 99% dei robot che vanno nelle mie pagine.

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
Questo non sarebbe d'aiuto (almeno nel mio caso) perché quasi tutti i bot che riesco a identificare dal suo comportamento (navigazione troppo veloce, navigazione cronologica di tutti i collegamenti, ...) utilizzano un User-Agent valido. Ma buona idea per altri progetti.
Eisberg,

2

Puoi usare un'immagine come contatore, in questo caso non conterà i robot e il nome della pagina viene passato come una query con il nome dell'immagine

Sto usando questo su img.php che aggiorna la visualizzazione della pagina nel database:

<?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);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.