当事務所のサイトの問い合わせフォームのスパム対策を、Googleの「reCAPTCHA」からCloudflareの「Cloudflare Turnstile」に変更したところ、フォームが送信できなくなりました。
通常は、下記のエックスサーバー公式サイトの説明のように、サイトで使っているreCAPTCHAの情報をWordPressとGoogleの双方から削除して、Cloudflareでアカウント作成し、Cloudflare Turnstileの紐づけをすることで対応できる内容です。

しかし、設定を変更したところ、フォームから送信ができない事態になりました。
設定変更で送信できなくなったというケースは調べても見つかりませんでした。
原因を調べていったところ、WordPressのコメント欄で禁止ワードに設定していた「html」という単語が関係していました。
この単語を禁止ワードから削除することで無事にフォームから送信できるようになりました。
同じように、サイトのフォームをスパム判定されて送信できないという症状で困っている方の参考になればと思い、解決までの記録を残しておきます。
なお、わたしはWordPressやフォームのしくみを専門としているわけではありません。
Google検索や現在の症状をChatGPTに相談しながら、実際の設定を一つずつ確認して、手探りで解決しました。
そのため、技術的なしくみについては正直よく分かっていません。
「わたしのサイトでは、この方法で解決しました」という事例としてご覧ください。
起きたこと
当事務所のサイトでは、問い合わせフォームはWordPressのプラグイン「Contact Form 7」を使っています。
これまでフォームのスパム対策には、Googleの「reCAPTCHA」を使っていました。
ところが、Contact Form 7の管理画面を見ると、reCAPTCHAからCloudflareの「Cloudflare Turnstile」への変更をすすめる表示が出ていたため、変更することにしました。
Cloudflare Turnstile自体は設定でき、認証も問題なく動いているように見えました。
ところが、実際に問い合わせフォームから送信しようとすると、フォームがスパムと判定されて送信できません。
フォームには、オレンジ色の枠でスパム判定のメッセージが表示されました。
reCAPTCHA削除とCloudflare Turnstile導入以外の設定は変更していません。
しかし、Cloudflare Turnstileを一時的に無効にしてみても、フォームはスパム判定されたままでした。
つまり、Cloudflare Turnstileそのものが原因ではなさそうです。
reCAPTCHAではうまく処理していたことが処理できなくなった原因は何かを探さないといけなくなりました。
原因を探していった
そこで、フォームに関係する設定を一つずつ確認していきました。
フォームから無事に送信できた内容は、メール受信して確認することができますが、送信できなかった内容はメールで受信・確認することはできません。
スパム判定された問い合わせ内容については、別のプラグイン「Flamingo」を使えばわかるとのことだったので、「Flamingo」を入れたうえで、改めてフォームの送信ボタンを押してみました。
その後、このFlamingoの記録を確認すると、スパムとして登録されていました。
スパムの詳細を確認すると、「禁止用語 (html) が使用された」ことがスパム判定の原因とのことでした。
フォームにURLやhtmlを入力していないのにスパム判定になっているのは、おそらく当サイトからのフォーム送信の際にサイトのURL情報も含めてフォーム送信し、それが禁止用語に引っかかったのではないかと推測しました。
そこでWordPressの設定を確認しました。
WordPressの管理画面にある、
「設定」→「ディスカッション」→「許可されないキーワード」
という設定です。
ここに、「許可されないキーワード」として「html」が登録されていました。
禁止ワード「html」を削除したら送信できた
「html」は、サイトを作った当初に、自分で禁止用語として設定したものです。
WordPressのコメント機能を使う予定は無いため、コメントを無効にする設定をしていました。
さらに、スパム対策として、怪しいサイトへの誘導を防ぐ目的で、いくつかの文字列を禁止用語に登録していました。
その中に「html」も入っていました。
今回、試しにこの「html」を「許可されないキーワード」から削除して、問い合わせフォームから送信してみました。
すると、今度は正常に送信できました。
わたしの環境では、これで解決しました。
なぜ「html」がサイトのコメント用の禁止用語に入っていることで、問い合わせフォームまでスパム判定されたのか。
その技術的なしくみについては、正直よく分かっていません。
ただ、少なくともわたしの環境では、
WordPressの「設定」→「ディスカッション」→「許可されないキーワード」に「html」が入っている
↓
問い合わせフォームがスパム判定されて送信できない
↓
「html」を削除
↓
正常に送信できるようになった
という結果になりました。
「ディスカッション」が見つからない場合
いまのわたしのWordPressの管理画面には「ディスカッション」がないため、検索結果やChatGPTの回答で「ディスカッションを見てください」と言われても見つからないという状態でした。
わたしのサイトでは、コメント機能を無効にするための「RBコメント無効化」というWordPressのプラグインを使っていました。
このプラグインを有効にしていると、WordPressの管理画面からコメント関連の設定である「ディスカッション」が見えなくなっていました。
そのため、最初は「許可されないキーワード」の設定自体を見つけられませんでした。
もし同じようにWordPressの「設定」の中に「ディスカッション」が見当たらない場合は、コメントを無効にするためのプラグインを使っていないか確認してみるとよいかもしれません。
わたしの場合は、いったん「RBコメント無効化」を無効にすると、「設定」の中に「ディスカッション」が表示されました。
そこで、
設定 → ディスカッション → 許可されないキーワード
を確認して「html」を削除。
その後、コメントを無効にするためのプラグインをもう一度有効に戻しました。
それでも問い合わせフォームは正常に送信できました。
同じ症状なら、まずここを確認
もし、
・WordPressでサイトの問い合わせフォームを使っている
・フォームのスパム対策を変更した
・その後、フォームが送信できなくなった
・フォームがスパム判定されている
・スパムの記録を見ると「禁止用語」が原因になっている
・特に「html」が禁止用語に登録されている
という状況なら、
WordPressの「設定」→「ディスカッション」→「許可されないキーワード」
を確認してみてください。
「html」が登録されていたら、わたしの環境では、それを削除することで解決しました。
なお、わたしの場合はコメントを無効にするプラグインを使っていたため、「ディスカッション」の設定が見えなくなっていました。
おわりに
今回の変更は、単純に「フォームのスパム対策をreCAPTCHAからCloudflare Turnstileに変更するだけ」のつもりでした。
ところが、実際には何年も前にサイトを作ったときに設定して、その後ほとんど触っていなかったWordPressのコメント関連の設定まで確認することになりました。
こういう設定は、一度設定すると何年も触らないので、本人でも忘れていることがあります。
わたし自身、最初は「そんな設定をしていたこと自体を忘れていた」状態でした。
過去の設定や変更は他人にはわからないため、1つずつ問題点を解決していくしかありません。
同じような症状で詰まっている方がいて、この記事を見て「そういえばWordPressのコメント設定に何か入れていたかも」と気づいて、解決できるきっかけになればと思います。
