我的WordPress部落格網站一直被瀏覽數不正確困擾著,主因是各種爬蟲程式、惡意機器人(Bad Bots)都被算進瀏覽數,最近嘗試了幾個方法來解決或降低這些虛增的點擊數。
主要方案有二:
- 修改瀏覽計數程式以排除爬蟲程式
- 安裝拒絕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加入無法瀏覽的黑名單裡。
Stop Bad Bots也有拜訪的統計與圖表可讓我們判斷那些網頁可能是被惡意瀏覽,再由Visits Log裡找出將之加入黑名單。
3. 結語
希望經過這些努力,能讓我的網站更加安全與牢固。若看官朋友們有別的使用經驗的話,也請留言分享。
4. 💡 相關鏈接
✅ 解說文章(繁體中文): https://jdev.tw/blog/9091/
✅ Explanation article(English)
##