Cách tốt nhất để loại trừ bot khỏi số lượt xem là gì?


11

Trang web của tôi đang đếm lượt xem của khách trên một số trang. Tôi nhận thấy rằng Google và các Bots khác đang "nhấp chuột" vào trang web của tôi như điên và một số trang có số lượt xem không thực tế (so với các trang do con người tạo ra).

Tôi đang yêu cầu thực hành tốt nhất để loại trừ các bot khỏi số lượt xem của tôi. Rõ ràng một "tác nhân người dùng" đơn giản chứa "bot" sẽ không làm điều đó.

Tôi không nghĩ rằng có một giải pháp chứng minh đạn cũng như tôi không cần một giải pháp.

Lưu ý: Tôi đang sử dụng PHP + MySQL.


Câu trả lời chính xác cho câu hỏi của bạn phụ thuộc vào loại phần mềm bạn sử dụng để theo dõi số liệu thống kê của mình.
Goboozo

@Goboozo Tôi đang sử dụng PHP + MySQL. Đây không phải là để theo dõi số liệu thống kê của tôi. Đây là về các truy vấn cho các mục "liên quan", "nóng" và "thú vị".
eisberg

Câu trả lời:


19

Tôi rất vui vì bạn biết rằng sẽ không có cách chống đạn nào để thực hiện điều này. Điều đó có nghĩa là triển vọng của bạn ít nhất là thực tế.

Vì JavaScript không phải là một tùy chọn nên tôi sẽ nói bạn còn lại với:

  • Kiểm tra tác nhân người dùng cho từ "bot" trong đó. Điều đó sẽ bắt hầu hết trong số họ.

  • Lập danh sách các bot đã biết và lọc chúng dựa trên một số loại định danh duy nhất, có thể là tác nhân người dùng của chúng.

  • Đặt một liên kết ẩn trong phần chân trang web của bạn liên kết đến một trang thu thập các tác nhân người dùng và / hoặc địa chỉ IP. Người dùng sẽ không thấy điều này nhưng bot sẽ. Vì vậy, bất cứ ai truy cập trang đó sẽ là một bot. Ghi lại chúng và sau đó chặn chúng khỏi số liệu thống kê của bạn.


Điều này có vẻ đầy hứa hẹn. Tôi thích ý tưởng về một cái bẫy. Tôi làm một cái gì đó tương tự cho các bình luận của người dùng trên trang web của tôi với trường nhập liệu vô hình (thay vì Captcha xấu xí). :-)
eisberg

2
@eisberg, Nó được gọi là honeypot. Tôi là một fan hâm mộ lớn của họ.
John Conde

có lẽ là giải pháp tốt nhất ...
vkGunasekaran 17/03/2016

7

Có ba cách khá đơn giản:

  1. Sử dụng Google Analytics, công cụ sẽ xử lý và xử lý tất cả dữ liệu cho bạn và cung cấp cho bạn số liệu thống kê chi tiết cho khách truy cập và cách họ truy cập vào trang web của bạn. Đây là giải pháp dễ nhất.
  2. Sử dụng Javascript để đếm. Khi trang đã được tải, hãy tạo một yêu cầu AJAX cho tập lệnh đếm của bạn. Robot và nhện không chạy Javascript.
  3. Phát hiện "bot" trong chuỗi tác nhân người dùng thực sự khá đáng tin cậy. Ngoài ra, bạn chỉ có thể dính vào các bot đã biết như Googlebot, Yahoo, MSNbot, v.v. Việc kiểm tra ba bot đó sẽ chiếm 99% lưu lượng bot của bạn. Trang này có một số trang khác nhưng có vẻ khá lỗi thời.

UPDATE: Googlebot và một số chương trình lớn làm chạy JavaScript những ngày này. Vì vậy, sử dụng tùy chọn # 2 một mình là không còn khả thi. Tuy nhiên, điều này không có nghĩa là sử dụng nó kết hợp với # 3 nên khá đáng tin cậy, vì bạn có thể dễ dàng loại trừ hầu hết các bot bằng cách sử dụng JS, sau đó ở phía máy chủ loại trừ các bot chính như Googlebot chạy JS.

Ngoài ra, như đã đề cập trong các nhận xét bạn có thể thử sử dụng API Google Analytics để hiển thị lượt xem cho từng trang.


1 và 2 không liên quan đến câu hỏi của tôi. Có lẽ tôi nên hỏi "Làm thế nào để tôi có được một bộ đếm lượt xem như stackechange mà bỏ qua bot?" Vì vậy, sai của tôi :-) Tuy nhiên, danh sách rất hay trong 3. Cảm ơn bạn tôi sẽ kiểm tra điều này.
eisberg

Xin lỗi, không nhận ra bạn đang hiển thị số lượt xem trên trang. Trong trường hợp đó 2 và 3 đều khả thi.
DisgruntledGoat

Cảm ơn vì nỗ lực của bạn. Ít nhất với tôi javascript không bao giờ là câu trả lời vì vậy tôi bị mắc kẹt với 3 nhưng có rất nhiều chỉ số :-(
eisberg

Trên thực tế, một số bot chạy một số JavaScript. Tôi thiết lập một yêu cầu Ajax để theo dõi kích thước khung nhìn liên quan đến kích thước màn hình. Googlebot đang báo cáo hai kích thước màn hình khác nhau.
toxalot

Tôi biết câu hỏi đã cũ và đã có giải pháp nhưng tại sao không sử dụng API Google Analitycs nếu nó chỉ hiển thị bộ đếm lượt xem của con người? stackoverflow.com/questions/19484009/
Mạnh

3

Nếu bạn sử dụng Javascript để đếm lượt xem thì hầu hết các bot sẽ không chạy nó và do đó sẽ không được bao gồm trong lượt xem của bạn. Câu trả lời này có thể gần với những gì bạn muốn /programming/1973448/how-can-i-count-a-page-view


Không, tôi không sử dụng Javascript. Nó là một trang web PHP + MySQL bình thường. Nhưng dù sao cũng cảm ơn vì đã trả lời :-)
eisberg

Đừng giảm giá câu trả lời này quá nhanh. Ngay cả với một trang web sử dụng PHP + MySQL, không có gì ngăn bạn phát ra một chút JavaScript để tạo bộ đếm lượt xem của bạn. Thay vì xuất trực tiếp bộ đếm, hãy xuất một cái gì đó như '<script> document.write (<counter-code>) </ script>' trong đó <counter-code> là bất cứ thứ gì bạn cần để tạo bộ đếm.
Itai

@Itai Xin lỗi, nhưng tôi sẽ không sử dụng javascript để đếm khách truy cập của mình. Nhưng dù sao cũng cảm ơn bạn.
eisberg

Nếu bạn không muốn sử dụng JavaScript, chỉ cần đặt nó vào câu hỏi của bạn một cách rõ ràng. Như Itai đã nói, không có gì ngăn cản chúng tôi nghĩ về giải pháp JavaScript cho một trang web PHP.
Tiến Đỗ

Trên thực tế, một số bot chạy một số JavaScript. Tôi thiết lập một yêu cầu Ajax để theo dõi kích thước khung nhìn liên quan đến kích thước màn hình. Googlebot đang báo cáo hai kích thước màn hình khác nhau.
toxalot

3

Cách tiếp cận của tôi liên quan đến hai lần:

  1. Chỉ lọc các trình duyệt web và bảng điều khiển bằng cách khớp với phần bắt đầu của chuỗi tác nhân người dùng với Mozilla|Opera|PSP|Bunjalloo|wii. Nhờ tác nhân giả mạo, kiểm tra này sẽ phát hiện gần như tất cả các trình duyệt
  2. Loại trừ bot bằng chuỗi dừng chung bot|crawl|slurp|spider

Vì vậy, nếu bước đầu tiên được thông qua, chúng tôi giả định rằng đó là một trình duyệt và có một khách truy cập thực sự đằng sau nó. Như tôi đã phát hiện ra mặc dù một số bot giả vờ Mozillatương thích và bắt đầu chuỗi tác nhân người dùng của chúng với nó. Đó là lý do tại sao đường chuyền thứ hai có thể có ích và loại bỏ chúng.

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

Tôi chỉ sử dụng loại trừ phân tích tác nhân người dùng đơn giản. Nó được loại bỏ 99% các bot đi vào trang của tôi.

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
Điều này sẽ không giúp ích (ít nhất là trong trường hợp của tôi) bởi vì hầu hết mọi bot tôi có thể xác định bằng hành vi của nó (duyệt quá nhanh, duyệt theo thời gian của tất cả các liên kết, ...) đều sử dụng Tác nhân người dùng hợp lệ. Nhưng ý tưởng tốt cho các dự án khác.
eisberg

2

Bạn có thể sử dụng hình ảnh làm bộ đếm, trong trường hợp này, nó sẽ không đếm được bot và tên trang được truyền dưới dạng truy vấn với tên hình ảnh

Tôi đang sử dụng cái này tại img.php để cập nhật chế độ xem trang trong cơ sở dữ liệu:

<?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);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.