Qual é a melhor maneira de excluir bots da contagem de visualizações?

11

Meu site está contando visualizações de visitantes em determinadas páginas. Percebi que o Google e outros Bots estão "clicando" no meu site como loucos e algumas páginas têm contagens de visualizações irrealistas (em comparação com as produzidas por humanos).

Estou pedindo as melhores práticas para excluir esses bots da minha contagem de visualizações. Obviamente, um simples "agente do usuário" contém "bot" não fará isso.

Não acho que exista uma solução à prova de balas nem preciso de uma.

Nota: Estou usando PHP + MySQL.

eisberg
fonte
A resposta correta para sua pergunta depende do tipo de software que você usa para rastrear suas estatísticas.
precisa saber é o seguinte
@Goooo Estou usando PHP + MySQL. Isto não é para rastrear minhas estatísticas. Trata-se de consultas para entradas "relacionadas", "quentes" e "interessantes".
Eisberg

Respostas:

19

Fico feliz que você saiba que não haverá uma maneira à prova de balas para fazer isso. Isso significa que sua perspectiva é pelo menos realista.

Como o JavaScript não é uma opção, eu diria que você fica com:

  • Verifique o user agent para a palavra "bot" nele. Isso vai pegar a maioria deles.

  • Compile uma lista de bots conhecidos e filtre-os com base em algum tipo de identificador exclusivo, provavelmente o agente do usuário.

  • Coloque um link oculto no rodapé do site que direcione para uma página que coleta agentes do usuário e / ou endereços IP. Os usuários não verão isso, mas os robôs verão. Portanto, quem visitar essa página será um bot. Registre-os e bloqueie-os de suas estatísticas.

John Conde
fonte
Isso parece promissor. Eu gosto da ideia de uma armadilha. Faço algo parecido com os comentários do usuário no meu site com um campo de entrada invisível (em vez de um Captcha feio). :-)
eisberg 07/04
2
@eisberg, é chamado de honeypot. Eu também sou um grande fã deles.
John Conde
provavelmente melhor solução ...
vkGunasekaran
7

Existem três maneiras bastante simples:

  1. Use o Google Analytics, que processará e manipulará todos os dados para você e apresentará estatísticas detalhadas para os visitantes e como eles chegaram ao seu site. Esta é de longe a solução mais fácil.
  2. Use Javascript para fazer a contagem. Quando a página for carregada, gere uma solicitação AJAX para o seu script de contagem. Robôs e aranhas não executam Javascript.
  3. Detectar "bot" na string do agente do usuário é realmente bastante confiável. Como alternativa, você pode usar apenas os bots conhecidos, como Googlebot, Yahoo, MSNbot etc. A verificação desses três deve cobrir 99% do tráfego de bot. Esta página tem outras, mas parece bastante desatualizada.

UPDATE: Googlebot e alguns dos principais bots não executar JavaScript nestes dias. Portanto, o uso da opção nº 2 não é mais viável. No entanto, isso significa que usá-lo em conjunto com o nº 3 deve ser bastante confiável, pois você pode excluir facilmente a maioria dos bots usando JS e, no lado do servidor, excluir os principais bots, como o Googlebot, que executam JS.

Também conforme mencionado nos comentários, você pode tentar usar a API do Google Analytics para exibir visualizações para cada página.

DisgruntledGoat
fonte
1 e 2 não estão relacionados à minha pergunta. Talvez eu devesse ter perguntado "Como obtenho um contador de visualizações como o stackechange que ignora bots?" so my false :-) No entanto, lista muito boa em 3. Obrigado, vou verificar isso.
Eisberg #
Desculpe, você não percebeu que estava exibindo a contagem de visualizações na página. Nesse caso, 2 e 3 são viáveis.
usar o seguinte
Obrigado pelo esforço. Pelo menos para mim javascript nunca é a resposta, por isso estou preso com 3, mas há tantos indicadores :-(
Eisberg
Na verdade, alguns bots executam algum JavaScript. Configurei uma solicitação do Ajax para rastrear o tamanho da viewport em relação ao tamanho da tela. O Googlebot está relatando dois tamanhos de tela diferentes.
toxalot
Sei que a pergunta é antiga e já tem uma solução, mas por que não usar a API do Google Analitycs se é apenas para mostrar um contador de visualizações humanas? stackoverflow.com/questions/19484009/...
KeizerBridge
3

Se você usar o Javascript para contar visualizações, a maioria dos bots não executará e, portanto, não será incluído nas contagens de visualizações. Esta resposta pode estar próxima do que você deseja /programming/1973448/how-can-i-count-a-page-views

paulmorriss
fonte
Não, eu não estou usando Javascript. É um site PHP + MySQL normal. Mas obrigado pela resposta de qualquer maneira :-)
Eisberg
Não desconsidere esta resposta tão rápido. Mesmo com um site usando PHP + MySQL, nada impede que você emita um pouco de JavaScript para gerar seu contador de visualizações. Em vez de emitir diretamente o contador, digite algo como '<script> document.write (<counter-code>) </script>' onde <counter-code> é o que você precisa para criar seu contador.
Itai 05/04
@Itai Desculpe, mas não usarei javascript para contar meus visitantes. Mas obrigada mesmo assim.
Eisberg
Se você não quiser usar JavaScript, basta colocá-lo na sua pergunta com clareza. Como o Itai disse, nada nos impede de pensar na solução JavaScript para um site PHP.
Tien Do
Na verdade, alguns bots executam algum JavaScript. Configurei uma solicitação do Ajax para rastrear o tamanho da viewport em relação ao tamanho da tela. O Googlebot está relatando dois tamanhos de tela diferentes.
toxalot
3

Minha abordagem envolve duas passagens:

  1. Filtre apenas navegadores e consoles da web combinando o início da cadeia de caracteres do agente do usuário Mozilla|Opera|PSP|Bunjalloo|wii. Graças ao agente do usuário que falsifica, essa verificação detecta quase todos os navegadores
  2. Excluir bots por strings de parada comuns bot|crawl|slurp|spider

Portanto, se o primeiro passo for passado, assumimos que é um navegador e que existe um visitante real por trás dele. Como eu descobri, alguns bots fingem ser Mozillacompatíveis e iniciam sua string de agente de usuário com ele. É por isso que o segundo passe pode ser útil e eliminá-los.

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
fonte
2

Eu uso apenas a exclusão de análise de agente de usuário simples. Ele elimina 99% dos bots que entram nas minhas páginas.

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
fonte
1
Isso não ajudaria (pelo menos no meu caso), porque quase todos os bot que eu consigo identificar por seu comportamento (navegação muito rápida, navegação cronológica de todos os links ...) usam um agente de usuário válido. Mas boa ideia para outros projetos.
Eisberg
2

Você pode usar uma imagem como um contador. Nesse caso, ela não conta bots e o nome da página é passado como uma consulta com o nome da imagem.

Estou usando isso no img.php, que atualiza a exibição da página no banco de dados:

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