Contact form7のVersion5.1からreCAPTCHA v3になって、世界中で送信できないスパム判定に苦しんでいる人が多くいます。
私もそんな一人でした。
最近、同じようなトラブルを抱えている人から相談を受けて、同じように対処できるかな?と思ったのですが世の中に知られている解決方法をすべて適用しましたが、ダメでした。
なお、よく知られた問題と解決方法については以下のサイトにまとめられています。
今回、あらゆる手を尽くして、結果あきらめたわけですが、その時に行った対処方法をすべてまとめておきます。
Contact form7 プラグインを削除して再インストール
私が、スパム判定で困り果てていた時に解決できた方法がコレです。
単純にプラグインを一度削除して、再度インストールするというものです。理由はよくわからないのですが、世界中で同じように解決できたという報告が多いです。
今回、別の人のサイトでプラグインを削除して何度もインストールしました。
⇒スパム判定は無くなりませんでした。
reCAPTCHA v3のキーを再度取得する
設定されているreCAPTCHA v3のキーではなく、新たにキーを取得しなおして設定することで解決した人もいるそうです。
今回、別の人のサイトでreCAPTCHA v3のキーを再度取得して設定しました。
⇒スパム判定は無くなりませんでした。
reCAPTCHA v3のキーを設定する
古くからContact form7を使用しているユーザーで、reCAPTCHA v2のキーを設定したままreCAPTCHA v3 に対応したContact form7を使用してスパム判定を受けたという事例もありました。
このようなケースでは、reCAPTCHA v3のキーを取得して、プラグインに設定すればよいことになります。
今回、初めから、reCAPTCHA v3のキーを設定していますので、特に対策はしていません。
reCAPTCHA v3のキー取得時のドメイン設定が間違っている
reCAPTCHA v3のキーを取得する時に、設定するドメインを指定する箇所があります。そこで間違ったドメインを設定していると正常に動作しないそうです。
http://などを指定に含めてはいけないということですが、そもそも指定できないようになっていますので、ドメイン自体を間違えない限りこのケースはないかな?と言う感じでした。
また、キーを取得したドメインと異なるドメインでreCAPTCHA v3を使用すると、おそらくreCAPTCHA v3が正常に動作していませんと言う旨のメッセージを出すのではないかと思います。
今回、ドメインを正しく設定しているのか再度チェックしました。
⇒スパム判定は無くなりませんでした。
Contact form7を5.1に戻してみる
そもそも、Contact form7とreCAPTCHA v3の組合せで問題が起き始めたのは、v5.1.1のリリースから顕著になりました。前述の組合せは、v5.1のリリースからです。
Contact form7をv5.1に戻してみることにしました。
⇒スパム判定は無くなりませんでした。
Flamingoを導入してreCAPTCHA v3の判定結果を見てみる
Contact form7は、reCAPTCHAが返すスコアが0.5以下の場合にスパム判定する仕組みを採用しています。
実際の判定スコアについては、プラグインのソースをいじらないと今まで調べることができなかったのですが、Contact form7の新しいバージョンでは同一作者の別プラグインとの組み合わせで判定スコアを知ることができます。
このスパムログ機能を使うには Contact Form 7 5.1.2 以降、ならびに Flamingo 2.0 以降が必要とのことです。

Contact Form 7 は Akismet、reCAPTCHA、コメントブラックリストなど、多種多様な対スパムモジュールを用いてフォームをスパマーの魔の手から守ります。これらのモジュールは大変役に立ちますが、送信されたメッセージがどのモジュールによってブロックされたか、またどういった理由でブロックされたか、どうすれば知ることができるでしょうか。
実際にFlamingoを導入してスパム判定されるたびに記録が残りますので、スパム判定されている理由を知ることができます。

私が実際に、Contact form7 + reCAPTCHA v3の組合せで全てスパム判定されているサイトでFlamingoを導入したところ常にスコアは(0.00)でした。
reCAPTCHAの判定スコアは0~1の間で数字が小さいほどスパムの可能性が高いという判定です。reCAPTCHAが正常に動いている場合でも、0.2前後の値になるケースがあり、その影響でスパム判定していることが多いそうです。
このようなケースでは、Contact form7のスパム判定閾値を変更することで、スパム判定を回避することができます。

add_filter( 'wpcf7_recaptcha_threshold', function( $threshold ) { return 0.30; }, 10, 1 );
しかし、0という結果は、reCAPTCHAがまともに動いていないという結果を示していて、Contact form7の閾値をマイナスにしない限り、必ずスパム判定になります。
reCAPTCHAのJavascriptが正常に動作していないとこの結果になります。多くの場合は非同期読み込みによる影響だと思います。詳細は以下の記事を参照ください。
まとめ
今回色々調べてみて、その結果すべてNGで疲れ果てました。
Contact form7としては、reCAPTCHA v3が返すスコアをもとに判定しているだけなので、多くの場合はreCAPTCHA v3が正常に動作していないだけ、というのがプラグイン側のスタンスだと思います。
なぜ、reCAPTCHA v3が正常に動作しないのか?というのを突き詰めていくのは大変な作業です。
そもそもContact form7とreCAPTCHA v3の組合せで使い続けなければならない理由は何なのか?というのをよく考えるべきだろうと思います。
reCAPTCHA v2で困っていたわけでもないので、reCAPTCHA v3に無理やり切り替える必要もないと思うわけです。Contact form7でreCAPTCHA v3を有効にすると全ページでreCAPTCHA v3が表示されてうっとおしいという別の問題もあります。
reCAPTCHA v2を最新のContact from7と使えるようにするプラグインも当然ありますので、丸一日かけて不毛な解析をするよりも、スパッとreCAPTCHA v2に切り替えてしまう方が良いと思いました。
