お問い合わせフォーム設置の基本と失敗しやすい点
お問い合わせフォームはとりあえず置けば良いように見えますが、項目設計や受信確認が甘いと、問い合わせ機会を逃しやすい部分でもあります。設置時に決めるべきポイントを整理します。
お問い合わせフォームはとりあえず置けば良いように見えますが、項目設計や受信確認が甘いと、問い合わせ機会を逃しやすい部分でもあります。設置時に決めるべきポイントを整理します。
フォームの入力欄を置いただけでは、データを受け取る処理はできていません。受信するには、外部フォームサービス、WordPressのフォーム機能、またはサーバー上の送信処理などを接続する必要があります。
まず「入力する画面」「送信先の処理」「通知を受けるメール」を分けて確認します。メールアドレスをフォームのactionへ直接入れる方法や、見た目だけの完了画面で受信できたと判断しないようにしましょう。
スマホでは表を横にスクロールできます。
| 方法 | 向いている状況 | 確認すること |
|---|---|---|
| 外部フォームサービス | 送信処理の運用を外部へ任せたい | 通知設定、保存先、利用上限、個人情報の取り扱い |
| WordPressのフォーム機能 | WordPress内で項目を編集したい | 更新管理、通知メール、迷惑送信対策、送信経路 |
| PHPなどの独自処理 | 自分で実装・保守できる | 入力検証、メール送信、エラー処理、脆弱性への対策 |
HTMLだけを置くサーバーではPHPの送信処理をそのまま動かせません。機能が足りないときも、先に外部フォームで足りるかを確認し、サーバー変更を急がないようにします。必要機能の整理はサーバーの選び方が参考になります。
制作の相談なら、名前・返信先メール・相談内容から始める構成が考えられます。予算や希望時期が未定でも相談できるようにすると、分からない項目で入力を止めずに済みます。これは入力設計の提案で、必須項目は業務に合わせて決めてください。
PHPのmail()が成功を返しても、受信箱への配送成功を保証するものではありません。PHP公式のmail()の説明にもこの区別があります。迷惑メールへの振り分けやメール送信側の設定を含めて確認します。
送信元は利用するサーバーやメールサービスの案内に従い、訪問者のメールアドレスを無条件に送信元へ使わないようにします。返信先として使う場合も入力検証が必要です。自動返信は任意の設計であり、付けるなら第三者への迷惑メール送信に悪用されないかも考えます。
2026年9月29日、当サイトの独自PHPフォームを非公開の候補環境で検証しました。PHP 8.2でメール送信機能を無効にし、テスト用の入力を使ってエラー画面・入力保持・受付済み判定を確認しています。下表は当サイトの実装での結果で、他のフォーム製品の検証結果ではありません。
スマホでは表を横にスクロールできます。
| 試した条件 | 確認できた結果 | 自分のフォームで見る箇所 |
|---|---|---|
| CSRFトークンが一致しない | エラーを表示し、送信を受け付けない | 成功画面へ進まないか |
| 名前に <b>、相談内容に <script> を含めてエラーにする | 入力を文字として保持し、フォーム内でスクリプトとして出力しない | 入力の保持とHTMLのエスケープを両方確認する |
| 文字数の上限ちょうど・上限超過 | 日本語・絵文字・改行を含む境界を検査し、超過した入力は拒否する | ブラウザだけでなく送信処理側でも制限する |
| 送信全体が96 KiB(98,304バイト)を超える | 「送信内容が大きすぎます」と表示する | 想定外の大きい入力で処理を続けないか |
| 受付済み判定用IDを別セッションで使う・一度使って再読込する | どちらも受付済みとして再利用できない | 完了URLを開くだけで問い合わせ件数が増えないか |
今回の確認範囲:入力検証と受付判定の処理です。メールの実送信・受信箱への到着や、公開環境での解析イベント受信はこの検証に含めていません。メール送信を伴わないテストに合格しても、通知が届く証明にはならないため、公開前には下のテスト表で受信確認を別に行います。
現在の実装ではCSRFトークン、ハニーポット、入力開始からの時間確認、同一セッション内の送信間隔制限を組み合わせています。自動返信は現行フォームには実装していません。これらがあっても、あらゆる迷惑送信を防げるわけではありません。
| 確認する場面 | 期待する結果 |
|---|---|
| 必須項目が空 | 送信されず、どこを直すか分かる |
| メール形式が不正 | 送信処理側でも拒否される |
| 通常の送信 | 完了画面と通知メールの両方を確認できる |
| 送信処理の失敗 | 成功扱いにせず、再試行方法を案内する |
| スマホ・キーボード操作 | ラベルが読め、入力・修正・送信へ順に進める |
| 連続操作 | 二重送信への対応と、通常利用者が再試行できることを確認 |
テストには自分で管理するメールアドレスを使い、受信担当者へ事前に伝えます。大量送信や障害を起こすテストは公開環境で行わず、テスト環境で確認してください。
エラー表示、送信先URL、サーバー側の処理結果、宛先設定、受信箱と迷惑メール、メールサービスの制限の順に切り分けます。ログに問い合わせ本文や認証情報を不用意に残さないようにしてください。
CSRF対策は、意図しない外部サイトからのリクエストなどへの備えです。ボットは自分でフォームを開いてトークンを取得できるため、CSRFトークンだけを迷惑送信対策とは考えません。設計の基礎はOWASPのCSRF対策資料を参照できます。
当サイトのセッション単位の制限は、送信者全体に対する制限ではありません。対策を入れた後も、正当な相談が送信できるかを確認しながら運用します。
相談ボタンが押された回数と、実際に送信が完了した回数は別です。GA4を使うなら、記事から相談ページへの移動と、受付完了のイベントを分けます。名前・メールアドレス・相談本文をアクセス解析へ送らないようにしてください。
当サイトではservice_cta_clickとcontact_submitを分けていますが、計測イベントはメール配送の保証でも売上の証明でもありません。設定の入口はAnalyticsとSearch Consoleの基本にまとめています。
自分で進めるのが難しい場合は、運営者の制作・設定サポートの対応範囲と料金も確認できます。
フォームを受信した後は、誰がいつ何を返すかを決めます。相談中の案件にもIDを付け、案件名・進捗・次の行動・行動期限を記録すると、受信箱を開くだけでは分かりにくい対応待ちを確認できます。
記録例:「INQ-001/資料整理の相談/相談中/件数と納期を確認する/9月25日」。受注が決まるまでは見込額と売上を分けます。請求した後は、請求日・入金期日・累計入金額を書き込みます。フォームの受信だけで入金済みにしないでください。
PR・当サイト運営者の制作商品:記録用の表がまだない方は、BOOTHの無料・案件管理10件版(0円)を試せます。Excel形式のファイルを自分で入力する方式で、フォームからの自動転記や自動返信はありません。
テスト用の1件で請求前・一部入金・入金完了を試す手順で、入力場所と動作確認範囲を確認できます。最初は顧客情報を入れず、ファイルのコピーで表示・再計算を試してください。
フォームでよくあったのは、送信完了画面は出るのに通知メールが届いていない、迷惑メールフォルダに入っていた、というケースです。設置や変更のあとは、自分で実際に送信して、通知と自動返信の両方が受信箱に届くかを確認するようにしていました。
運営者の実務経験にもとづくメモです。すべての場合に当てはまるとは限りません。
公開日: 2026-04-23
最終更新日: 2026-09-29
追記履歴