私のWordPressブログサイトは、以前から正確でない閲覧数に悩まされてきました。主な原因は、さまざまなクローラーや悪意のあるボット(Bad Bots)が閲覧数に含まれてしまうことです。最近、これらの虚増したクリック数を解消または減らすために、いくつかの方法を試してみました。

主な対策は2つあります。

  1. 閲覧数カウント用のスクリプトを修正し、クローラーを除外する
  2. Bad Botsの閲覧を拒否するプラグインを導入し、悪質なアクセスを遮断する

1. 閲覧数カウントプラグインの変更

私のサイトでは長らく Daily Top 10 Posts プラグインを使用してきましたが、多少のカスタマイズを加えてもクローラーの訪問を除外できませんでした。そこで最近、より新しい構造の Page Views Count プラグインに置き換えました。クローラーを排除するため、PHPファイルを2つ修正しました。どちらも閲覧数を更新する前にリクエストがクローラーかどうかを判定する処理を追加しています。

  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'] : '';

    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 Bad Botsプラグインの利用

セキュリティ上の脅威となるBad Botsをより効果的に除外するため、思い切って Stop Bad Bots プラグインを購入しました。2022年10月、サイトのバックドア型マルウェアを処理した際には Wordfence Security(参考:WordPressサイトのバックドアReval.C除去記録)を使用していましたが、Wordfenceは年額購読型で費用が高めなため、最終的には比較的安価なStop Bad Botsを使用してBad Botsを遮断することにしました。

Stop Bad BotsはBad BotsやBad IPsのリストを自動で更新でき、Visits Logから任意のIPをブラックリストに追加することも可能です。怪しいアクセスを発見した際には【Blacklist IP】をクリックすることで、そのIPからのアクセスを遮断できます。

gh|700

また、訪問統計やグラフ機能もあり、どのページが悪質な閲覧を受けているかを判断しやすく、Visits Logから該当IPを見つけてブラックリストに追加できます。

3. 結語

これらの対策によって、私のサイトがより安全で堅牢になることを願っています。もし読者の皆さんが他の有効な方法をご存じでしたら、ぜひコメントで共有してください。

4. 💡 関連リンク

✅ 解説記事(繁体字中国語):https://jdev.tw/blog/9091/
Explanation article (English)
解説記事(日本語)

Page Views Count
Stop Bad Bots