我的WordPress部落格網站一直被瀏覽數不正確困擾著,主因是各種爬蟲程式、惡意機器人(Bad Bots)都被算進瀏覽數,最近嘗試了幾個方法來解決或降低這些虛增的點擊數。

主要方案有二:

  1. 修改瀏覽計數程式以排除爬蟲程式
  2. 安裝拒絕Bad Bots瀏覽的外掛以阻絕惡意瀏覽

1. 變更瀏覽計數外掛

我網站使用的一直是Daily Top 10 Posts外掛,加上一些自己的小修改,很顯然無法排除爬蟲程式的拜訪。最近以架構較新的Page Views Count外掛來取代。為了排除爬蟲程式,修改了兩支PHP程式,主要都是在變更瀏覽數前判斷Request是否是爬蟲程式:

  public static function pvc_is_bot() {
  	 // 檢查是否有人登入.  登入時不計算瀏覽數
    if ( is_user_logged_in() ) {
    	return true;
    }

    // 常見爬蟲清單
    $bots = array(
    // 搜尋引擎常見爬蟲
      'Googlebot',
      'Bingbot',
      'Slurp',        // Yahoo
      'DuckDuckBot',
      'Baiduspider',
      'YandexBot',
      'Sogou',
      'Exabot',
      'facebot',
      'ia_archiver',
      // 其他常見爬蟲/SEO工具
      'AhrefsBot',
      'MJ12bot',      // Majestic-12
      'SemrushBot',
      'DotBot',       // Moz
      'PetalBot',     // Huawei
      'SeznamBot',    // Seznam (捷克)
      'LinkedInBot',
      'Twitterbot',
      'Discordbot',
      'Pinterestbot',
      'Applebot',
      'CoccocBot',    // 越南搜尋引擎
      'archive.org_bot',
      'leakix'  // leakix.org
    );
    $ua = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
    //echo "<!-- HTTP_USER_AGENT=" . $ua . "-->";

    foreach ($bots as $bot) {
        if (stripos($ua, $bot) !== false) {
            return true; // 是爬蟲,不計數
        }
    }
    return false; // 不是爬蟲,可以計數
  }
}

在更新瀏覽數前先判斷是否是爬蟲程式,若是爬蟲程式則不執行更新的SQL:

	public static function pvc_stats_update($post_id) {
		if (self::pvc_is_bot()) {
    		return 0;
    	}
    // ...

另一支前端以AJAX叫用的 pvc-api.php 也要加上相同判斷:

    public function pvc_increase( $post_ids ) {
    	if (A3_PVC::pvc_is_bot()) {
    		return wp_send_json( array(
                'success' => false,
                'message' => __( "Bot detected", 'page-views-count' ),
            ) );
    	}
    // ...

2. 使用 Stop Bot Bots外掛

為了比較有效的排除造成安全威脅的Bad Bots,忍痛購買了Stop Bad Bots外掛。我在2022年10月份時處理網站後門木馬時使用的是Wordfences security(參考:WordPress網站清除後門Reval.C記錄),因為Wordfences是採用年度訂閱且費用不低,最後還是使用相對便宜的Stop Bad Bots來阻擋Bad Bots。

Stop Bad Bots會自動更新Bad Bots與Bad IPs清單,也能透過 Vistis Log 自行將某個IP加入黑名單,因此當發現可疑瀏覽時,可以點擊【Blacklist IP】將該IP加入無法瀏覽的黑名單裡。

gh|700

Stop Bad Bots也有拜訪的統計與圖表可讓我們判斷那些網頁可能是被惡意瀏覽,再由Visits Log裡找出將之加入黑名單。

3. 結語

希望經過這些努力,能讓我的網站更加安全與牢固。若看官朋友們有別的使用經驗的話,也請留言分享。

4. 💡 相關鏈接

✅ 解說文章(繁體中文): https://jdev.tw/blog/9091/

Explanation article(English)

解説記事(日本語)

Page Views Count

Stop Bad Bots

##