コンバージョン

フォームの送信が重複するのはなぜですか?

執筆:Jake Luo · 公開日:2026年9月22日

実際にフォームが複数回送信され、受け取る側がそれに気づかなかったからです。ページが同じ問い合わせを二度送る理由は、ありふれたものだけで少なくとも5つあります — 二度目のクリック、すでに成功していたリクエストの再試行、再読み込み、1つのフォームに2つのハンドラ、そしてボットです。最初の押下でボタンを無効化しても、そのうち1つが直るだけで残りは残ります。効く対処は受け取る側にあります。同じフォームからの同一の送信を短い時間枠の中では無視し、その繰り返しに対して、受理されたときとまったく同じ応答を返すことです。

1件の問い合わせが3件になる5つの道すじ

まずフォームを疑いたくなりますが、たいていフォームは正常です。重複は、ごく普通のページとごく普通のネットワークが出会ったときに起きることで、最初の有効な一手は修正ではありません。どれを見ているのかを見極めることです。対処がそれぞれ違うからです。

  1. 訪問者が送信を二度押した。 最初の押下のあと見た目に何も変わらなかったので、もう一度押しました。最も多い原因であり、ボタンを無効化するという定番の助言が実際に効く唯一の原因です。
  2. すでに成功していたリクエストが再試行された。 送信はあなたのハンドラに届き、ハンドラは保存し、応答が戻り道で失われました。送信側から見れば失敗なので、もう一度試します。数秒差で完全に同一のコピーが生まれるのはこれで、ページ側をいくら丁寧に作っても防げません。
  3. ページが再読み込みされた、または戻るボタンで再訪された。 送信したあと同じ場所に自前のお礼画面を描くフォームは、誰かが再読み込みすると喜んでもう一度すべて送ろうとします。こちらのコピーは数分から数時間あいて届き、それが見分け方になります。
  4. 1つのフォームを2つのものが処理している。 ホスティング備え付けのフォーム処理に加えて、生成ツールやプラグインが足したスクリプトが、それぞれ自分のコピーを送っています。ほぼ同時に届き、形が違うこともよくあります — 一方は全項目を運び、もう一方は半分空のまま届きます。
  5. そもそも人間ではなかった。 リンクの先読み、セキュリティスキャナ、ありふれたボットはフォームの受け口に到達し、ときに送信までします。こちらのコピーは単に重複しているというより中身が役に立ちません。空欄、意味のない値、多数のアドレスから届く同一の中身などです。ハニーポット項目 — 人間には見えず決して入力されない入力欄 — を置けば、ほとんど手間なく大半を取り除けます。

2つの見方でほとんどの場合は切り分けられます。コピーどうしの間隔を見てください。ほぼ同時なら2つのハンドラかボット、数秒差なら二度目のクリックか再試行、数分以上なら再読み込みです。次に、コピーが完全に同一かどうかを見てください。実在の人物による本当の2通目は、たとえ一語であってもたいていどこかが違います。

直すべき場所は受け取る側

この一覧のうちボット以外はすべて正常な振る舞いであって、取り除ける欠陥ではありません。ネットワークは応答を落とし、人は二度クリックし、ブラウザは送れと言われたものを再送します。どれも止まりません。ですから変えるべきなのは、同じ問い合わせが二度目に届いたときに何が起きるかです。

仕組みは小さくて済みます。送信の中身から短い指紋を作り、数分だけ覚えておき、同じ中身がその時間枠の中で再び届いたら二つ目を保存しない。これで二度目のクリックも、ネットワークの再試行も、再読み込みも一度に片づきます。どれが起きたかを気にせず、この問い合わせをすでに見たという一点だけを見るからです。

間違えやすいのは、その重複に何を返すかです。私たちは顧客が公開するページをホストしているので、顧客の問い合わせフォームはすべて自社の1つの受け口に送られます。そして重複は何度も戻ってくる苦情でした。顧客サイト3件で、1件の問い合わせがそれぞれ3回、5回、2回保存されていました。受け口が重複に対して、受理されたときとバイト単位で同じ応答を返すようになるまで再発し続けました。重複を拒む受け口は、たとえ丁寧で親切な文言であっても、その前にいるページに何かが失敗したと伝えます。するとページ自身の再試行処理か、エラーを読んだ訪問者が、もう一度送ります。重複を除きながら失敗に見える受け口は、重複を生む装置です。

時間枠の選び方と、捨ててはいけないもの

時間枠の長さだけが本当の判断どころで、2つの失敗を天秤にかけます。短すぎれば遅れて来た再試行が通ってしまいます。長すぎれば本物の2通目を黙って捨てます — 朝に書いて返事がなく、同じ文面でもう一度書いた人です。機械的な原因はどれも速く起きるので数分あれば足ります。私たちは10分にしました。問い合わせフォームはここでは寛容で、それほど近い間隔の本物の2通目はまれだからです。

指紋は訪問者が入力した項目だけから取り、それ以外からは取らないでください。リクエスト全体を要約したくなりますが、それは仕組み全体を静かに無効化します。タイムスタンプ、セッショントークン、計測用パラメータは送るたびに変わるので、あらゆる重複が唯一のものに見えて何も捕まりません。訪問者が入力を終えたあとに自分のページが送信へ付け足すものについても、同じ注意が要ります。

最後に、捨てた重複は黙って流さず数えてください。重複を除く受け口と、壊れた配送経路は、空の受信箱から見れば同じに見えます。そして片方ははるかに緊急です。問い合わせがまったく届かない場合は別の調査であり、自分の対処がメッセージを食べたのではないかと悩む代わりに、こちらを素早く除外できるようにしておきたいのです。

よくある質問

最初のクリックのあと送信ボタンを無効化すれば直りますか?
5つの原因のうち1つが直ります。それでもやる価値はあります。その原因が最も多く、変更も簡単だからです。押下が受け付けられたことを訪問者にすぐ示し、リクエストが飛んでいる間は操作を無効にしてください。届かないのは、ページより下の層で起きる再試行、再読み込み、2つ目のハンドラ、そしてボットです。これは仕上げと考え、受け取る側の照合を本体の対処と考えてください。
中身の要約ではなく、フォームごとに一意のトークンを使うべきですか?
両端を自分で握っているなら、そのほうが強く、決済 API がやっていることでもあります。送信側はフォームが描かれた時点で鍵を1つ生成し、再試行のたびに同じ鍵を使い回すので、受け取る側は推測ではなく正確に再試行だと分かります。それでも中身から指紋を取る理由は、送信側に何も求めないからです。フォームをサイトビルダーや生成ツール、自分の管理下にないプラグインが作っている場合に効いてきます。
すでにたまっている重複はどう片づけますか?
タイムスタンプではなく中身でまとめ、各グループの最も古いものを残し、何かを消す前に必ず一部を読んでください。返事がないので念を押した人の場合、本当に別々の2通が一字一句同じになることがあります。コピーがメールとして受信箱に届いているなら同じまとめ方が使え、自分の返信が片方にしか行っていないかも確認する価値があります。まず受け口を直してください。でないと来週また同じ作業をすることになります。
関連する質問
サイトから問い合わせが来ないのはなぜ?ウェブサイトにバックエンドは必要ですか?自分のサイトのトラフィックのうち、実際にどれくらいがボットですかサイト訪問者をサインアップに変えるには?

この作業、任せてみませんか?

AgentCeres はマネージド型の AI マーケティングチームです。スペシャリストが下書きを作り、何を公開するかはあなたが承認します。14日間無料トライアル、月額 $39 から。

無料トライアルを開始ほかの質問を見る