WordPress

【2026年最新】Contact Form 7でreCAPTCHA v3をお問い合わせページのみに設定する方法|Multi-Step Formsとの競合に注意

Contact Form 7のreCAPTCHA v3は、標準ではサイト全体で読み込まれます。

functions.phpをカスタマイズすることで、お問い合わせページだけで読み込むよう変更できます。

ただし、Multi-Step Formsなどのマルチステップフォームプラグインを使用している場合は、送信エラーが発生することがあります。

この記事でわかること: 特定ページだけに限定する正しい最新コードと、多くの人が陥る「送信エラー」の原因(プラグインの競合)について、実体験を元に解説します。

1.reCAPTCHAをお問い合わせページのみにする理由

reCAPTCHAをお問い合わせページのみに適用するメリットとしては以下の3点が挙げられます。

  • お問い合わせページ以外の表示速度(PageSpeed Insightsのスコア)を極限まで改善するため
  • リキャプチャの利用回数を減らすため
  • JavaScriptの読み込みを減らすため

ただし、CF7公式では、reCAPTCHA v3は全ページで読み込むことを推奨しています。お問い合わせページのみでの読み込みはカスタマイズ扱いになります。
以下公式のQ&Aの引用です。

reCAPTCHAのスクリプトファイルがすべてのページで読み込まれますが、これを停止できますか?reCAPTCHAのスクリプトファイルがすべてのページで読み込まれますが、これを止める方法はありますか?

不可能ではないものの、決して推奨される方法ではありません。そうすると、reCAPTCHAが正しく機能しなくなるからです。

reCAPTCHA v3に関するよくある質問

2.Contact Form 7のreCAPTCHAを特定ページだけに設定するコード

通常のreCAPTCHAの設定を行ってから、以下をコピーしてそのままfunctions.phpに張り付けます。
※事前にバックアップを取ってから作業を行ってください。

reCAPTCHAの設定方法については別の記事で詳しく紹介しています。
【2026年最新版】Contact Form 7にreCAPTCHA v3を設定する方法|プラグイン不要でスパム対策

/* お問い合わせページ以外で reCAPTCHA を無効化する */
// 1. スクリプト(JavaScript)の読み込みを停止(contactページ以外)
add_action( 'wp_enqueue_scripts', 'my_dequeue_recaptcha_except_contact', 100 );
function my_dequeue_recaptcha_except_contact() {
    if ( ! is_page( 'contact' ) ) { // ☆お問い合わせページのスラッグを指定
        wp_dequeue_script( 'google-recaptcha' );
        wp_dequeue_script( 'wpcf7-recaptcha' );
    }
}

// 2. CF7内部のreCAPTCHA検証ロジックをスキップ(contactページ以外)
add_action( 'wp', 'my_disable_recaptcha_backend_except_contact' );
function my_disable_recaptcha_backend_except_contact() {
    // お問い合わせページ(contact)以外の場合のみ処理
    if ( ! is_page( 'contact' ) ) { // ☆お問い合わせページのスラッグを指定
        // CF7のreCAPTCHA管理クラスを取得
        $recaptcha = WPCF7_RECAPTCHA::get_instance();
        
        // サーバー側の検証フィルター(スパムチェック)を強制解除する
        remove_filter( 'wpcf7_spam', array( $recaptcha, 'verify_response' ), 9 );
    }
}

※本記事のコードは2026年6月時点で動作確認したものです。
Contact Form 7のアップデートにより利用できなくなる可能性があります。

サイトを再読み込みして、メールが問題なく送受信できることを確認してください。
あわせて、ブラウザのシークレットモードでもテスト送信を行うことをおすすめします。

また、メールフォームページを右クリックしてページのソースを確認します。

「https://www.google.com/recaptcha/api.js」で検索して、reCAPTCHAが読み込まれているか確認しましょう。

3.「メッセージの送信に失敗しました」が表示される原因

上記のコードを貼り付けたにもかかわらず、テスト送信をした際に「メッセージの送信に失敗しました。後でまたお試しください。」とエラーが出てしまう場合があります。

また、上記以外の記述を試した際に、送信後にエラー画面になることもありました。

複数の特定ページ限定化コードを検証しましたが、いずれもエラーが発生しました。
その後、Multi-Step Formsを無効化した状態でテストしたところ正常に送信でき、再度有効化すると同じエラーが再発しました。
このことから、少なくとも検証環境では、コード自体ではなくMulti-Step Formsとの競合が原因である可能性が高いと判断しています。

マルチステッププラグインが裏側で行うAjax通信や、ステップ移動時のタイムラグによって、reCAPTCHAの認証情報(トークン)が消失・期限切れを起こし、CF7側で「スパム(またはエラー)」と判定されてしまうためです。

解決策としては、マルチステッププラグインを停止し、シンプルな1ページのフォーム構成に変更する方法が考えられます。また、Multi-Step Formsを利用している場合は、reCAPTCHAを全ページで読み込む公式の設定に戻す方が安定して運用できます。

4.Multi-Step Formsとの競合を回避する方法

代替策: reCAPTCHAは全ページ有効のままにして、CSSでロゴを非表示にする方法(Google公式準拠)」を採用しましょう。

設定方法はこちらの記事で詳しく紹介しています。
【2026年最新版】Contact Form 7にreCAPTCHA v3を設定する方法|プラグイン不要でスパム対策

5.まとめ

本記事で紹介したコードは、通常のContact Form 7環境では動作を確認できました。一方で、Multi-Step Formsを利用している環境では送信エラーが発生するケースも確認しています。

軽量化を目的にカスタマイズする場合は、利用中のプラグインとの相性も含めて十分にテストしたうえで導入することをおすすめします。

Contact Form 7設定方法はこちらの記事で紹介しています。

reCAPTCHA設定方法はこちらの記事で紹介しています。

TOP