ディスカッションをオフにしているのにWordPressにコメントスパムが来る…原因と対策

WordPressの管理画面で「設定」→「ディスカッション」を開き、「新しい投稿へのコメントを許可する」のチェックを外した。これでスパムは来なくなるはずだと思っていたのに、管理画面を開くとコメント欄にスパムが溜まっている・・・そんな経験はないでしょうか。
実はこれ、かなり多くのWordPressサイト運営者が直面する問題です。
この記事では、「なぜディスカッションをオフにしているのにスパムコメントが来るのか」という仕組みから、根本的な対策まで順を追って解説します。
ディスカッション設定をオフにしても、スパムが来る理由
まず前提として、WordPressのディスカッション設定(「新しい投稿へのコメントを許可する」)は、サイトのコメント欄の表示をオフにする設定であり、コメント機能そのものを無効化するものではありません。
WordPressのコメント投稿は、「wp-comments-post.php」というファイルが処理しています。このファイルへ直接POSTリクエストを送信すれば、コメント欄が表示されていなくても、技術的にはコメントの投稿が可能です。
スパムを送り付けているのは、ほぼ100%が人間ではなくボット(自動プログラム)です。
このボットはインターネット上を巡回し、WordPressのサイト構造を検出すると、wp-comments-post.phpに対して機械的にスパムを送り込みます。コメント欄が見えているかどうかは関係なく、WordPressで構築されたサイトであればwp-comments-post.phpというファイルがあり、そこがコメントの処理を担っていると決まっているので、標的になります。
つまり、ディスカッション設定をオフにしても「コメント欄が訪問者から見えなくなるだけ」であり、ボットは直接PHPファイルを叩いてスパムを送り続けることができるのです。
もう一つの落とし穴:設定変更前の既存記事
さらに注意が必要なのが、ディスカッションをオフにした「後」の記事にしか設定が反映されないという点です。
WordPressの「設定」→「ディスカッション」から「新しい投稿へのコメントを許可する」をオフにしても、それは今後作成する記事に対するデフォルト設定が変わるだけです。すでに公開済みの記事については、個別にコメントを無効にしない限り、コメントが受け付けられたままになります。
記事数が多いサイトでは、この「既存記事への個別対応漏れ」がスパム侵入口になっているケースが少なくありません。
とはいえ、先ほど述べたようにワードプレスを使っている限り ディスカッションがオフになっていてもPHPファイルにボットが直接アクセスしてコメントをしているんで、コメント欄を出しているか出していないかは最近はそれほど意味はありません。一昔前であればコメント欄に対してスパムメッセージを入れることが一般的だったので以前であればディスカッションをオフにしてコメント欄を非表示にしていればある程度対策できていました。
スパムボットの目的は何か
「なぜそんなに執拗にスパムを送ってくるのか」と思われるかもしれません。スパムボットの主な目的は以下の3つです。
| 目的 | 内容 |
|---|---|
| 被リンクの獲得(SEOスパム) | 違法薬物・アダルト・詐欺サイトなどへのリンクをコメントに仕込み、検索エンジン評価を上げようとする |
| 不正サイトへの誘導 | フィッシングサイトやマルウェア配布ページへのURLをコメントに貼り付ける |
| 管理者への通知メール爆撃 | コメントが届くたびに管理者へ通知メールが送られる仕組みを悪用し、大量のメールを送信させる |
スパムコメントがサイトに表示されてしまうとSEOにも悪影響があり、放置は禁物です。管理画面に溜まり続けるだけでもサーバー負荷につながります。
対策① 「Disable Comments」プラグインでコメント機能を完全無効化する
最も根本的な対策は、WordPressのコメント機能そのものを完全に無効化することです。ディスカッション設定のオフではなく、プラグイン「Disable Comments」を使って機能レベルから止めます。
この「Disable Comments」プラグインを「どこでも(Everywhere)」の設定で有効化すると、wp-comments-post.phpへの直接POSTも含めてコメント機能が完全に無効化されます。ディスカッション設定すら操作できなくなるほど徹底的に機能を止められます。
コメント欄を今後も使う予定がないサイトであれば、これが最もシンプルで確実な対策です。
対策② 既存記事のコメントを一括でオフにする
Disable Commentsを使わずに対処する場合、または既存記事への個別設定漏れを解消したい場合は、投稿一覧から一括変更が可能です。
「投稿」→「投稿一覧」を開き、全記事を選択した状態で「一括操作」→「編集」を選ぶと、コメントを一括でオフにする設定が表示されます。記事数が多いサイトでは、ページごとに繰り返す必要がありますが、個別に設定するよりは大幅に効率的です。ただ、これはあくまでもページ上のコメント欄を見えなくするというだけなので、PHP を直接操作しに来るタイプのスパムには効きません。
対策③ コメント機能を残す場合はAkismetとreCAPTCHAを併用する
コメント欄を読者とのコミュニケーションとして活用したい場合は、コメント機能を残しながらスパムをフィルタリングする対策が必要です。
| 対策 | 概要 | 商用利用 |
|---|---|---|
| Akismet | 投稿されたコメントをスパム判定サーバーで自動フィルタリング。WordPressに標準搭載 | 有料プランが必要 |
| Google reCAPTCHA | コメントフォームにキャプチャを設置しボット投稿を防ぐ | 無料 |
| Throws SPAM Away | 日本語が含まれないコメントを自動拒否。海外ボットに高い効果 | 無料 |
| WP Armour(ハニーポット) | 人間には見えない隠しフィールドにボットが入力した場合にスパム判定 | 無料 |
特に日本語サイトの場合、「Throws SPAM Away」は導入が簡単で効果が高いプラグインです。海外ボットからのスパムコメントの大半は英語や意味不明な文字列であるため、日本語を含まないコメントを一律拒否するだけで劇的に件数が減ります。
対策④ サーバー側の「海外アクセス制限」を活用する
レンタルサーバーによっては、管理画面からwp-comments-post.phpへの海外IPアクセスを遮断する機能が用意されています。
| サーバー | 設定箇所 |
|---|---|
| エックスサーバー | 「WordPressセキュリティ設定」→「コメント・トラックバック制限」をON |
| ConoHa WING | 「WordPressセキュリティ」→「海外アクセス制限」→「コメント制限」をON |
| ロリポップ | 「海外アタックガード」が標準で有効(wp-comments-post.phpへの海外アクセスをブロック) |
スパムボットの大多数は海外のIPアドレスから送信されているため、この設定だけで劇的にスパムが減るケースも多いです。WordPressの設定やプラグインではなくサーバー側で処理するため、サイトへの負荷もかかりません。
ただしこの機能も海外の不正が多い IP アドレスからのwp-comments-post.phpへのアクセスをブロックするもので、まだマークされていないIP アドレスからのスパム投稿に対しては効かないでコメント投稿されてしまうことがあります。
状況別の推奨対策
| 状況 | 推奨対策 |
|---|---|
| コメント機能を今後使う予定がない | 「Disable Comments」プラグインで機能ごと無効化 |
| コメント機能は残したいがスパムだけ止めたい | Throws SPAM Away + サーバー側の海外アクセス制限 |
| 商用サイトでより精度の高いフィルタリングが必要 | Akismet有料版 + reCAPTCHA の併用 |
| 設定変更前の既存記事からスパムが来ている | 投稿一覧から既存記事のコメントを一括オフ |
ディスカッション設定をオフにするだけではスパムを完全に止めることはできません。「コメント欄を表示しない」と「コメント機能を止める」は別物であるという点を押さえたうえで、サイトの運用方針に合った対策を選んでください。

