WordPressで合理的なコメントスパム対策

広告だらけ
©いらすとや.

ブログのコメント登録の方針を簡素化

WordPressでコメント機能を有効にするとブログの記事を読んだ方からご意見ご感想をいただくことができます。 SEO的にどうかという見方もあるかもしれませんが、「俺様のお言葉ブログ」でなければ何らかのフィードバックは欲しいでしょうからコメント機能をオンにするサイトオーナーは多いでしょう。
しかし、コメント欄を付けると記事の読者さんからのご意見ご感想の数百数千数万倍のコメントスパムが付くことになります。コメントスパムはほぼ全て何らかの広告か詐欺で、それが大量だと非常に迷惑です。
WordPressでは標準で付属するAkismetプラグインを使用することでコメントスパムを自動的にスパムとそうでなさそうなコメントを分類してくれます。これでコメント管理がラクになる可能性がありますが、実際に使ってみると英語コメントの検知は良好ではあるもののフォールスポジティブ(擬陽性)/フォールスネガティブ(偽陰性)が無いわけではないので結局全てのコメントをリスト表示して確認することになります。スパマーに存在を認識されているようなブログだと1日に数十〜数百件のコメントスパムが登録されるので目を通すのが面倒でしょう。

広告/詐欺のコメントスパムは、ほぼ全て1つ以上のURL(リンク)が含まれています。スメントスパムに何かいろいろ書かれていても、それはオマケであって一番大切なのは「誘導先のURL」です。つまり、「コメントスパムを要約するとURL」といえます。
大抵は自動送信なのでコメント送信についてのルールを表示していても従ってくれることありません。これに対してページの読者さん(人間)のご意見ご感想コメントはURLが含まれないことが多いでしょうし「URLを含めないで下さい」などと表示しておけばそれに従って貰える筈です。
ということは、「URLを含めないで下さい」と表示した上で、URLが含まれなければコメントとして登録(ただし公開保留)し、URLが含まれていれば登録せずに廃棄する。これが最も簡単で合理的です。余計な仕組み(Akismetプラグイン等)も要りません。不要なプラグインはなるべく削除しましょう。

WordPressの設定

WordPressのコメントスパム対策 1
WordPress管理パネルの「設定」から「ディスカッション」の設定でコメントを許可した上で、「コメント内で許可されないキーワード」にURLに含まれる文字列を登録する。「 http 」(これは https も当てはまる)や「 :// 」がそれ。他にコメントスパムの発信元IPアドレスやコメントスパムに含まれる単語などを書く。(1行に1つ書く)
設定変更したら一番下の「設定の保存」を忘れずに。

WordPressのコメントスパム対策 2
記事のコメント欄でコメント本文にURL (上の画像では https://example.com/test )を含めて「コメントを送信」する。

WordPressのコメントスパム対策 3
設定変更をしただけの場合は、WordPressの管理パネルのコメントページで「ゴミ箱」に直接入るようになる。ゴミ箱に入った場合は「コメントが○件の通知」の赤丸は表示されない。これが「コメント内で許可されないキーワード」に登録した文字列がヒットした場合のデフォルトの動作。
「コメント内で許可されないキーワード」に登録した文字列がヒットしなかった(URLが含まれない)場合は「ゴミ箱」ではなく「承認待ち」に入る。管理人が内容を確認して「承認する」をすればコメントが公開される。ここまで「コメントの手動承認を必須にする」にチェックしている場合。要するに普通のコメントが送信された場合の挙動。

WordPressの処理変更でゴミ箱から登録無しにする

WordPressの在り処/wp-content/themes/使用中テーマ/functions.php (最後にでも追加する)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function custom_comment_form_defaults($args) {
  $args['title_reply'] = '記事へのコメント';
  $args['comment_notes_before'] = '<p class="comment-notes"><span id="email-notes">いただいたコメントは管理人が確認した後に記事の下部(ここ)>に公開されます。<br />コメントスパム対策でコメント内にリンクURLを含めると自動破棄されます。(記録されません)</span></p>';
  return $args;
}
add_filter('comment_form_defaults', 'custom_comment_form_defaults');


function custom_comment_form_default_fields($fields) {
  if(isset($fields['url'])){
    unset($fields['url']);
  }
  $fields['author'] = '<p class="comment-form-author"><label for="author">名前 (公開されるのでテキトーで可)<span class="required">*</span></label> <input id="author" name="author" type="text" value="" size="30" maxlength="245" required="required" /></p>';
  $fields['email'] = '<p class="comment-form-email"><label for="email">メール (メールアドレスは公開されません) <span class="required">*</span></label> <input id="email" name="email" type="email" value="" size="30" maxlength="100" aria-describedby="email-notes" required="required" /></p>';
  return $fields;
}
add_filter('comment_form_default_fields', 'custom_comment_form_default_fields');


//コメントスパムは保存せずに破棄する  wp-includes/comment.phpの一部処理をオーバーライドするフィルタ
function bny_pre_comment_approved($approved, $commentdata) {
  if ( wp_check_comment_disallowed_list(
    $commentdata['comment_author'],
    $commentdata['comment_author_email'],
    $commentdata['comment_author_url'],
    $commentdata['comment_content'],
    $commentdata['comment_author_IP'],
    $commentdata['comment_agent']
  ) ) {
    //$approved = 'trash';  //ゴミ箱へ (デフォルト動作)
    wp_die('Thank you for your spam comment.');  //表示だけして保存せず終了
  }
  return $approved;
}
add_filter('pre_comment_approved', 'custom_pre_comment_approved', 1, 2);

1〜17行目はコメント入力欄に表示するメッセージのカスタムです。URLを含むメッセージは登録されずに破棄する旨を人間の読者さんに伝えることは重要です。
この記事のキモは21行目から最後です。

WordPressのコメントスパム対策 2
再び、記事のコメント欄でコメント本文にURL (上の画像では https://example.com/test )を含めて「コメントを送信」する。

WordPressのコメントスパム対策 4
今回は「コメントを送信」直後に(コメントスパムを送信した人のブラウザに)「Thank you for your spam comment」(スパムコメントありがと)という皮肉が表示される。ただし、実際には自動化されたスパム送信システムを使うだろうから、おそらくブラウザは使ってなくてこのメッセージが表示されることはなさそう。

WordPressのコメントスパム対策 5
コメントスパムは登録されずに「無かったこと」になるので「ゴミ箱」にも「承認待ち」にも入らない。

合理的にできました

これで、大量にコメントスパムを付けられてもほぼほぼ何もしなくて済みます。というかコメントスパムが送信されたことすら知らなくて済むでしょう。WordPressのデータベースも汚されません。
毎日数十〜数百届くコメントスパムは皆無になるのでAkismetプラグインは無効化するか無効化後に削除して構いません。ときどき意味不明な文字列が書かれた謎コメントが送信されることがありますが月に数個程度でしょう。この謎コメントはコメント送信可能なブログ(ウェブサイト)を探すボットのようなものかもしれません。無視して良さそうです。

関連記事: