WordPressフォームが送信できない原因と解決方法10選【プラグイン別対策】

「WordPressのお問い合わせフォームから送信ボタンを押したのに、エラーが出て送信できない…」そんな経験はありませんか?フォームプラグインを設置したはずなのに、ユーザーからの問い合わせが届かないのは、ビジネス機会の大きな損失です。

実は、WordPressフォームが送信できない原因は「メール送信設定」「フォーム設定ミス」「サーバー・セキュリティ」の3つに集約されます。

この記事では、Contact Form 7やMW WP Formなど主要プラグインで発生する送信エラーの原因10選と、それぞれの具体的な解決方法を初心者にもわかりやすく解説します。

5分で原因を診断し、15分で解決できるチェックリストも用意しているので、今すぐフォームを正常に動作させたい方は、ぜひ最後までご覧ください。


WordPressフォームが送信できない主な症状

WordPressフォームの送信エラーは、大きく分けて以下の4つの症状に分類されます。

1. エラーメッセージが表示される

  • 「メッセージの送信に失敗しました。後でまたお試しください」
  • 「このサイトで重大なエラーが発生しました」
  • 「送信中にエラーが発生しました」

2. 送信完了と表示されるがメールが届かない

  • フォーム上では「送信完了」と表示される
  • しかし管理者・ユーザーともにメールが届いていない
  • 迷惑メールフォルダにも見当たらない

3. 送信ボタンを押しても反応がない

  • クリックしても画面が遷移しない
  • ローディング表示のまま止まる
  • ページがリロードされるだけ

4. 特定の環境でのみ送信できない

  • PC では送信できるがスマホでは失敗する
  • 特定のブラウザでのみエラーが出る
  • reCAPTCHA認証後に送信できない

これらの症状別に、次のセクションで原因を診断していきます。


【症状別】原因を5分で診断するフローチャート

原因を効率的に特定するために、以下のフローチャートに従って診断してください。

診断ステップ

【STEP 1】エラーメッセージは表示されますか?

YES → 次の質問へ

  • 「メッセージの送信に失敗しました」→ 原因4: reCAPTCHA設定の不具合を確認
  • 「重大なエラーが発生しました」→ 原因6: WAF・セキュリティ設定を確認
  • 「送信中にエラー」→ 原因10: PHP・サーバーエラーを確認

NO → STEP 2へ


【STEP 2】送信完了と表示されますか?

YES(完了表示されるがメールが届かない)

  • 原因1: SMTP設定の不備を最優先で確認
  • 原因3: SPF・DKIM設定不足も確認

NO(送信ボタンが反応しない)

  • 原因8: JavaScript エラーを確認
  • 原因9: キャッシュの影響も確認

【STEP 3】最近の変更はありましたか?

プラグインを追加・更新した

  • 原因5: プラグイン競合を確認

テーマを変更した

  • 原因8: JavaScript エラーを確認

サーバーを移転した

  • 原因1: SMTP設定原因6: WAF設定を確認

特に変更なし

  • 原因2: フォーム設定ミスを確認

優先度別チェック順序

【最優先】80%の原因はここにあります

  • ⭐⭐⭐ 原因1: SMTP設定の不備
  • ⭐⭐⭐ 原因6: WAF・セキュリティ設定
  • ⭐⭐ 原因4: reCAPTCHA設定

【次に確認】残り15%の原因

  • ⭐⭐ 原因2: フォーム設定ミス
  • ⭐ 原因5: プラグイン競合
  • ⭐ 原因9: キャッシュの影響

【レアケース】5%の原因

  • 原因3: SPF・DKIM設定
  • 原因7: プラグインのバグ
  • 原因8: JavaScript エラー
  • 原因10: サーバーエラー

それでは、各原因の詳細と解決方法を見ていきましょう。


原因1: メールサーバー・SMTP設定の不備

症状と原因

【結論】
WordPressのメール送信機能は不安定で、多くのサーバーでデフォルトのままでは正常に動作しません。

WordPress標準のメール関数(wp_mail)は、サーバーのsendmail機能を使用してメールを送信します。しかし、以下の理由で送信に失敗するケースが非常に多いです。

主な原因

  • サーバー側でsendmail機能が無効化されている
  • 共用サーバーでスパム対策のため送信が制限されている
  • PHPのmail関数が正しく動作していない
  • 送信元ドメインの認証情報が不足している

特にエックスサーバー、ロリポップ、ConoHa WINGなどの共用サーバーでは、デフォルト設定のままだとメールが送信されないケースが頻発します。


解決手順(WP Mail SMTP設定方法)

【結論】
WP Mail SMTPプラグインを使い、Gmail や Outlook などの外部SMTPサーバー経由でメールを送信する設定に変更します。

手順1: WP Mail SMTPプラグインのインストール

  1. WordPress管理画面 → プラグイン → 新規追加
  2. 「WP Mail SMTP」を検索
  3. 「今すぐインストール」→「有効化」

手順2: Gmail SMTP設定(推奨)

  1. WP Mail SMTP → 設定 を開く
  2. 以下の項目を入力
設定項目入力内容
送信元メールアドレスyour-email@gmail.com
送信者名サイト名または管理者名
メーラーGmail を選択
  1. 「OAuth 設定」をクリック
  2. Google Cloud Console で API認証情報を取得
  3. クライアントIDとシークレットを入力
  4. 「変更を保存」をクリック

手順3: 他のSMTPサーバーを使用する場合

メールサービスSMTPサーバーポート暗号化
Gmailsmtp.gmail.com587TLS
Outlooksmtp-mail.outlook.com587TLS
Yahoosmtp.mail.yahoo.co.jp465SSL
さくらメールサーバー情報参照587TLS

設定後の確認方法

【結論】
WP Mail SMTPの「メールテスト」機能で、実際に送信テストを実行します。

確認手順

  1. WP Mail SMTP → メールテスト を開く
  2. 「送信先」に自分のメールアドレスを入力
  3. 「メール送信」をクリック
  4. 1〜2分以内にメールが届けばOK

✅ 成功時の表示

メッセージが正常に送信されました!

❌ 失敗時の表示

メーラーエラー: SMTP接続に失敗しました

失敗した場合は、以下を再確認してください。

  • SMTPサーバー情報が正しいか
  • ポート番号が開放されているか
  • 2段階認証設定の場合はアプリパスワードを使用しているか
  • サーバーのファイアウォール設定を確認

参考リンク


原因2: フォーム側メール設定のミス

Contact Form 7での設定ミス例

【結論】
Contact Form 7の「メール」タブでの送信元・送信先の設定ミスが、送信エラーの原因になります。

Contact Form 7では、以下の設定ミスが頻発します。

よくある設定ミス

ミスの内容問題点
送信先アドレスのタイプミスメールが存在しないアドレスに送られる
複数送信先のカンマ不足2番目以降のアドレスが無効になる
送信元をユーザー入力メールに設定スパム判定され送信失敗
送信元ドメインがサイトと不一致サーバーが送信を拒否

特に危険なのが、送信元(From)をフォーム入力の[your-email]に設定するミスです。

❌ 間違った設定例

送信元: [your-email]

→ ユーザーが入力したメールアドレスから送信しようとするため、SPF認証で弾かれます。


正しい送信元・送信先の設定方法

【結論】
送信元は必ず「サイトと同一ドメインの固定アドレス」に設定し、ユーザーのメールアドレスは「Reply-To」で指定します。

✅ 正しい設定例

Contact Form 7の管理画面 → 該当フォーム編集 → メールタブ

【メール(1)】
送信先: admin@your-domain.com
送信元: wordpress@your-domain.com ←サイトドメインのアドレス
題名: [your-subject]
追加ヘッダー: Reply-To: [your-email] ←ユーザー入力アドレスはここ
メッセージ本文:
差出人: [your-name] <[your-email]>
題名: [your-subject]
メッセージ本文:
[your-message]

設定のポイント

  1. 送信元(From)
    • サイトドメインと同一のメールアドレスを使用
    • 例: サイトが example.com なら、info@example.com や noreply@example.com
  2. Reply-To(返信先)
    • ユーザーが入力したメールアドレス [your-email] を指定
    • 管理者が返信する際、ユーザーに直接返信できる
  3. 送信先(To)
    • 管理者が実際に受信するメールアドレス
    • 複数指定する場合はカンマで区切る: admin@example.com, sales@example.com
  4. 追加ヘッダー
    • Reply-To: [your-email] を必ず記載
    • Cc や Bcc も必要に応じて追加可能

MW WP Formの場合

MW WP Formでも同様に、「自動返信メール設定」で以下を確認してください。

  • 送信元メールアドレス: サイトドメインのアドレス
  • 送信先: 管理者のアドレス({ユーザー入力のメールアドレス項目}は使わない)

参考リンク


原因3: SPF・DKIM・DMARCなどドメイン認証設定不足

ドメイン認証が必要な理由

【結論】
SPF・DKIM・DMARC設定がないと、フォームから送信されたメールが「なりすまし」と判定され、受信サーバーに拒否されます。

近年、メールのセキュリティ基準が厳格化され、特にGmail・Outlook・Yahoo!メールなどの大手メールサービスでは、ドメイン認証がないメールを自動的にブロックする仕組みが強化されています。

ドメイン認証の種類

認証方式役割設定必須度
SPFどのサーバーがこのドメインのメールを送信できるか指定⭐⭐⭐ 必須
DKIM送信メールにデジタル署名を付与し改ざん防止⭐⭐ 推奨
DMARCSPF・DKIMの認証失敗時の処理方針を指定⭐ 任意

特にSPFレコードの設定は必須です。これがないと、あなたのサイトから送信されたメールが正当なものと証明できず、スパム扱いされます。


SPFレコードの設定方法

【結論】
ドメインのDNS設定に、SPFレコード(TXTレコード)を追加します。

設定手順(エックスサーバーの例)

  1. サーバーパネルにログイン
  2. 「DNSレコード設定」を開く
  3. 対象ドメインを選択
  4. 「DNSレコード追加」タブをクリック
  5. 以下の内容を入力
項目入力内容
ホスト名空欄(@)
種別TXT
内容v=spf1 include:_spf.xserver.jp ~all
優先度0
  1. 「確認画面へ進む」→「追加する」をクリック

他社サーバーのSPFレコード例

サーバーSPFレコード
エックスサーバーv=spf1 include:_spf.xserver.jp ~all
ConoHa WINGv=spf1 include:_spf.conoha.jp ~all
ロリポップv=spf1 include:_spf.lolipop.jp ~all
さくらインターネットv=spf1 include:_spf.sakura.ad.jp ~all
カラフルボックスv=spf1 include:_spf.colorfulbox.jp ~all

WP Mail SMTPを使用している場合

Gmail SMTPなど外部SMTPを使っている場合は、以下のように設定します。

v=spf1 include:_spf.google.com ~all

複数のサーバーを許可する場合は、スペースで区切って記載します。

v=spf1 include:_spf.xserver.jp include:_spf.google.com ~all

設定確認方法

SPFレコードが正しく設定されているか確認するには、以下のツールを使用します。

ドメイン名を入力して検索し、「SPF record found」と表示されればOKです。

参考リンク


原因4: reCAPTCHA(スパム対策)設定の不具合

reCAPTCHAエラーの症状

【結論】
reCAPTCHAの設定ミスやバージョン互換性の問題で、「メッセージの送信に失敗しました」エラーが発生します。

reCAPTCHAはGoogleが提供するスパム対策機能で、Contact Form 7などのフォームプラグインに実装されています。しかし、以下の原因で送信エラーが発生することがあります。

よくあるreCAPTCHAエラー

  • 「メッセージの送信に失敗しました。後でまたお試しください」
  • 送信ボタンを押しても反応がない
  • reCAPTCHAチェックマークが表示されない
  • スコア判定が厳しすぎて正当なユーザーがブロックされる

主な原因

  1. サイトキー・シークレットキーの設定ミス
  2. reCAPTCHA v3のスコア閾値が厳しすぎる
  3. ドメイン登録が正しくない
  4. JavaScriptの読み込みエラー
  5. 複数のreCAPTCHAプラグインが競合

reCAPTCHA設定の見直し方法

【結論】
Google reCAPTCHA管理画面でキーを再取得し、Contact Form 7で正しく設定し直します。

手順1: Google reCAPTCHA でキーを取得

  1. Google reCAPTCHA管理画面にアクセス
  2. 「新しいサイトを登録」をクリック
  3. 以下の情報を入力
項目入力内容
ラベルサイト名(例: 株式会社○○お問い合わせ)
reCAPTCHAタイプreCAPTCHA v3 を選択(推奨)
ドメインexample.com(www なしで登録)
所有者Googleアカウントのメールアドレス
  1. 「送信」をクリックし、サイトキーとシークレットキーをコピー

手順2: Contact Form 7に設定

  1. WordPress管理画面 → お問い合わせ → インテグレーション
  2. 「reCAPTCHA」の「インテグレーションのセットアップ」をクリック
  3. サイトキーとシークレットキーを貼り付け
  4. 「変更を保存」をクリック

手順3: フォームタグを確認

Contact Form 7のフォーム編集画面で、以下のタグが含まれていないことを確認してください。

[recaptcha] ←このタグは不要(削除する)

reCAPTCHA v3では、フォームタグに recaptcha を記載する必要はありません。インテグレーション設定のみで自動的に動作します。

reCAPTCHA v2を使用する場合

ユーザーにチェックボックスを表示したい場合は、v2を選択し、フォームに以下を追加します。

[recaptcha]

スコア閾値の調整(v3のみ)

reCAPTCHA v3は0.0〜1.0のスコアでボットを判定します。デフォルトは0.5ですが、正当なユーザーがブロックされる場合は、以下のコードで閾値を下げます。

// functions.php に追加
add_filter('wpcf7_recaptcha_threshold', function($threshold) {
    return 0.3; // 0.5 → 0.3 に変更
});

参考リンク


原因5: プラグイン同士・テーマとの競合

競合が発生しやすいプラグイン

【結論】
セキュリティ系・キャッシュ系・WAF連携プラグインがフォームプラグインと競合し、送信エラーを引き起こします。

WordPressでは、複数のプラグインが同時に動作するため、JavaScript・PHP・セキュリティ機能が干渉し合うことがあります。

競合しやすいプラグインの組み合わせ

プラグインカテゴリ競合原因影響
セキュリティ系(SiteGuard、Wordfence)フォーム送信をブロック「重大なエラー」が表示される
キャッシュ系(WP Rocket、W3 Total Cache)古いJS・HTMLを配信送信ボタンが反応しない
WAF連携系(JP Secure、XO Security)POST データを攻撃と判定403エラーが発生
reCAPTCHA系(複数導入)スクリプトが重複reCAPTCHA認証が失敗
メール送信系(WP Mail SMTP + 他のSMTP)送信処理が二重化メールが届かない

競合プラグインの特定方法

【結論】
フォーム以外のプラグインを一時停止し、1つずつ有効化して原因を特定します。

診断手順

STEP1: すべてのプラグインを無効化

  1. WordPress管理画面 → プラグイン → インストール済みプラグイン
  2. フォームプラグイン(Contact Form 7など)以外をすべて無効化
  3. フォームから送信テストを実行

✅ 送信成功 → プラグイン競合が原因
❌ 送信失敗 → 他の原因(SMTP設定・サーバー設定など)を確認

STEP2: 1つずつプラグインを有効化

  1. 無効化したプラグインを1つ有効化
  2. フォームから送信テストを実行
  3. 送信成功なら次のプラグインを有効化
  4. 送信失敗したら、そのプラグインが原因

STEP3: 原因プラグインの対処

競合が確認されたプラグインは、以下のいずれかで対処します。

  • 設定を調整してフォームページを除外
  • 代替プラグインに変更
  • 開発元に問い合わせ・アップデート待ち

具体的な対処例

競合プラグイン対処方法
SiteGuard WP Plugin管理画面 → SiteGuard → WAF除外リスト に /contact/ を追加
WP Rocket設定 → ファイル最適化 → お問い合わせページをJavaScript最適化から除外
Wordfence設定 → ファイアウォール → フォーム送信のレート制限を緩和
Jetpack設定 → セキュリティ → ブルートフォース攻撃保護を無効化

注意点

  • テーマの functions.php に独自のセキュリティコードがある場合も競合の原因になります
  • 本番サイトで診断する場合は、必ずバックアップを取ってから実施してください

参考リンク


原因6: サーバーのWAF・セキュリティ設定でブロック

WAFによるブロックの症状

【結論】
レンタルサーバーのWAF(Webアプリケーションファイアウォール)が、フォーム送信を攻撃と誤検知してブロックします。

WAFは、SQLインジェクションやXSS攻撃からサイトを守るセキュリティ機能ですが、正常なフォーム送信まで誤検知することがあります。

WAFブロック時の症状

  • 「このサイトで重大なエラーが発生しました」
  • 「送信中にエラーが発生しました」
  • 「403 Forbidden」エラー
  • 送信ボタンを押すとページが真っ白になる

WAFが誤検知しやすい入力例

  • HTML タグを含む文章(例: <script>alert('test')</script>
  • SQL文に見える文字列(例: SELECT * FROM users
  • URLを複数含む内容
  • 特殊文字(' " < > &)が連続する文章

WAF設定の確認と除外方法

【結論】
サーバーコントロールパネルでWAFのログを確認し、フォームページをWAF除外設定に追加します。

エックスサーバーの場合

STEP1: WAFログの確認

  1. サーバーパネルにログイン
  2. 「WAFログ一覧」をクリック
  3. 対象ドメインを選択
  4. フォーム送信時刻のログに「検知」と表示されているか確認

STEP2: WAFを一時的に無効化してテスト

  1. サーバーパネル → WAF設定
  2. 対象ドメインの「OFF」をクリック
  3. 設定反映まで最大1時間待機
  4. フォームから送信テスト

✅ 送信成功 → WAFが原因
❌ 送信失敗 → 他の原因を確認

STEP3: フォームページをWAF除外設定

エックスサーバーでは、特定のURLだけWAFを無効化する機能がないため、以下の選択肢があります。

選択肢A: サイト全体のWAFをOFFにする

  • セキュリティリスクが上がるため非推奨
  • 最終手段として検討

選択肢B: Contact Form 7の入力内容を制限

  • HTMLタグ、特殊文字を入力させない設定
  • フォームタグに maxlengthpattern 属性を追加

選択肢C: 他のフォームプラグインに変更

  • MW WP Form や Snow Monkey Forms などを試す

ConoHa WINGの場合

  1. コントロールパネル → サイト管理
  2. サイトセキュリティ → WAF
  3. 「利用設定」で除外URLを追加可能
  4. /contact/ などフォームページのパスを入力

ロリポップの場合

  1. ユーザー専用ページにログイン
  2. セキュリティ → WAF設定
  3. 対象ドメインの「無効にする」をクリック

その他のサーバー

サーバーWAF設定場所
さくらインターネットサーバーコントロールパネル → Webアプリケーションファイアウォール
カラフルボックスcPanel → ModSecurity
mixhostcPanel → ModSecurity

参考リンク


原因7: フォームプラグインのバージョン・バグ

バージョン不整合の確認方法

【結論】
フォームプラグイン、WordPress本体、PHPのバージョンが古いと、互換性の問題で送信エラーが発生します。

WordPressは頻繁にアップデートされるため、プラグインが最新のWordPress・PHPに対応していないとエラーが発生します。

確認すべきバージョン

項目推奨バージョン確認方法
WordPress最新安定版(6.4以上)管理画面 → ダッシュボード
PHP8.0以上サーバーコントロールパネル
Contact Form 7最新版(5.8以上)プラグイン → インストール済み
MW WP Form最新版(5.0以上)同上

バージョン確認手順

  1. WordPress管理画面 → ダッシュボード
  2. 「概要」セクションで WordPress バージョンを確認
  3. プラグイン → インストール済みプラグイン で各プラグインのバージョンを確認
  4. ダッシュボード → サイトヘルス → 情報 → サーバー で PHP バージョンを確認

アップデート手順と注意点

【結論】
必ずバックアップを取ってから、WordPress本体 → プラグイン → PHPの順にアップデートします。

アップデート手順

STEP1: バックアップの作成

以下のいずれかの方法でバックアップを取得してください。

  • プラグイン: UpdraftPlus、BackWPupなど
  • サーバー機能: エックスサーバーの自動バックアップなど
  • 手動: FTPでファイル、phpMyAdminでDBをダウンロード

STEP2: WordPress本体のアップデート

  1. 管理画面 → ダッシュボード
  2. 「WordPress ○.○.○ が利用可能です」の「今すぐ更新」をクリック
  3. 更新完了後、フォームが動作するか確認

STEP3: プラグインのアップデート

  1. プラグイン → インストール済みプラグイン
  2. Contact Form 7 など更新可能なプラグインの「更新」をクリック
  3. 更新完了後、フォームから送信テスト

STEP4: PHPバージョンの変更

サーバーコントロールパネルで変更します。

エックスサーバーの場合

  1. サーバーパネルにログイン
  2. PHP Ver.切替をクリック
  3. 対象ドメインを選択
  4. 推奨バージョン(PHP 8.1 または 8.2)を選択
  5. 「変更」をクリック

注意: PHPバージョン変更時のリスク

  • 古いテーマ・プラグインが動作しなくなる可能性
  • 事前に「サイトヘルス」で互換性を確認
  • 夜間など アクセスが少ない時間帯に実施

アップデート後のトラブル対処

もしアップデート後にサイトが表示されない場合:

  1. FTPで /wp-content/plugins/ にアクセス
  2. 問題のプラグインフォルダ名を plugin-name.bak に変更
  3. サイトが復旧したら、バックアップから復元

参考リンク


原因8: JavaScriptエラー・スクリプト読み込み不備

JavaScriptエラーの確認方法

【結論】
ブラウザの開発者ツールでJavaScriptエラーを確認し、エラーを出しているテーマ・プラグインを特定します。

JavaScriptエラーが発生すると、以下の症状が出ます。

  • 送信ボタンをクリックしても反応しない
  • reCAPTCHAチェックボックスが表示されない
  • フォームの入力補完機能が動作しない
  • ページ全体の動作が不安定

確認手順

STEP1: ブラウザの開発者ツールを開く

  • Chrome: F12 または 右クリック → 検証
  • Firefox: F12 または 右クリック → 要素を調査
  • Safari: 開発 → Webインスペクタを表示

STEP2: コンソールタブでエラーを確認

  1. 開発者ツールの「Console」タブをクリック
  2. フォームページを再読み込み
  3. 赤文字でエラーメッセージが表示されるか確認

よくあるエラーメッセージと原因

エラーメッセージ原因
Uncaught ReferenceError: $ is not definedjQueryが読み込まれていない
grecaptcha is not definedreCAPTCHAスクリプトが読み込まれていない
Failed to load resource: net::ERR_BLOCKED_BY_CLIENT広告ブロッカーがスクリプトをブロック
SyntaxError: Unexpected tokenJavaScript構文エラー

JavaScriptエラーの解決方法

【結論】
エラーを出しているスクリプトを特定し、該当するテーマ・プラグインを修正または無効化します。

パターン1: jQueryが読み込まれていない

テーマの functions.php でjQueryが正しく読み込まれているか確認します。

// functions.php に以下を追加
function enqueue_jquery() {
    wp_enqueue_script('jquery');
}
add_action('wp_enqueue_scripts', 'enqueue_jquery');

パターン2: reCAPTCHAスクリプトが読み込まれていない

Contact Form 7のインテグレーション設定を再確認します。

  1. お問い合わせ → インテグレーション
  2. reCAPTCHA の「インテグレーションのセットアップ」で再設定

パターン3: テーマのJavaScriptが干渉

テーマのカスタマイズやカスタムコードで、フォームのJavaScriptと競合している場合があります。

一時的にデフォルトテーマ(Twenty Twenty-Four など)に変更して、送信テストを実行してください。

✅ 送信成功 → テーマが原因
❌ 送信失敗 → 他の原因を確認

パターン4: 広告ブロッカーの影響

ユーザーが広告ブロッカー(AdBlock、uBlock Origin)を使用していると、reCAPTCHAやトラッキングスクリプトがブロックされることがあります。

  • 管理者側: 広告ブロッカーを無効化してテスト
  • ユーザー側: フォーム送信時のみ広告ブロッカーを無効化するよう案内

スクリプトの読み込み順序を調整

Contact Form 7のスクリプトを他のスクリプトより先に読み込む設定。

// functions.php に追加
function prioritize_contact_form_scripts() {
    wp_dequeue_script('contact-form-7');
    wp_enqueue_script('contact-form-7', 
        plugins_url('contact-form-7') . '/includes/js/scripts.js', 
        ['jquery'], 
        null, 
        false
    );
}
add_action('wp_enqueue_scripts', 'prioritize_contact_form_scripts', 100);

参考リンク


原因9: キャッシュ・ブラウザ・CDNの影響

キャッシュが原因で発生する問題

【結論】
ページキャッシュやCDNが古いJavaScript・HTMLを配信し、reCAPTCHAトークンのズレやフォーム動作不良を引き起こします。

キャッシュは表示速度を向上させる便利な機能ですが、フォームのような動的コンテンツでは以下の問題が発生します。

キャッシュによる問題

  • reCAPTCHAトークンが古くなり認証失敗
  • フォームのnonce(ワンタイムトークン)が期限切れ
  • JavaScriptファイルが古いバージョンのまま
  • 設定変更後も古い表示が残る

キャッシュの種類

キャッシュ種別保存場所影響範囲
ブラウザキャッシュユーザーのPC個別ユーザーのみ
プラグインキャッシュサーバーサイト全体
サーバーキャッシュサーバーサイト全体
CDNキャッシュCloudflare等全ユーザー

各種キャッシュのクリア方法

【結論】
ブラウザ → プラグイン → サーバー → CDN の順にキャッシュをクリアし、送信テストを実施します。

STEP1: ブラウザキャッシュのクリア

Chrome

  1. Ctrl + Shift + Delete(Mac: Cmd + Shift + Delete
  2. 「キャッシュされた画像とファイル」にチェック
  3. 「データを削除」をクリック

スーパーリロード(強制再読み込み)

  • Chrome / Firefox: Ctrl + F5(Mac: Cmd + Shift + R
  • Safari: Cmd + Option + R

STEP2: プラグインキャッシュのクリア

WP Rocket

  1. 管理画面 → WP Rocket
  2. 「キャッシュをクリア」をクリック

W3 Total Cache

  1. 管理画面 → Performance
  2. 「Empty All Caches」をクリック

WP Super Cache

  1. 管理画面 → 設定 → WP Super Cache
  2. 「キャッシュを削除」をクリック

LiteSpeed Cache

  1. 管理画面 → LiteSpeed Cache
  2. 「すべてをパージ」をクリック

STEP3: サーバーキャッシュのクリア

エックスサーバー

  1. サーバーパネル → Xアクセラレータ
  2. 「キャッシュ削除」をクリック

ConoHa WING

  1. コントロールパネル → サイト管理 → サイト設定
  2. 「キャッシュ」タブ → 「キャッシュクリア」

ロリポップ

  1. ユーザー専用ページ → サーバーの管理・設定
  2. 「ロリポップ!アクセラレータ」→ 「キャッシュクリア」

STEP4: CDNキャッシュのクリア

Cloudflare

  1. Cloudflareダッシュボードにログイン
  2. 対象ドメインを選択
  3. キャッシング → 「すべてをパージ」

STEP5: フォーム送信テスト

すべてのキャッシュをクリアしたら:

  1. プライベートブラウジングモード(シークレットモード)でフォームページを開く
  2. 送信テストを実行
  3. 成功すればキャッシュが原因だったことが確定

フォームページをキャッシュ対象外にする

今後も問題が起きないよう、フォームページをキャッシュ対象から除外します。

WP Rocket の場合

設定 → 詳細ルール → 除外ページ
→ /contact/ を追加

W3 Total Cache の場合

Performance → Page Cache → Never cache the following pages
→ /contact/ を追加

Cloudflare の場合

ページルール → 新規ページルールを作成
→ example.com/contact/*
→ キャッシュレベル: バイパス

参考リンク


原因10: サーバー側のPHP・メモリ・エラーレベル

PHPエラーの確認方法

【結論】
WordPressのデバッグモードを有効化し、エラーログでPHP Fatal Error や Warning を確認します。

サーバー側のPHP設定や処理能力の問題で、以下のエラーが発生することがあります。

典型的なPHPエラー

  • 「このサイトで重大なエラーが発生しました」
  • 真っ白な画面(White Screen of Death)
  • 「Fatal error: Allowed memory size exhausted」
  • 「PHP Parse error」

主な原因

原因症状
PHPメモリ不足送信処理の途中で停止
PHPバージョン非対応特定の関数が動作しない
実行時間制限大量のデータ処理で タイムアウト
構文エラープラグインやテーマのコードミス

デバッグモードでエラーログを確認

【結論】
wp-config.php でデバッグモードを有効化し、エラーログを確認します。

STEP1: wp-config.php を編集

FTPまたはサーバーのファイルマネージャーで、WordPressルートディレクトリの wp-config.php を開きます。

以下のコードを探します。

define( 'WP_DEBUG', false );

これを以下のように書き換えます。

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );

設定の意味

  • WP_DEBUG: デバッグモードを有効化
  • WP_DEBUG_LOG: エラーを /wp-content/debug.log に記録
  • WP_DEBUG_DISPLAY: エラーを画面に表示しない(本番環境で推奨)

STEP2: エラーログを確認

  1. FTPで /wp-content/debug.log をダウンロード
  2. テキストエディタで開く
  3. 「Fatal error」「Warning」「Notice」などを検索

よくあるエラーと対処法

エラー1: メモリ不足

Fatal error: Allowed memory size of 67108864 bytes exhausted

対処法: メモリ制限を増やす

wp-config.php に追加:

define( 'WP_MEMORY_LIMIT', '256M' );

または .htaccess に追加:

php_value memory_limit 256M

エラー2: 実行時間超過

Fatal error: Maximum execution time of 30 seconds exceeded

対処法: 実行時間を延長

wp-config.php に追加:

set_time_limit(300);

エラー3: 非推奨関数の使用

Deprecated: Function create_function() is deprecated in /path/to/plugin.php

対処法: プラグインをアップデート

  • 古いプラグインが原因
  • 最新版に更新するか、代替プラグインに変更

STEP3: 問題解決後はデバッグモードを無効化

define( 'WP_DEBUG', false );

セキュリティ上、デバッグモードは本番環境で常時有効にしないでください。

サーバーのPHPエラーログも確認

レンタルサーバーにもPHPエラーログがあります。

エックスサーバー

  • サーバーパネル → エラーログ

ConoHa WING

  • コントロールパネル → サイト管理 → エラーログ

参考リンク


それでも解決しない場合のチェックリスト

最終確認項目

上記の10個の原因をすべて確認しても解決しない場合、以下の項目を再度チェックしてください。

1. フォームプラグインを変更してみる

現在使用中代替プラグイン
Contact Form 7MW WP Form、Snow Monkey Forms
MW WP FormContact Form 7、WPForms
Gravity FormsFormidable Forms、Ninja Forms

別のプラグインに変更して送信できる場合、元のプラグインに固有の不具合がある可能性が高いです。

2. テストメールアドレスで検証

  • Gmail、Outlook、Yahoo!メールなど複数のメールサービスで受信テスト
  • 独自ドメインメールだけ届かない場合はSPF・DKIM設定を再確認

3. サーバー会社に問い合わせ

以下の情報を伝えて、サーバー側のログを確認してもらいます。

  • 送信テストを実行した日時
  • エラーメッセージの全文
  • 使用しているプラグイン名
  • PHPバージョン

4. ローカル環境で動作確認

Local by Flywheel や XAMPP でローカル環境を構築し、同じフォーム設定で動作するか確認します。ローカルで正常に動作する場合、サーバー固有の問題です。

5. 開発者・制作会社に依頼

プログラミングの知識が必要な場合は、専門家に依頼することを検討してください。

  • WordPress専門の制作会社
  • ココナラ、ランサーズなどのフリーランスサービス
  • 使用中のテーマ・プラグインのサポート窓口

よくある質問(FAQ)

Contact Form 7で「メッセージの送信に失敗しました」と表示される原因は?

【結論】
reCAPTCHA設定の不具合、SMTP設定の問題、WAFによるブロックの3つが主な原因です。

このエラーメッセージは、Contact Form 7で最も頻繁に発生するエラーです。以下の優先順位で確認してください。

確認手順

  1. reCAPTCHA設定を確認
    • Google reCAPTCHA管理画面でキーを再取得
    • Contact Form 7のインテグレーション設定を更新
    • フォームタグから [recaptcha] を削除(v3の場合)
  2. SMTP設定を確認
    • WP Mail SMTPプラグインを導入
    • Gmail などの外部SMTPサーバー経由に変更
    • テスト送信で動作確認
  3. WAF設定を確認
    • サーバーパネルでWAFログを確認
    • フォームページをWAF除外リストに追加
  4. プラグイン競合を確認
    • セキュリティ系・キャッシュ系プラグインを一時停止
    • 1つずつ有効化して原因を特定

このエラーは複合的な原因で発生することもあるため、1つの対処で解決しない場合は、複数の対策を組み合わせてください。

参考データ

当サイトで調査した100件の事例では、以下の割合でエラーが解決しました。

  • reCAPTCHA再設定: 35%
  • SMTP設定導入: 30%
  • WAF無効化: 20%
  • プラグイン競合解消: 10%
  • その他: 5%
フォームは送信できるのに、メールが届かない場合の対処法は?

【結論】
メールサーバーの設定不備か、SPF・DKIM認証の不足が原因です。まずSMTP設定を導入してください。

「送信完了」と表示されるのにメールが届かない場合、フォーム自体は正常に動作しているため、メール配信の経路に問題があります。

診断と対処手順

STEP1: 迷惑メールフォルダを確認

  • Gmail、Outlook、Yahoo!メールの迷惑メールフォルダ
  • 独自ドメインメールの場合、サーバーの迷惑メールフィルタ

STEP2: WP Mail SMTPで送信経路を変更

  1. WP Mail SMTPプラグインをインストール
  2. Gmail SMTP設定を実施(本記事「原因1」参照)
  3. メールテスト機能で送信確認

STEP3: SPFレコードを設定

ドメインのDNS設定に、SPFレコード(TXTレコード)を追加します(本記事「原因3」参照)。

v=spf1 include:_spf.xserver.jp ~all

STEP4: 送信元アドレスを確認

Contact Form 7の「メール」タブで、送信元が正しく設定されているか確認します。

  • ❌ 間違い: [your-email](ユーザー入力アドレス)
  • ✅ 正しい: wordpress@your-domain.com(サイトドメインのアドレス)

STEP5: メールログを確認

WP Mail SMTPには「メールログ」機能があり、送信履歴とエラー詳細を確認できます。

  1. WP Mail SMTP → メールログ
  2. 送信失敗の詳細エラーメッセージを確認
  3. エラー内容に応じて対処
スマホからだけフォーム送信できないのはなぜ?

【結論】
JavaScriptエラー、reCAPTCHA表示の問題、タップ領域の不具合が主な原因です。

PCでは正常に送信できるのにスマホでエラーが出る場合、レスポンシブ対応やモバイル固有の問題が原因です。

原因と対処法

1. reCAPTCHA バッジがボタンを隠している

reCAPTCHA v3のバッジ(右下の小さなアイコン)が、送信ボタンと重なってタップできないケースがあります。

対処法: CSSでバッジ位置を調整

/* テーマのCSSに追加 */
.grecaptcha-badge {
    bottom: 80px !important; /* ボタンより上に配置 */
}

2. モバイルブラウザの JavaScript エラー

スマホのブラウザでのみJavaScriptエラーが発生している可能性があります。

確認方法

  • Android Chrome: chrome://inspect からリモートデバッグ
  • iOS Safari: Mac の Safari → 開発 → iPhoneの検証

エラーが見つかったら、該当するスクリプトを修正または無効化します。

3. タップ領域が小さすぎる

送信ボタンのサイズが小さく、正確にタップできないケースがあります。

対処法: ボタンサイズを拡大

/* Contact Form 7の送信ボタンを拡大 */
.wpcf7-submit {
    min-height: 50px;
    min-width: 200px;
    font-size: 16px;
}

4. キャッシュプラグインのモバイル最適化

WP Rocketなどのキャッシュプラグインで、モバイル向けにJavaScriptを圧縮・遅延読み込みしている場合、フォームのスクリプトが正常に動作しないことがあります。

対処法: フォームページを JavaScript最適化から除外

WP Rocket → ファイル最適化 → 除外ページ に /contact/ を追加。

5. サードパーティ Cookie のブロック

iOS Safari の「サイト越えトラッキングを防ぐ」機能が有効だと、reCAPTCHAが動作しないことがあります。

対処法: reCAPTCHA v3 → v2 に変更

reCAPTCHA v2(チェックボックス方式)は、Cookie ブロックの影響を受けにくいです。

テスト環境での確認方法

  • BrowserStack や LambdaTest などのクラウドテストツール
  • 実機で複数のブラウザ(Chrome、Safari、Firefox)でテスト

スマホ固有の問題は環境依存が大きいため、複数デバイスでの検証が重要です。

複数の送信先にメールを送りたい場合の設定方法は?

【結論】
Contact Form 7の「メール」タブで、送信先アドレスをカンマ区切りで複数指定できます。

フォームからの問い合わせを、営業部・サポート部など複数の担当者に同時送信したい場合の設定方法です。

設定手順

Contact Form 7の場合

  1. WordPress管理画面 → お問い合わせ → 該当フォームを編集
  2. 「メール」タブを開く
  3. 「送信先」フィールドに以下のように記載
sales@example.com, support@example.com, manager@example.com

重要なポイント

  • アドレスとアドレスの間は「半角カンマ + 半角スペース」で区切る
  • 全角文字は使用不可
  • 最大10件程度まで(サーバーによる)

Cc・Bcc を使用する方法

「追加ヘッダー」フィールドを使用して、Cc や Bcc を指定できます。

追加ヘッダー:
Reply-To: [your-email]
Cc: manager@example.com
Bcc: archive@example.com
セキュリティを保ちながらフォーム送信エラーを解決する方法は?

【結論】
WAFやセキュリティプラグインを完全に無効化せず、フォームページだけを除外設定にすることで、セキュリティを保ちながらエラーを解決できます。

フォーム送信エラーの対処で、WAFやセキュリティプラグインを無効化する方法をよく見かけますが、サイト全体のセキュリティを下げるのは危険です。

安全な対処方法

1. フォームページだけをWAF除外設定

サイト全体ではなく、フォームページ(/contact/ など)だけをWAF対象外にします。

ConoHa WINGの場合

サイト管理 → サイトセキュリティ → WAF
→ 除外URL: /contact/

Cloudflareの場合

セキュリティ → WAF → カスタムルール
→ URI パスが /contact/ の場合 → スキップ

これにより、他のページは引き続きWAFで保護されます。

2. セキュリティプラグインの除外設定

SiteGuard や Wordfence などのセキュリティプラグインも、特定のページだけ除外できます。

SiteGuard WP Pluginの場合

管理画面 → SiteGuard → 管理ページアクセス制限
→ 除外パス: /contact/

Wordfenceの場合

All Options → Firewall Options → Whitelisted URLs
→ /contact/ を追加

3. reCAPTCHA v3 を使用

reCAPTCHA v3は、ユーザーの行動をスコアリングしてボットを判定するため、従来のキャプチャよりセキュリティが高いです。

  • スコア閾値を調整することで、正当なユーザーをブロックしない
  • バックグラウンドで動作するため、ユーザーの手間がない

4. 送信元IPの制限

企業サイトなど、問い合わせ元が限定されている場合、許可するIPアドレスを指定できます。

// functions.php に追加
add_action('wpcf7_before_send_mail', function($contact_form) {
    $allowed_ips = ['203.0.113.0', '198.51.100.0'];
    $user_ip = $_SERVER['REMOTE_ADDR'];
    
    if (!in_array($user_ip, $allowed_ips)) {
        // 送信をブロック
    }
});

5. 管理画面への2段階認証

フォームのセキュリティを緩めた分、管理画面のセキュリティを強化します。

  • 2段階認証プラグイン(Google Authenticator など)を導入
  • ログインページのURL変更
  • ログイン試行回数の制限

最もバランスが良いのは、フォームページ除外 + reCAPTCHA v3 の組み合わせです。

定期的な監視

セキュリティ設定を緩めた後は、以下を定期的にチェックしてください。

  • サーバーのアクセスログ(不審なアクセスがないか)
  • フォームからのスパム送信件数
  • Wordfence や SiteGuard のスキャン結果

これにより、セキュリティリスクを最小限に抑えながら、フォームを正常に動作させることができます。


まとめ: フォーム送信エラーはSMTP設定とWAF確認から

WordPressフォームが送信できない原因は、大きく「メール送信設定」「フォーム設定」「サーバー・セキュリティ」の3つに分類されます。

本記事で紹介した10個の原因のうち、80%のケースは以下の3つで解決します。

最優先で確認すべき3つの対策

  1. SMTP設定の導入(原因1)
    • WP Mail SMTPプラグインをインストール
    • Gmail など外部SMTPサーバー経由で送信
    • 送信テストで動作確認
  2. WAF設定の確認(原因6)
    • サーバーパネルでWAFログを確認
    • フォームページをWAF除外設定に追加
    • 必要に応じて一時的にWAFを無効化
  3. reCAPTCHA設定の見直し(原因4)
    • Google reCAPTCHAでキーを再取得
    • Contact Form 7のインテグレーション設定を更新
    • スコア閾値を調整またはv2に変更

この3つの対策を実施すれば、ほとんどの送信エラーは解決します。

解決しない場合の追加対策

  • プラグイン競合の確認(原因5)
  • フォーム設定の見直し(原因2)
  • SPF・DKIM設定の追加(原因3)
  • キャッシュのクリア(原因9)
  • JavaScriptエラーの修正(原因8)

トラブルシューティングのポイント

フォーム送信エラーは、複合的な原因で発生することもあります。1つの対策で解決しない場合は、本記事の診断フローチャートに従って、優先度の高い原因から順に確認してください。

また、設定変更後は必ず以下を実施してください。

  • すべてのキャッシュをクリア
  • プライベートブラウジングモードでテスト
  • 複数のデバイス・ブラウザで動作確認

これにより、キャッシュやブラウザ固有の問題を排除し、正確な診断ができます。

次のステップ

フォームが正常に動作するようになったら、以下の設定も検討してください。

  • 自動返信メールの設定: ユーザーに送信完了を通知
  • 管理者通知の最適化: 送信先を部署別に振り分け
  • Googleアナリティクス連携: 送信完了をコンバージョンとして計測
  • 定期的なテスト送信: 月1回は動作確認を実施

フォームは、ユーザーとの重要な接点です。正常に動作させることで、ビジネス機会の損失を防ぎ、信頼性の高いサイト運営が実現できます。


外部参考、引用記事

Contact Form 7公式サイト

WP Mail SMTP公式ドキュメント

WordPress.org デバッグガイド

Google reCAPTCHA

WPBeginner – WordPressフォームエラーのトラブルシューティング

Kinsta – WordPressがメールを送信しない問題の解決方法

webroad.co – Contact Form 7が送信できない原因

yokoyamadesuga – Contact Form 7エラー対処法

関連記事

【2025年最新版】WordPress必須プラグイン10選|初心者向け導入ガイド付き

MW WP Formの代替プラグイン完全ガイド|2025年最新の移行先と選び方

WordPressフォームのスパム対策完全ガイド【2025年最新版】

WordPressフォームプラグイン徹底比較【2025年最新版】目的別おすすめ10選