コメントスパムを自動でブロックする方法

WordPressのコメントフォームは便利ですが、スパムコメントが多くなると管理が大変です。ここでは、

  • コメントスパムを自動で判定・ブロックする方法
  • IP制限を追加して特定ユーザーを拒否する方法

を紹介します。

1 実装のポイント

  • functions.php にコードを追加してコメント送信前に判定
  • 特定の単語やURLを含むコメントを自動で拒否
  • 特定IPからの投稿をブロック可能
  • JavaScriptによる簡易チェックでフォーム送信前に警告も可能

2 functions.php にコードを追加


//-------------------------------------------
// コメントスパムを自動ブロックする例
//-------------------------------------------
add_filter('preprocess_comment', function($commentdata) {
    // スパムワードリスト
    $spam_words = array('viagra','casino','http://');
    foreach($spam_words as $word) {
        if(stripos($commentdata['comment_content'], $word) !== false){
            wp_die('スパムコメントと判定されました。');
        }
    }

    // 特定IPをブロック
    $blocked_ips = array('123.45.67.89','111.222.333.444');
    $user_ip = $_SERVER['REMOTE_ADDR'];
    foreach($blocked_ips as $blocked){
        $pattern = '/^' . str_replace('\*', '.*', preg_quote($blocked, '/')) . '$/';
        if(preg_match($pattern, $user_ip)){
            wp_die('あなたのIPからのコメントは拒否されました。');
        }
    }

    return $commentdata;
});
  
補足:

  • $spam_words = array('viagra','casino','http://');のスパムワードは必要に応じて追加してください。
  • $blocked_ips = array('123.45.67.89','111.222.333.444');はワイルドカード(例:123.45.67.*)を使ってIP範囲を拒否可能です。
  • 動的IPやプロキシ経由では正確にブロックできない場合があります。

3 javascript にコードを追加

ファイル名:spam-block.js
保存先:wp-content/themes/child-theme/js/spam-block.js


//-------------------------------------------
// 簡易チェック例(フォーム送信前)
//-------------------------------------------
document.addEventListener('DOMContentLoaded', function(){
  var commentForm = document.getElementById('commentform');
  if(commentForm){
    commentForm.addEventListener('submit', function(e){
      var comment = document.getElementById('comment').value;
      if(comment.indexOf('http://') !== -1 || comment.indexOf('viagra') !== -1){
        alert('スパムと思われる内容が含まれています。');
        e.preventDefault();
      }
    });
  }
});
  

3.1 ディレクトリ構造

  • child-theme/
    • style.css
    • functions.php
    • footer.php
    • header.php
    • js/
      • spam-block.js
    • images/
      • logo.png

4 完成イメージ

4.1 スパムと判定されました。

スパムと判定されました。

4.2 あなたのIPからのコメントは拒否されました。

あなたのIPからのコメントは拒否されました。

5 代用プラグイン

プラグインを使う場合は、Akismet Anti-SpamWP SpamShield などを利用すると、より精度高くスパムをブロックできます。

6 まとめ

functions.php に少しのコードを追加するだけで、コメントフォームのスパム対策を自動化できます。IP制限やキーワード判定を組み合わせることで、管理負担を大幅に減らせます。プラグインと併用するとさらに安全です。