ガイド

ガイド4 分で読めます

サイトビルダーのフォームの限界を超える

Webflow、Netlify、Carrd、Framer のフォームが上限や機能不足に当たったら、デザインしたフォームはそのままに、送信先をフォームバックエンドに変えましょう。

Preet SutharIkiform 創業者

ビルダーが描画するフォームはそのままにして、送信先だけを変えます。Webflow ではカスタムアクション、Carrd では Send to URL、Framer では Webhook の送信先、Netlify でホストしているページではプレーンな action です。送信はフォームバックエンドに届き、そこで各送信データが検証、フィルタリング、保存、転送されるので、ビルダーの送信数の上限やプランの制約は適用されなくなります。ファイルアップロードやビルダー自体の受信箱など、何を手放すかを先に確認してください。

どのサイトにもフォームが必要なので、サイトビルダーにはフォームが付いています。ただし、それは最初のお問い合わせフォームのための作りで、10 個目のフォームや 1,000 件目の送信のためではありません。いずれ壁に当たります。送信数の上限、他では必要ないプランを要求する機能、サイトが 1 つのホストにいる間しか動かないフォーム、あるいは誰が連絡してきたかの唯一の記録が受信箱だけという状態です。

それを乗り越えるためにフォームを作り直す必要はありません。主要なビルダーはどれも、フォームを別の場所に送れます。このガイドでは、そうしたときに何が変わるか、送信を 1 件も失わずに各ビルダーで設定する方法、そしてビルダーのフォームのままにしておくほうがよい場合を説明します。

フォームがビルダーを離れると何が変わるか

ビルダーのフォームには 2 つの部分があります。ビルダーが描画する見える部分と、送信を受け取る部分です。フォームバックエンドに移すと、置き換わるのは後者だけです。レイアウト、フォント、スタイルはそのまま残ります。

フォームバックエンドに送信する前と後のビルダーのフォーム前:ビルダーが送信を処理後:ビルダーはフォームを描画するだけあなたのフォームビルダーでデザインビルダーのフォームハンドラープランの上限に数えられるビルダーの受信箱かメール手作業でエクスポート同じフォーム同じレイアウトとスタイルIkiform検証、スパム除外、保存メール、Webhook、CSVチームとツール送信action の URLフォームバックエンドに送信する前と後のビルダーのフォーム前:ビルダーが送信を処理後:ビルダーはフォームを描画するだけあなたのフォームビルダーでデザインビルダーのフォームハンドラープランの上限に数えられるビルダーの受信箱かメール手作業でエクスポート同じフォーム同じレイアウトとスタイルIkiform検証、スパム除外、保存メール、Webhook、CSVチームとツール送信action の URL
  1. 前:訪問者がフォームを送信し、ビルダー自体のフォームハンドラーが送信を受け取ります。
  2. ビルダーはそれをプランの送信数の上限に数え、受信箱に保存するかメールで送ります。
  3. 後:同じデザインの同じフォームが、代わりに Ikiform のエンドポイントに送信します。
  4. Ikiform がフィールドを検証し、送信のスパムスコアを付け、保存します。
  5. Ikiform はチームにメールを送り、署名付きの Webhook を送り、すべての送信データを検索でき CSV でエクスポートできる状態で保管します。
変わるのは送信先だけです。ビルダーは送信を目にしないので、そのフォームには送信数のカウントもフォーム機能も適用されなくなります。

よく当たる制限

どこで線を引くかはビルダーごとに異なります。この表は、2026 年 10 月時点で各ビルダーが料金ページとヘルプページに記載している内容をまとめたものです。プランは変わるので、判断する前にリンク先のページで詳細を、ビルダーのサイトで最新情報を確認してください。

ビルダーフォームでできること壁に当たるところ抜け道
Webflow送信データを保存し、通知メールを送り、CSV をエクスポート無料の Starter プランでは、フォームの送信はサイトごとに合計 50 件までで、カウントはリセットされません。エクスポートしたサイトではフォームは一切処理されませんForm Block の設定でのカスタムアクション。Starter でも使えます
Netlifyデプロイ時に data-netlify のフォームを検出し、送信を保存旧プランでは送信数をサイトごと・月ごとに計測し、上限を超えるとサイトを有料の Forms レベルにアップグレードします。フォームは Netlify がビルドしたサイトでしか動きませんNetlify の属性を削除し、フォームの action を設定
Carrdお問い合わせフォームはメールで届き、登録フォームはメールツールに人を追加どのフォームにも Pro Standard が必要。Send to URL を含むカスタムフォームには Pro Plus が必要Pro Plus の Send to URL、または Pro Standard の Embed
Framer各送信をメール、Google Sheets、Webhook に送信上限と呼べるものはなし。チームが求めるのは、スパムの状態付きの保存記録、検証、通知、複数の送信先エンドポイントを Webhook の送信先として追加するか、コードコンポーネントを使う

Framer の行に注目してください。Framer にはすでに Webhook があるので、そのフォームから移るのは上限を回避するためではなく、送信後に何が起きるかの選択です。Framer のページでは、Ikiform がまったく不要な場合についても正直に書いています。

制限を超える 4 つの方法

フォームバックエンドだけが答えではなく、最善でない場合もあります。

方法得意なことトレードオフ
ビルダーのプランをアップグレードする移行作業はゼロ。Webflow の有料サイトプランは送信数無制限をうたい、Netlify のクレジット制プランではフォームが無料1 つの制限を外すためにプラン全体の料金を払うことになります。フォームはそのビルダーとホストに縛られたまま
Tally や Typeform などのフォームビルダーを埋め込む豊富な質問タイプ、ロジック、ファイルアップロードをコードなしで独自の見た目とスクリプトを持つ iframe。ビルダーで作ったデザインは失われ、制限はその製品のプランに移ります
サーバーレス関数などで、独自のハンドラーを書く完全な制御。どんなロジックでも書けるコードを動かさずに済むようにビルダーを選んだサイトで、スパムフィルタリング、レート制限、保存、通知、リトライを自分で抱えることになります
フォームの送信先を Ikiform などのフォームバックエンドにするデザインはそのまま。スパムフィルタリング、保存、チームへのメール、署名付き Webhook、CSV エクスポートが、どのビルダーでも同じように使えますファイルアップロードはまだなく、ビルダーの受信箱も、ビルダー内でクリックして組む連携もありません。外部に送るのに有料プランが必要なビルダーもあります

ビルダーのフォームで必要なことがすべてでき、他の理由でもプランに価値があるならアップグレードしましょう。制限がフォームそのものに関わるなら、フォームバックエンドに移りましょう。複数のサイトからの送信を 1 か所にまとめたい、ビルダーを乗り換えるかもしれない、送信データを他のツールに確実に届ける必要がある、といった場合です。Netlify Forms との比較では、1 つのホストについてこのトレードオフを詳しく扱っています。

手放すもの

フォームが別の場所に送信すると、ビルダーはそれをプレーンな HTML フォームとして扱います。そのフォームにはビルダーのフォーム機能が適用されなくなります。切り替える前に、次の点を把握しておいてください。

  • ビルダーの受信箱。 新しい送信データはビルダーではなく Ikiform のダッシュボードに表示されます。古いものは元の場所に残ります。
  • ビルダーの成功メッセージ(場合による)。 Webflow の成功ブロックとエラーブロックは、Webflow が送信を処理したときにしか動きません。Carrd の AJAX モードと Framer の Webhook 送信先では残ります。
  • ファイルアップロード。 ファイルアップロードにはまだ対応していません。ファイル付きの送信には 422 files_not_supported が返ります。Webflow、Netlify、Carrd のカスタムフォームはどれもファイルを受け付けるので、最初に確認してください。
  • クリックで組む連携。 ワンクリックの連携はありません。どのツールにも、署名付きの Webhook で直接、または Zapier や n8n などの自動化ツール経由で届けます。
  • ビルダーのスパムフィルター。 Ikiform のハニーポット、スパムスコアリング、レート制限、任意の人間確認が代わりを務めます。ビルダーで追加した reCAPTCHA 要素は、カスタムの送信先では何もしないので削除してください。
ファイルアップロードが必要なフォームがあれば、そのフォームだけビルダーに残し、残りを移しましょう。サイト上のすべてのフォームが同じバックエンドを使う必要はありません。

各ビルダーの送信先を Ikiform にする

Ikiform のダッシュボードでフォームを作成し、エンドポイントをコピーします。あとは、ビルダー自体の外部送信先の設定を使います。Webflow、Carrd、Framer のドキュメントのガイドに、クリックの手順がすべて載っています。ここでは変える箇所と、多くの人が見落とす 1 点を示します。

Webflow

  1. Form Block の中のフォームを選択し、Settings を開きます。
  2. Send to でカスタムアクションを選び、Action にエンドポイントを貼り付け、Method を POST にします。
  3. 各入力欄の Name を email のような小文字の id に変更します。Webflow はラベルから名前を付けるので、そのままだと Email や Field 2 になります。
  4. 公開して、webflow.io のドメインから送信します。カスタムアクションは Designer の中では動きません。

見落としがちな点:Webflow はもう結果を受け取らないので、Webflow の成功ブロックは表示されなくなります。Ikiform で Redirect after submit を設定するか、Webflow のドキュメントのスクリプトを追加してください。詳細と Starter の上限は Webflow の制限のページにあります。

Netlify

  1. data-netlify または netlify、netlify-honeypot、非表示の form-name 入力欄を削除します。
  2. フォームの action をエンドポイントに、method を post にします。
  3. 以前のサンクスページのパスを、完全な https: の URL として Redirect after submit に移します。
  4. JavaScript のフォームでは、Netlify のビルド用に残していた非表示の静的コピーを削除し、自分のサイトではなくエンドポイントに送信します。

見落としがちな点:デプロイプレビューはそれぞれ独自の netlify.app サブドメインにあるので、Allowed domains の本番ドメインではカバーされません。Netlify のページに、各フレームワーク用のコードがあります。

Carrd

  1. Pro Plus で Form を追加し、Type を Custom に、続けて Send to URL を選び、エンドポイントを貼り付けます。
  2. Method を AJAX に、Format を Default にすると、Carrd の On Success と On Failure の動作が残ります。
  3. すべてのフィールドに ID または Submitted ID を付けます:name、email、message。
  4. Pro Standard では、代わりに Embed 要素に HTML フォームを貼り付けます。

見落としがちな点:XML 形式は 415 で、File フィールドは 422 files_not_supported で失敗します。Carrd のページを参照してください。

Framer

  1. 各入力欄に小文字の名前を付けます。Framer は名前を JSON のキーとして送ります。
  2. フォームを選択し、Send To の横で Add… > Webhook を選び、エンドポイントを貼り付けます。
  3. Ikiform では Allowed domains を空にし、Spam check をオフにして、レート制限は Relaxed を選びます。

見落としがちな点:Framer は訪問者のブラウザーではなく自社のサーバーから送信するので、オリジンのチェックや訪問者ごとのレート制限は通常どおりには働きません。Framer のページで、そのトレードオフと、それを解決する署名付きリレーを説明しています。

Squarespace、Wix、WordPress など

外部の送信先を設定できないビルダーでも、たいていは HTML の埋め込みを受け付けます。下のようなフォームをコードブロックや埋め込みブロックに貼り付けてください。fetch で送信するので訪問者はページにとどまり、Ikiform からの最初のフィールドエラーを表示し、スクリプトが動かなければ通常の送信にフォールバックします。

埋め込みまたはコードブロック
<form id="enquiry" action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post" target="_top">
  <label>Name <input name="name" autocomplete="name" required maxlength="120"></label>
  <label>Email <input name="email" type="email" autocomplete="email" required></label>
  <label>Budget
    <select name="budget">
      <option value="">Not sure yet</option>
      <option value="under_5k">Under $5k</option>
      <option value="5k_20k">$5k to $20k</option>
      <option value="over_20k">Over $20k</option>
    </select>
  </label>
  <label>What are you planning? <textarea name="message" rows="5" required minlength="20"></textarea></label>
  <input type="hidden" name="source" value="builder-embed">
  <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden>
  <p id="enquiry-status" role="status" hidden></p>
  <button type="submit">Send enquiry</button>
</form>
<script>
  document.getElementById("enquiry").addEventListener("submit", async (event) => {
    event.preventDefault();
    const form = event.currentTarget;
    const status = document.getElementById("enquiry-status");
    const button = form.querySelector("button");
    button.disabled = true;
    try {
      const response = await fetch(form.action, {
        method: "POST",
        headers: { Accept: "application/json" },
        body: new FormData(form),
      });
      const result = await response.json();
      if (result.ok) {
        form.replaceChildren(Object.assign(document.createElement("p"), {
          textContent: "Thanks. We reply within two working days.",
        }));
        return;
      }
      const fields = result.error.fields ?? {};
      const first = Object.keys(fields)[0];
      status.textContent = first ? `${first}: ${fields[first][0]}` : result.error.message;
    } catch {
      status.textContent = "Couldn't send. Check your connection and try again.";
    }
    status.hidden = false;
    button.disabled = false;
  });
</script>
  • ビルダーが埋め込みを iframe で包む場合は target="_top" が重要です。これがないと、プレーンな送信ではサンクスページがフレームの中に読み込まれます。
  • 非表示の _gotcha 入力欄がハニーポットです。人には見えず、すべての入力欄を埋めるボットは自らスパムだと示すことになります。
  • 非表示の source 入力欄は、問い合わせがどのビルダーやページから来たかを記録します。複数のサイトが 1 つのフォームに送信するときに役立ちます。
  • スクリプトは fetch で送信するので、このフォームでは Spam check をオフのままにするか、スクリプトを削除してブラウザーに通常どおり送信させてください。そうすれば追加のコードなしでチェックが動きます。

Squarespace、Wix、WordPress のガイドで、各ビルダーのどこにコードを貼り付けられるかを解説しています。スタイル付きの版はサイトビルダーの埋め込みにあります。

各ビルダーで誰が送信するのか、それが許可ドメインにとって何を意味するのかWebflowカスタムアクション訪問者のブラウザードメインを登録CarrdSend to URLか Embed訪問者のブラウザードメインを登録Netlifyプレーンな action訪問者のブラウザードメインとプレビューFramerWebhook 送信先Framer のサーバー空のままビルダー設定送信元許可ドメイン各ビルダーで誰が送信するのか、それが許可ドメインにとって何を意味するのかWebflowカスタムアクション訪問者のブラウザードメインを登録CarrdSendtoURLかEmbed訪問者のブラウザードメインを登録Netlifyプレーンなaction訪問者のブラウザードメインとプレビューFramerWebhook送信先Framerのサーバー空のままビルダー設定送信元許可ドメイン
  1. Webflow のカスタムアクションでは訪問者のブラウザーが Ikiform に送信するので、Allowed domains に自分のドメインを登録します。
  2. Carrd の Send to URL と Embed もブラウザーから送信するので、許可ドメインは通常どおり機能します。
  3. プレーンな action を持つ Netlify ホストのフォームはブラウザーから送信します。本番ドメインと、テストに使うプレビューのドメインを登録してください。
  4. Framer の Webhook 送信先は Origin ヘッダーなしで Framer のサーバーから送信するので、Allowed domains は空にしてください。そうしないと、すべての送信が別のサイトから来たものとして扱われます。
3 つのビルダーは訪問者のブラウザーから送信します。Framer の Webhook は Framer から送信するので、スパムチェックとレート制限からの見え方が変わります。

本当の移行作業はフィールド名

ビルダーのフォームを移す作業の大半は名前付けです。Ikiform はフォームが送った名前をそのまま保存し、ビルダーはそれぞれ独自の方法で名前を生成します。

ビルダー名前の出どころ設定しなかった場合
Webflow各入力欄の Name 設定Name、Email、Field 2 のようなラベル
CarrdSubmitted ID、次に IDラベルから生成された ID
Framer各入力欄の名前追加したときに入力欄に付いていた名前
NetlifyHTML の name 属性自分で付けた名前。たいていはそのままで問題なし

公開前に、name、email、budget、message のような短い小文字の id に変更しましょう。通知メールや CSV の列が読みやすくなり、email フィールドはすべての通知の返信先アドレスになります。本物の送信が 1 件届いたら、Ikiform のフォームにフィールドを追加して、サーバーで型と長さを強制します。上の問い合わせフォームを、その定義で試してみてください。

プレビュー

Ikiform のバリデーターをブラウザーで実行します。何も送信されません。

上の埋め込みと同じフィールドです。定義をフォームの Fields タブに貼り付けると、ビルダーがどのように送っても、Ikiform がすべての送信をそれに照らしてチェックします。
フィールドは、本物の送信を 1 件見てから定義しましょう。先に定義してはいけません。ビルダーは Carrd の UTM フィールドのように、頼んでいないフィールドを追加します。それを含まない定義では、すべての送信が Unknown field エラーの 422 になります。

ステージングのドメインと許可ドメイン

ビルダーは、自分のドメインより先にステージングのアドレスに公開します。フォームの Allowed domains にないドメインからの送信は、スパムとして保存されるか、Reject なら拒否されます。テストに使うすべてのアドレスを登録してください。

ビルダーステージングのアドレス追加するもの
Webflowyour-site.webflow.ioそのホストと、自分のドメイン
Carrdyour-site.carrd.co、Pro では crd.coそのホストと、自分のドメイン
Netlifyyour-site.netlify.app と、deploy-preview-42--your-site.netlify.app のようなプレビューテストに使う各ホスト。プレビューは your-site.netlify.app のサブドメインではありません
Framer、Webhook該当なし何もしない。一覧は空のままにします

webflow.io や netlify.app のような共有ホスト全体を追加しないでください。そのホスト上のすべてのサイトがあなたのフォームに送信できてしまいます。一覧にあるドメインのサブドメインはすでに許可されているので、example.com で www.example.com もカバーできます。

過去の送信データも持っていく

Ikiform にはインポート機能がないので、過去の送信データは元の場所に残ります。切り替える前に、そしてプランの変更で消える可能性がある前に、エクスポートしておいてください。

  • Webflow: サイトの Forms 設定から、フォームごとの送信データを CSV でダウンロードします。
  • Netlify: サイトの Forms セクションから、フォームごとの送信データを CSV でダウンロードします。
  • Carrd: お問い合わせフォームとカスタムのメールフォームは各メッセージをメールで届けるので、受信トレイが記録になります。
  • Framer: 送信データの送り先にしたメールの受信トレイか Google スプレッドシートが記録になります。

履歴を 1 つにまとめるには、古いエクスポートと Ikiform の CSV エクスポートを 1 つの Google スプレッドシートの 2 つのタブに入れて縦に積み重ねます。この数式は、それぞれから日付、名前、メールアドレス、メッセージの列を取り出し、新しい順に並べます。列の文字はファイルに合わせて調整してください。

Google Sheets
=SORT({
  Webflow!A2:A, Webflow!C2:C, Webflow!D2:D, Webflow!E2:E;
  Ikiform!B2:B, Ikiform!F2:F, Ikiform!G2:G, Ikiform!H2:H
}, 1, FALSE)

Ikiform のエクスポートは id、created_at、form、status で始まり、その後にフィールドごとに 1 列が続きます。1 ファイルに最大 100,000 行入ります。

送信を 1 件も失わずに切り替える

  1. Ikiform のフォームを作り、通知の受信者を追加し、ステージングと本番のドメインを Allowed domains に追加します。
  2. ステージングのサイトで送信先を変更し、スマートフォンとノートパソコンから実際にテスト送信します。
  3. ダッシュボードで送信データのフィールド名を確認します。自動生成された名前があれば変更し、ステージングを再公開して再テストします。
  4. アクセスの少ない時間帯に本番のドメインへ公開し、もう一度テストを送ります。
  5. 移行していない別のフォームなど、ビルダーにまだ何か届くなら、ビルダーの通知を 1 週間はオンのままにし、その後オフにします。
  6. ビルダーの古い送信データをエクスポートし、新しい履歴と一緒にファイルを保管します。

最初の 1 週間は、1〜2 日おきに Ikiform のダッシュボードで Spam フィルターを確認してください。スパムとして保存された本物の問い合わせにも本物と同じ成功の応答が返るので、訪問者は気づきません。スパムではないとマークすると、その時点でメールと Webhook が送られます。通知メールは確認済みの受信者 10 人まで送れます。

状況に合わせて選ぶ

ビルダーごとに、上限も、外部の送信先の設定も、ハマりどころも違います。以下のページでは、ビルダーを 1 つずつ説明します。

動作を確認する

まずステージングで、次に本番のサイトで 1 回行ってください。Ikiform に無料プランはありません。テストは無料です。プランのないワークスペースでも、localhost からのテスト送信を月 50 件まで受け付けます。本番運用するには、500 件で月 $6 からの Pro を選ぶか、買い切りにしてください。10,000 件で $49、または 50,000 件で $149 で、クレジットに有効期限はありません。料金を参照してください。

  1. フォームの Allowed domains に自分のサイトのドメインを追加し、開発中は localhost も追加します。空のままにすると、どこからの送信も受け付けます。
  2. ビルダーのステージング用ドメインに公開します。カスタムの送信先はエディターやデザイナーの中では動きません。
  3. ページのフォームに入力して送信します。自分のサンクスページか、Ikiform のサンクスページに移動します。
  4. ダッシュボードで Submissions を開きます。送ったすべてのフィールドを含む新しい送信データがあります。
  5. その送信データのフィールド名を確認します。ラベルや自動生成された名前ではなく、小文字の ID になっているはずです。
  6. 通知の各受信者の受信トレイを確認します。それぞれにフィールド入りのメールが届き、フォームに email フィールドがあれば Reply で送信者に返信できます。
  7. ハニーポットを埋めて _gotcha=bot で送信します。成功の応答は返りますが、送信データはスパムとして保存され、メールも Webhook も送られません。
  8. 何も届かない場合は、ダッシュボードのステータスフィルターを Spam に切り替えてください。スパムにも本物の送信と同じ成功の応答が返ります。
  9. 本番のドメインに公開したら、そこからもう一度送信します。

トラブルシューティング

問題対処法
Webflow のフォームを送信すると 404 not_found が返るMethod が GET になっているので、ブラウザーがリンクのようにエンドポイントを開いています。POST に設定して再公開してください。
Carrd で毎回 On Failure が表示されるFormat が XML になっている(415)、File フィールドがある(422)、またはフィールド ID がフィールド定義と一致していません。Default を使い、ファイルのフィールドを削除し、ID を合わせてください。
Framer が Webhook の配信失敗を報告するIkiform が送信を拒否しています。Allowed domains を空にし、そのフォームの Spam check をオフにして、入力欄の name をフィールドに合わせてください。
Netlify の Forms タブにまだフォームが表示される古いデプロイかフォームの静的なコピーに、まだ data-netlify が残っています。すべての場所から削除して再デプロイしてください。
403 origin_not_allowed が返る、またはすべての送信がスパムになるページのドメインがフォームの Allowed domains にありません。ドメインと、ローカルテスト用の localhost を追加してください。登録したドメインのサブドメインは許可されます。
422 validation_failed送信がフォームのフィールド定義に合っていません。error.fields に各フィールドと理由が示されます。入力欄の name をフィールド ID に合わせてください。
422 files_not_supportedフォームの <input type="file"> でファイルが選択されています。ファイルアップロードにはまだ対応していません。入力欄を削除するか、代わりにリンクを尋ねてください。
送信データはダッシュボードにあるのに、メールも Webhook も届かないスパムとして保存されています。スパムでは何も送られません。Spam フィルターで開いて理由を確認し、スパムではないとマークすると、メールと Webhook が送られます。

よくある質問

手順で詰まったときや、あなたの状況に合うガイドがほしいときはメールでどうぞ: hello@ikiform.com