問い合わせフォームで「送信できない」「送ったのに返事がない」と言われたら、ブラウザ・サーバー受付・メール送信・メール受信の4段を上から順に潰します。たいてい30分で場所が特定できます。
この記事はサイトを運営する側(Web担当・情シス・総務)向けです。送信者に操作方法を案内する話ではなく、自社のフォームのどこで消えているかを突き止める手順と、見つけにくい「自分たちのスパム対策が本物を落としている」ケースを扱います。そもそも流入がなくて送信がゼロという集客側の話はホームページの問い合わせを増やす方法に譲り、本記事は「送ったのに消えている」側だけを扱います。
まず4段に分け、上から順に潰す
「送信できない」は症状であって原因ではないので、最初に4段のどこで止まったかを決めます。
| 段 | 何が起きているか | 送信者から見た症状 | 最初に見る場所 |
|---|---|---|---|
| 1. ブラウザ | データが飛んでいない | ボタンを押しても画面が変わらない | 開発者ツール(Network / Console) |
| 2. サーバー受付 | 飛んだが拒否・エラー | エラー画面、赤い警告文 | アクセスログ・エラーログ |
| 3. メール送信 | 受付はしたがメールが出ていない | 「送信完了」と出るのに連絡が来ない | 受付ログ・メール配信サービスのログ |
| 4. メール受信 | 出たが受信側で弾かれた | 同上 | 迷惑メールフォルダ・隔離・振り分けルール |
厄介なのは3段目と4段目です。送信者の画面には「送信ありがとうございました」と出るため、送信者は届いた前提で待ち、運営側も気づきません。申告が来た時点で、気づけなかった送信がすでに何件かあると考えたほうが実態に近いです。実フォームデータを分析すると、営業か本物か機械的には決めきれない送信が3割前後を占めます(後述)。この帯を削る設定を入れれば、届かない申告は必ず出ます。まず自分で1件送ってみてください。再現すれば1〜2段目、再現しないのに届いていなければ3〜4段目です。
第1段・第2段:ブラウザから飛んでいるか、サーバーが受けているか
送信ボタンを押しても画面が変わらないなら、多くは入力チェックかJavaScriptエラーで、サーバーには何も届いていません。
フォームを開き、開発者ツール(WindowsならF12)のConsoleとNetworkを出した状態で送信します。POSTが出なければ1段目、出ていれば2段目以降です。
1段目でいちばん多いのはHTMLの入力チェックです。MDNは、要素が不正な場合「ブラウザーがフォームの送信をブロックし、エラーメッセージを表示します」と説明しています(MDN: クライアント側フォーム検証)。問題は、そのエラー表示が送信者に見えないことがある点です。
- 未入力の必須項目が画面のずっと上にあり、ボタン付近からエラーが見えない
- 個人情報の同意チェックが未チェック。本文が長く、存在に気づかない
- 電話番号の
pattern(入力形式の指定)がハイフンなししか許していない - フォームのスクリプトが他と競合して途中で止まっている(Consoleに赤いエラーが出ます)
スマートフォンでの申告なら実機で再現します。画面幅でエラー表示の位置が変わるためです。
POSTが出ているのにエラーになる場合はステータスコードで分かれます。403はWAF(不正アクセス遮断機能)が本文中の記号やURLに反応したケースで、検知ログから該当ルールを除外します。期限切れの表示はワンタイムトークンの失効で、フォームを開いたまま放置した場合やキャッシュがトークンごと配信されている場合に起きます。500はプラグインのエラーやメモリ不足です。200なのに警告文が出るなら、受付はできていてフォーム側がメールを止めています。
第3段:メールは実際に出ているか
「送信完了」と出るのにメールが来ない場合、Webサーバーからメールが出ていないか、送信元の設定が原因で受け取ってもらえていません。
見落とされやすいのは、WordPressのwp_mail()が成功を返しても届いたことを意味しない点です。関数のドキュメントは、trueが返っても「ユーザーがメールを正常に受信したことを自動的に意味するものではなく、エラーなく処理を要求できたことだけを意味する」と明記しています(wp_mail() – WordPress Developer Resources)。「送信しました」は投函したところまでしか保証していません。
原因として多いのは3つです。
- サーバーのPHPからそのまま送っている。 共用サーバーのIPから直接出るため受信側の評価が低く、迷惑メール行きになりやすくなります。SMTP設定か配信サービス経由に変えると安定します。
Fromに、フォームへ入力された送信者のアドレスを入れている。 送信ドメイン認証は自社ドメインに設定するものなので、他社ドメインをFromにすると認証が効きません。返信先を送信者にしたいならReply-Toを使います。- 通知先アドレスが古い。 退職者のアドレスが残っている、異動でメーリングリストの中身が変わった。設定画面を開けば分かるのに、真っ先には疑われません。
フォーム側に受付ログを持たせるか配信サービスのログを見れば、どの宛先に送り受信サーバーがどう応答したかまで残り、3段目と4段目の切り分けは一瞬で終わります。
第4段:受信側で弾かれていないか
メールは出ているのに届かない場合は、送信ドメイン認証の不備か、受信側のフィルタ・隔離・振り分けが原因です。
Googleの送信者ガイドラインは、送信量にかかわらずすべての送信者に対し、送信ドメインへのSPFまたはDKIMの設定と、送信ドメイン・IPの有効な正引き・逆引きDNSレコードを求めています(Google: メール送信者のガイドライン)。通知メールがGmailに届かないという相談は、ここが未設定なだけのことが少なくありません(→SPF・DKIM・DMARCとは)。
認証に問題がなければ、受信側を順に見ます。
- 迷惑メールフォルダ。フォーム通知は定型文なので、一度そう扱われると続く
- 管理者が設定した隔離。Google WorkspaceやMicrosoft 365では利用者の迷惑メールフォルダにも入らないことがある
- 個人の自動振り分けと共有メールボックスの転送。専用フォルダを誰も見ていない、転送が途中で切れている
最後の1つは技術的には正常動作で、ログにも異常が出ません。関係者の受信箱を見せてもらうのが早いです。
いちばん見つけにくいのは、スパム対策が本物を落としているケース
エラーも警告も出ないまま本物が消える原因は、自分たちが入れたスパム対策です。
きっかけは、営業メールを減らしたくて設定を強めることです。Hajikが分析した、美容商社(国内最大手・上場)の実フォームデータでは、reCAPTCHA v3を通過した送信のうち問い合わせフォームで営業が12.9%、中途採用フォームでは73.1%が人材サービスの営業でした。しかも問い合わせフォームでは32.2%が機械的には判定困難です(簡易ヒューリスティックによる分類。業種・規模・フォームの性格で比率は大きく変わる、一社・一時点のサンプルです)。この「判定困難」の帯にしきい値を食い込ませると、営業と一緒に本物が落ちます。
| 対策 | 本物が落ちる仕組み | 気づき方 |
|---|---|---|
| reCAPTCHA v3のしきい値を上げる | 人間でもスコアが低く出ることがある | 拒否件数とスコア分布を記録する |
| 禁止ワードリスト | 「無料」を入れると本物の「無料相談希望」が落ちる | 拒否ログにワードと本文を残す |
| ハニーポット(隠し項目) | ブラウザの自動入力が隠し項目にも入れてしまう | 隠し項目を理由にした拒否件数を見る |
| 滞在時間チェック | 下書きを貼り付けて即送信する人が弾かれる | 下限を短くし、拒否でなく要確認へ |
| IP・国での遮断 | 出張中・海外拠点・モバイル回線の共有IPが巻き込まれる | 遮断ログを国別に見る |
reCAPTCHA v3の公式ドキュメントは「1.0は良好なインタラクションである可能性が高く、0.0はボットである可能性が高い」とし、既定では0.5のしきい値を使用できると説明しています(reCAPTCHA v3)。これを0.7や0.9に上げると、営業と一緒に本物も落ちます(→reCAPTCHAで営業メールが減らない理由)。
さらに、多くの実装は拒否ではなく黙って捨てます。スパムに手掛かりを与えない作りですが、副作用として本物も静かに消えます。自社サイトを含む複数の実サイトにフォーム判定を設置して運用している経験から言うと、ここは「捨てない」を選ぶべきです。怪しい送信も破棄せずラベルを付けて残し、人が最終確認する。迷ったものは本物として扱う。強める前に、誤って落としたものをあとから見つけられるかを確認してください(→問い合わせフォームのスパム対策の基本)。
再発防止は「気づける状態」を先に作る
再発防止の要点は、原因をなくすことより、次に起きたときに自分たちで気づけるようにすることです。
- 受付ログとメール送信ログを分けて残す。 「受付はある/送信がない」で3段目と4段目を切り分けられます。
- 週1回、社外ドメインから本番フォームにテスト送信する。 プラグイン更新・サーバー移転・DNS変更・異動のあとは必ず1回流します。
- 拒否件数と、迷惑メールフォルダ・管理者の隔離を毎月見る。 拒否が何か月もゼロなら対策が効いていないかログが取れていないか、急増ならしきい値の見直しどきです。
- 自動返信に受付番号を入れる。 照会に番号1つで答えられます。
よくある質問
自動返信は届くのに、社内への通知メールだけ届きません
通知メールのFromが自社ドメインか、宛先が古いアドレスのままでないかを確認します。自動返信が届いているなら送信経路は生きているので、受信側の隔離や振り分けも疑ってください。
「送信できない」と言われましたが、こちらでは再現できません
環境依存か、スパム対策で静かに落ちているかの二択になりがちです。後者の切り分けには拒否ログが要ります。無ければ、まず残す仕組みを入れるところからです。
スパム対策を強くするほど、本物が届かなくなりませんか
そうなります。しきい値を上げる前に「落としたものを見返せるか」を確認してください。営業を減らす目的なら、遮断を強めるより内容で仕分ける層を足すほうが安全です。Hajikも99%以上を自動で遮断し、残り約1%は人が判断する前提で設計しています。
明日やること
- 社外ドメインのアドレスから本番フォームに1件テスト送信し、通知が受信箱に届くまで見る
- 通知メールの
Fromが自社ドメインか確認し、送信者のアドレスが入っていたらReply-Toへ移す - 通知先アドレスの一覧を出し、退職者・旧部署のアドレスを消し込む
- SPFまたはDKIMが設定済みか確認する。未設定なら今週着手する
- スパム対策の拒否件数が記録されているか確認し、1〜5を月1回でカレンダーに登録する
届いた問い合わせのどれが本物でどれが営業かを仕分ける工程は問い合わせフォームの営業メール対策の実務ガイドにまとめています。自社フォームの状態を確かめたい方は無料診断を、判定を試したい方は14日間の無料トライアルをご利用ください。