Botları görüntüleme sayılarından hariç tutmanın en iyi yolu nedir?


12

Web sitem belirli sayfalardaki ziyaretçi görüntülemelerini sayıyor. Google ve diğer Botların sitemi çılgın gibi "tıkladığını" ve bazı sayfaların gerçekçi olmayan görüntüleme sayıları aldığını fark ettim (insanlar tarafından üretilenlere kıyasla).

Bu botları görüş sayımımın dışında tutmak için en iyi uygulamaları istiyorum. Açıkçası basit bir "kullanıcı aracısı" içerir "bot" yapmaz.

Ben bir kurşun kanıtlama çözümü olduğunu sanmıyorum ne de ihtiyacım var.

Not: PHP + MySQL kullanıyorum.


Sorunuza doğru yanıt, istatistiklerinizi izlemek için kullandığınız yazılım türüne bağlıdır.
Goboozo

@Goboozo PHP + MySQL kullanıyorum. Bu istatistiklerimi izlemek için değil. Bu, "ilgili", "sıcak" ve "ilginç" girişlere ilişkin sorgularla ilgilidir.
eisberg

Yanıtlar:


19

Bunu başarmak için kurşun geçirmez bir yol olmayacağını bildiğinize sevindim. Bu, görünümünüzün en azından gerçekçi olduğu anlamına gelir.

JavaScript bir seçenek olmadığından, size bırakıldığını söyleyebilirim:

  • İçinde "bot" kelimesi için kullanıcı aracısına bakın. Bu onların çoğunu yakalayacak.

  • Bilinen botların bir listesini derleyin ve bir tür benzersiz tanımlayıcıya, muhtemelen kullanıcı aracılarına göre filtreleyin.

  • Web sitenizin altbilgisine, kullanıcı aracılarını ve / veya IP adreslerini toplayan bir sayfaya bağlantı veren gizli bir bağlantı yerleştirin. Kullanıcılar bunu görmez, ancak botlar görür. Yani bu sayfayı ziyaret eden herkes bot olacak. Onları kaydedin ve istatistiklerinizden engelleyin.


Bu umut verici görünüyor. Bir tuzak fikrini seviyorum. Görünmez bir giriş alanı (çirkin bir Captcha yerine) sitemdeki kullanıcı yorumları için benzer bir şey yapıyorum. :-)
eisberg

2
@eisberg, Buna bal küpü deniyor. Ben büyük bir hayranıyım.
John Conde

muhtemelen en iyi çözüm ...
vkGunasekaran

7

Oldukça basit üç yol var:

  1. Sizin için tüm verileri işleyecek ve işleyecek Google Analytics'i kullanın ve ziyaretçiler ve sitenize nasıl ulaştıklarına ilişkin ayrıntılı istatistikler sağlayın. Bu açık ara en kolay çözümdür.
  2. Sayımı yapmak için Javascript kullanın. Sayfa yüklendiğinde, sayma komut dosyanız için bir AJAX isteği oluşturun. Robotlar ve örümcekler Javascript çalıştırmaz.
  3. Kullanıcı aracısı dizesindeki "bot" u algılamak aslında oldukça güvenilirdir. Alternatif olarak, yalnızca Googlebot, Yahoo, MSNbot vb. Gibi bilinen botlara sadık kalabilirsiniz. Bu üçünün kontrol edilmesi bot trafiğinizin% 99'unu kapsamalıdır. Bu sayfanın başkaları var, ancak oldukça eski görünüyor.

GÜNCELLEME: Googlebot ve bazı büyük botlar yok bugünlerde JavaScript çalıştırmasına. Bu nedenle # 2 seçeneğini tek başına kullanmak artık geçerli değildir. Bununla birlikte, bu, # 3 ile birlikte kullanmanın oldukça güvenilir olması gerektiği anlamına gelir, çünkü JS'yi kullanarak çoğu botu kolayca hariç tutabilir, daha sonra sunucu tarafında Googlebot gibi JS çalıştıran büyük botları hariç tutabilirsiniz.

Ayrıca yorumlarda belirtildiği gibi, her bir sayfanın görünümlerini görüntülemek için Google Analytics API'sını kullanmayı deneyebilirsiniz.


1 ve 2 sorumla ilgisiz. Belki de "Botları yok sayan stackechange gibi bir görüntüleme sayacını nasıl alabilirim?" Bu yüzden benim yanlış :-) Yine de 3'te çok güzel bir liste. Teşekkür ederim ben bunu kontrol edecektir.
eisberg

Maalesef, sayfada görüntüleme sayısını görüntülediğinizi fark etmedim. Bu durumda 2 ve 3'ün her ikisi de uygulanabilir.
DisgruntledGoat

Çaba için teşekkürler. En azından benim için javascript asla cevap değil bu yüzden 3 ile sıkışmış ama çok sayıda gösterge vardır :-(
eisberg

Aslında, bazı botlar JavaScript çalıştırıyor. Ekran boyutuyla ilişkili olarak görüntü alanı boyutunu izlemek için bir Ajax isteği ayarladım. Googlebot iki farklı ekran boyutu bildiriyor.
toxalot

Sorunun eski olduğunu ve zaten bir çözümü olduğunu biliyorum, ancak Google Analitycs API'sını neden sadece bir insan görüntüleme sayacı göstermek için kullanmıyorsunuz? stackoverflow.com/questions/19484009/…
KeizerBridge

3

Görünümleri saymak için Javascript kullanırsanız, çoğu bot bunu çalıştırmaz ve görüntüleme sayılarınıza dahil edilmez. Bu cevap istediğiniz şeye yakın olabilir /programming/1973448/how-can-i-count-a-page-views


Hayır Javascript kullanmıyorum. Normal bir PHP + MySQL web sitesidir. Ama yine de cevap için teşekkürler :-)
eisberg

Bu cevabı çok hızlı indirmeyin. PHP + MySQL kullanan bir siteyle bile, hiçbir şey görüntüleme sayacınızı oluşturmak için biraz JavaScript yaymanızı engellemez. Sayacı doğrudan çıktılamak yerine, '<script> document.write (<counter-code>) </script>' gibi bir şey çıktılayın; burada <counter-code> sayacınızı oluşturmak için ihtiyacınız olan şeydir.
Itai

@Itai Üzgünüm, ancak ziyaretçilerimi saymak için javascript kullanmayacağım. Ama yine de teşekkürler.
eisberg

JavaScript kullanmak istemiyorsanız, sorunuzu açıkça belirtmeniz yeterlidir. Itai'nin dediği gibi, hiçbir şey bir PHP sitesi için JavaScript çözümünü düşünmemizi engellemiyor.
Tien Do

Aslında, bazı botlar JavaScript çalıştırıyor. Ekran boyutuyla ilişkili olarak görüntü alanı boyutunu izlemek için bir Ajax isteği ayarladım. Googlebot iki farklı ekran boyutu bildiriyor.
toxalot

3

Benim yaklaşımım iki geçişi içeriyor:

  1. Yalnızca kullanıcı aracısı dizesinin başlangıcıyla eşleştirerek yalnızca web tarayıcılarını ve konsolları filtreleyin Mozilla|Opera|PSP|Bunjalloo|wii. Kimlik sahtekarlığı yapan kullanıcı aracısı sayesinde bu kontrol hemen hemen tüm tarayıcıları algılar
  2. Botları yaygın durdurma dizelerine göre hariç tutma bot|crawl|slurp|spider

Yani ilk adım geçilirse, bunun bir tarayıcı olduğunu ve arkasında gerçek bir ziyaretçi olduğunu varsayarız. Bazı botlar Mozillauyumlu gibi davranarak ve kullanıcı aracısı dizesini onunla başlatmış gibi öğrendim . Bu yüzden ikinci geçiş işe yarayabilir ve onları ortadan kaldırabilir.

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

Dışlama ayrıştırmak için yalnızca basit kullanıcı aracısı kullanıyorum. Sayfalarıma giren botların% 99'undan kurtulur.

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
Bu yardımcı olmaz (en azından benim durumumda), çünkü davranışıyla tanımlayabildiğim hemen hemen her bot (çok hızlı tarama, tüm bağlantıların kronolojik olarak taranması, ...) geçerli bir User-Agent kullanıyor. Ama diğer projeler için iyi bir fikir.
eisberg

2

Bir görüntüyü sayaç olarak kullanabilirsiniz, bu durumda botları saymaz ve sayfa adı resim adıyla sorgu olarak iletilir

Bu veritabanında sayfa görünümünü güncelleme img.php kullanıyorum:

<?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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.