Homepage

お問い合わせフォーム設置の基本と失敗しやすい点

執筆・編集:遊馬 祥一郎公開:内容更新:

お問い合わせフォームはとりあえず置けば良いように見えますが、項目設計や受信確認が甘いと、問い合わせ機会を逃しやすい部分でもあります。設置時に決めるべきポイントを整理します。

表示できたら、受信まで確認

HTMLのフォームにメールアドレスを書くだけでは受信できない

フォームの入力欄を置いただけでは、データを受け取る処理はできていません。受信するには、外部フォームサービス、WordPressのフォーム機能、またはサーバー上の送信処理などを接続する必要があります。

まず「入力する画面」「送信先の処理」「通知を受けるメール」を分けて確認します。メールアドレスをフォームのactionへ直接入れる方法や、見た目だけの完了画面で受信できたと判断しないようにしましょう。

1. サイトの作り方に合う方法を選ぶ

スマホでは表を横にスクロールできます。

フォーム設置方法の選び分け
方法向いている状況確認すること
外部フォームサービス送信処理の運用を外部へ任せたい通知設定、保存先、利用上限、個人情報の取り扱い
WordPressのフォーム機能WordPress内で項目を編集したい更新管理、通知メール、迷惑送信対策、送信経路
PHPなどの独自処理自分で実装・保守できる入力検証、メール送信、エラー処理、脆弱性への対策

HTMLだけを置くサーバーではPHPの送信処理をそのまま動かせません。機能が足りないときも、先に外部フォームで足りるかを確認し、サーバー変更を急がないようにします。必要機能の整理はサーバーの選び方が参考になります。

2. 最初の相談に必要な項目だけを必須にする

制作の相談なら、名前・返信先メール・相談内容から始める構成が考えられます。予算や希望時期が未定でも相談できるようにすると、分からない項目で入力を止めずに済みます。これは入力設計の提案で、必須項目は業務に合わせて決めてください。

  • 必須と任意をラベルで明示する。
  • エラーになった項目と修正方法を示す。
  • 入力内容をできるだけ保ち、全項目を最初から書き直させない。
  • パスワード・秘密鍵・カード情報を送らないよう案内する。
  • 利用目的や取り扱いの案内を、入力前に確認できるようにする。

3. 送信処理と、実際のメール受信を分けて確認する

  1. フォームの送信先に、処理プログラムやサービス指定のURLを設定する。
  2. 受信先・送信元・返信先の役割を分けて設定する。
  3. サーバー側でも入力形式・必須項目を確認する。
  4. 処理が受け付けられた場合だけ、完了画面へ進める。
  5. 自分で管理する受信箱で、通知メールと返信先を確認する。

PHPのmail()が成功を返しても、受信箱への配送成功を保証するものではありません。PHP公式のmail()の説明にもこの区別があります。迷惑メールへの振り分けやメール送信側の設定を含めて確認します。

送信元は利用するサーバーやメールサービスの案内に従い、訪問者のメールアドレスを無条件に送信元へ使わないようにします。返信先として使う場合も入力検証が必要です。自動返信は任意の設計であり、付けるなら第三者への迷惑メール送信に悪用されないかも考えます。

当サイトのフォームで確認した入力・受付判定

2026年9月29日、当サイトの独自PHPフォームを非公開の候補環境で検証しました。PHP 8.2でメール送信機能を無効にし、テスト用の入力を使ってエラー画面・入力保持・受付済み判定を確認しています。下表は当サイトの実装での結果で、他のフォーム製品の検証結果ではありません。

スマホでは表を横にスクロールできます。

当サイトのフォーム受付試験
試した条件確認できた結果自分のフォームで見る箇所
CSRFトークンが一致しないエラーを表示し、送信を受け付けない成功画面へ進まないか
名前に <b>、相談内容に <script> を含めてエラーにする入力を文字として保持し、フォーム内でスクリプトとして出力しない入力の保持とHTMLのエスケープを両方確認する
文字数の上限ちょうど・上限超過日本語・絵文字・改行を含む境界を検査し、超過した入力は拒否するブラウザだけでなく送信処理側でも制限する
送信全体が96 KiB(98,304バイト)を超える「送信内容が大きすぎます」と表示する想定外の大きい入力で処理を続けないか
受付済み判定用IDを別セッションで使う・一度使って再読込するどちらも受付済みとして再利用できない完了URLを開くだけで問い合わせ件数が増えないか

今回の確認範囲:入力検証と受付判定の処理です。メールの実送信・受信箱への到着や、公開環境での解析イベント受信はこの検証に含めていません。メール送信を伴わないテストに合格しても、通知が届く証明にはならないため、公開前には下のテスト表で受信確認を別に行います。

現在の実装ではCSRFトークン、ハニーポット、入力開始からの時間確認、同一セッション内の送信間隔制限を組み合わせています。自動返信は現行フォームには実装していません。これらがあっても、あらゆる迷惑送信を防げるわけではありません。

4. 公開前にこのテスト表で確認する

フォーム公開前の確認項目
確認する場面期待する結果
必須項目が空送信されず、どこを直すか分かる
メール形式が不正送信処理側でも拒否される
通常の送信完了画面と通知メールの両方を確認できる
送信処理の失敗成功扱いにせず、再試行方法を案内する
スマホ・キーボード操作ラベルが読め、入力・修正・送信へ順に進める
連続操作二重送信への対応と、通常利用者が再試行できることを確認

テストには自分で管理するメールアドレスを使い、受信担当者へ事前に伝えます。大量送信や障害を起こすテストは公開環境で行わず、テスト環境で確認してください。

「届かない」ときに見る順番

エラー表示、送信先URL、サーバー側の処理結果、宛先設定、受信箱と迷惑メール、メールサービスの制限の順に切り分けます。ログに問い合わせ本文や認証情報を不用意に残さないようにしてください。

5. CSRF対策とスパム対策は役割が違う

CSRF対策は、意図しない外部サイトからのリクエストなどへの備えです。ボットは自分でフォームを開いてトークンを取得できるため、CSRFトークンだけを迷惑送信対策とは考えません。設計の基礎はOWASPのCSRF対策資料を参照できます。

  • サーバー側で必須項目・形式・長さを検証する。
  • ハニーポットや送信間隔の制限を、通常利用を妨げない範囲で組み合わせる。
  • セッションを切り替える送信にも備える必要があるか、運用状況を見て判断する。
  • 被害が続く場合は、追加のレート制限やボット対策サービスを検討する。

当サイトのセッション単位の制限は、送信者全体に対する制限ではありません。対策を入れた後も、正当な相談が送信できるかを確認しながら運用します。

6. 問い合わせ件数と、フォームへの移動を分けて見る

相談ボタンが押された回数と、実際に送信が完了した回数は別です。GA4を使うなら、記事から相談ページへの移動と、受付完了のイベントを分けます。名前・メールアドレス・相談本文をアクセス解析へ送らないようにしてください。

当サイトではservice_cta_clickとcontact_submitを分けていますが、計測イベントはメール配送の保証でも売上の証明でもありません。設定の入口はAnalyticsとSearch Consoleの基本にまとめています。

7. 届いた相談は、次の対応と一緒に記録する

フォームを受信した後は、誰がいつ何を返すかを決めます。相談中の案件にもIDを付け、案件名・進捗・次の行動・行動期限を記録すると、受信箱を開くだけでは分かりにくい対応待ちを確認できます。

記録例:「INQ-001/資料整理の相談/相談中/件数と納期を確認する/9月25日」。受注が決まるまでは見込額と売上を分けます。請求した後は、請求日・入金期日・累計入金額を書き込みます。フォームの受信だけで入金済みにしないでください。

PR・当サイト運営者の制作商品:記録用の表がまだない方は、BOOTHの無料・案件管理10件版(0円)を試せます。Excel形式のファイルを自分で入力する方式で、フォームからの自動転記や自動返信はありません。

テスト用の1件で請求前・一部入金・入金完了を試す手順で、入力場所と動作確認範囲を確認できます。最初は顧客情報を入れず、ファイルのコピーで表示・再計算を試してください。

運営者の実務メモ

設置や変更のあとは、自分で送信して受信箱まで確認する

フォームでよくあったのは、送信完了画面は出るのに通知メールが届いていない、迷惑メールフォルダに入っていた、というケースです。設置や変更のあとは、自分で実際に送信して、通知と自動返信の両方が受信箱に届くかを確認するようにしていました。

運営者の実務経験にもとづくメモです。すべての場合に当てはまるとは限りません。

公開日: 2026-04-23

最終更新日: 2026-09-29

追記履歴

  • 2026-09-29 非公開環境での入力・受付判定の検証結果と、確認範囲を追加
  • 2026-09-22 問い合わせ受信後の案件記録例と、無料テンプレート・入力ガイドへの案内を追加
  • 2026-09-09 判断手順・確認表・実作業の記録と関連記事を追加
  • 2026-04-23 初版公開