日本語

プレミアムコネクターを使わずにCMSフォームをSalesforceに接続する

Webフォームの送信をSalesforceに転送するために月額5,000円から2万円程度のサードパーティコネクターを支払っているなら、その必要がない可能性は十分にあります。このガイドはSalesforceに特化しています。あらゆるCRMへのフォームからCRMへの連携パターンについては、実際にスケールするフォームからCRMへの連携パターンをご覧ください。

Salesforceには2000年代初頭からWeb-to-Leadという無料の組み込みリード獲得APIがあります。標準のPOSTリクエストでフォーム送信を受け付け、Leadレコードを自動作成し、カスタムフィールドマッピングもサポートしています。連携プラットフォームは不要です。月額料金もありません。Salesforce公式Web-to-Leadドキュメントは、フィールドの制限、スパムフィルターの設定、組織固有の設定オプションについての信頼できる参照先です。

ほとんどのチームが使用しない理由は、SalesforceのWeb-to-Leadに関する公式ドキュメントが開発者向けに書かれているためです。HTMLフォームのコードが提示され、それをWebサイトに直接埋め込むことが前提とされています。WordPress、Webflow、Framerを使用しているチームは、そのHTMLスニペットを見て既存フォームにどう組み込むか疑問に思うのは当然です。

実際には簡単に組み込めます。仕組みを理解するだけで十分です。このガイドでは、開発の前提知識なしでその仕組みを説明します。

このガイドでは3つの実装オプションを扱います。

  • オプションA: Salesforce Web-to-Lead (ネイティブ、無料、ほとんどのチームに最適)
  • オプションB: Zapier無料プラン (ノーコード、Zapierの無料タスク上限内で利用可能)
  • オプションC: n8nセルフホスト (無料、無制限の処理量、サーバーが必要)

各オプションは独立しています。自分の状況に合ったものを読み、他はスキップして構いません。

選択前に: 必要なものを把握する

適切なオプションを選ぶために、以下の質問に答えましょう。

月間フォーム送信数は?

  • 500件未満: どのオプションでも可、Web-to-Leadから始めることを推奨
  • 500~5,000件: Web-to-LeadまたはN8n (Zapierはコストが積み上がる)
  • 5,000件超: Web-to-LeadまたはN8n

技術的なリソースはありますか?

  • いいえ: オプションA (Web-to-Lead) またはオプションB (Zapier)
  • あり、または技術ガイドに従う意欲がある: 3つのオプションすべて

標準のSalesforce Leadフィールドを超えたカスタムフィールドマッピングが必要ですか?

  • 標準フィールドのみ: オプションAで十分
  • カスタムフィールド: 設定を加えたオプションA、またはオプションB/C

使用しているCMSは?

  • WordPress、Webflow、Framer、Squarespace: どのオプションでも対応可能
  • カスタム構築のWebサイト: どのオプションでも対応可能、オプションAが最もシンプル

オプションA: Salesforce Web-to-Lead (ネイティブ、無料)

Web-to-LeadはSalesforceの機能で、組織固有の一意のエンドポイントURLを生成します。あらゆるWebサイトのあらゆるフォームがそのURLにPOSTでデータを送信でき、SalesforceはLeadレコードを自動作成します。

ステップ1: SalesforceでWeb-to-Leadフォームを生成する

Salesforceで次のパスに移動します: 設定 → マーケティング → リード管理 → Web-to-Lead

「Web-to-Leadフォームを作成」をクリックします。

左側にフィールドセレクターが表示されます。取得したいフィールドを追加します。よく使用する標準Leadフィールドは以下の通りです。

  • メールアドレス
  • 電話番号
  • 会社名
  • 役職
  • リードソース (「Webサイト」などの固定値に設定)
  • 説明 (自由テキストのメッセージや質問フィールド用)

Salesforce組織にカスタムLeadフィールドがある場合は、このリストにも表示されます。

右側に以下が表示されます:

  • リターンURL: フォーム送信後にSalesforceがユーザーをリダイレクトする先。Webサイトのサンクスページに設定します。
  • レスポンスメール: 取得後にSalesforceがリードに送信するメール (省略可能)。

「生成」をクリックします。Salesforceは次のようなHTMLスニペットを生成します。

<form action="https://webto.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8" method="POST">
  <input type="hidden" name="oid" value="YOUR_ORG_ID">
  <input type="hidden" name="retURL" value="https://yoursite.com/thank-you">
  
  名: <input  id="first_name" maxlength="40" name="first_name" size="20" type="text" />
  姓: <input  id="last_name" maxlength="80" name="last_name" size="20" type="text" />
  メール: <input  id="email" maxlength="80" name="email" size="20" type="text" />
  会社: <input  id="company" maxlength="40" name="company" size="20" type="text" />
  <input type="submit" name="submit">
</form>

このスニペットの重要な要素:

  • action="https://webto.salesforce.com/...": フォームが送信するエンドポイント
  • 組織IDを持つ name="oid": Salesforce組織へ送信をルーティング
  • name="retURL": 送信後のリダイレクト先
  • フィールドの name 属性: Salesforceが正しくマッピングするために完全に一致する必要があります

ステップ2: 既存のCMSフォームをWeb-to-Leadに接続する

フォームをSalesforceのHTMLスニペットに置き換える必要はありません。正しいフィールド名でSalesforceのエンドポイントにPOSTするよう既存フォームを設定するだけです。

WordPress (Gravity Forms) の場合:

  1. Gravity Formsでフォームを編集します
  2. 設定 → 確認 → 新規追加へ移動します
  3. 確認タイプをサンクスページのURLへの「リダイレクト」に設定します
  4. 設定 → アドオン → カスタム投稿タイプへ移動します (カスタム送信ハンドラーを使用している場合)

WordPressでのより簡潔な方法: Gravity Formsの「Web API」アドオンまたは「Zapier」アドオンを使用してSalesforceへブリッジします。ただし、純粋なWeb-to-Leadを希望する場合は、フィールドマッピングインターフェースを提供する「Web-to-Lead for Salesforce」などのプラグインをインストールします。

Webflowの場合:

Webflowのフォームは送信時にカスタムURLへのリダイレクトができ、カスタムフィールド名でも設定できます。Web-to-Leadへの接続方法:

  1. Webflowのフォーム設定で、フォームのアクションをWeb-to-Lead URLに変更します: https://webto.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8
  2. フォームメソッドをPOSTに設定します
  3. 各フォームフィールドの name 属性をSalesforceフィールド名に一致するよう変更します (first_namelast_nameemailcompany)
  4. Salesforce組織IDを値として持つ oid という名前の非表示フィールドを追加します
  5. サンクスページのURLを値として持つ retURL という名前の非表示フィールドを追加します

Webflowのデザイナーで各入力要素を編集します。「要素設定」の「名前」フィールドを見つけ、Salesforceフィールド名に設定します。

Framerの場合:

FramerのフォームコンポーネントはカスタムアクションURLをサポートしています。Webflowと同様のアプローチです。アクションURLをWeb-to-Leadエンドポイントに更新し、フィールド名をSalesforceフィールド名に一致するよう変更し、非表示のoidとretURLフィールドを追加します。

ステップ3: カスタムSalesforceフィールドを処理する

カスタムSalesforce Leadフィールド (組織で作成したもの) にマッピングする必要がある場合、プロセスは似ていますが、フィールドのAPI名が必要です。

Salesforceで次のパスに移動します: 設定 → オブジェクトマネージャー → リード → 項目とリレーション

カスタムフィールドを見つけ、「項目名」列をメモします。__c で終わります (例: Website_Source__c)。

Web-to-Leadフォームジェネレーターでは、カスタムフィールドがフィールドセレクターに表示されます。選択すると、生成されたHTMLに正しい入力名フォーマットが含まれます: 00N に続いて組織固有のフィールドIDが入ります。

このフォーマットは <input type="hidden" name="00N1a000003abc" value="yourvalue"> のようになります。標準フィールド名ほどわかりやすくはありませんが、機能します。生成されたHTMLから正確な name 属性値をコピーし、CMSフォームで使用します。

Web-to-Leadのよくある落とし穴

スパムフィルタリングによるサイレント送信拒否: SalesforceのWeb-to-Leadスパムフィルターは、あなたやリードへの通知なしに送信を拒否することがあります。エラーは表示されません。フォームは正常に送信されますが、Leadは作成されません。

スパムフィルタリングの症状: リードがフォームを送信したと報告しているが記録がない、フォーム送信数とSalesforceのLead作成数が一致しない。

対処法: Salesforceが送信をホワイトリストに登録するために使用する非表示フィールドをフォームに追加します。Web-to-Leadの設定に「キャプチャ」オプションがあります。有効にして、生成されたreCAPTCHAフィールドをフォームに追加します。

デフォルトのリード所有者がキューに設定され、担当者に直接届かない: Web-to-LeadはSalesforceのリード割り当てルールに基づいてリードを割り当てます。割り当てルールを設定していない場合、リードはデフォルトのリードキューに移動し、担当者に直接届きません。

対処法: Web-to-Leadの送信を特定のユーザーに割り当てるか、標準のラウンドロビンルーティングを実行する少なくとも1つのデフォルト割り当てルールを設定します。設定 → マーケティング → リード割り当てルールに移動します。役職や企業規模に基づくより複雑なルーティングロジックについては、チャット会話コンテキストに基づくリードの担当者へのルーティングでルーティングの意思決定フレームワークを解説しています。

必須フィールドの欠落によるサイレントエラー: SalesforceがLeadオブジェクトで必須とみなしているフィールドをフォームが取得していない場合、送信はサイレントで失敗します。Leadは作成されず、エラーも表示されません。

対処法: Leadオブジェクトの必須フィールドを確認します (設定 → オブジェクトマネージャー → リード → 項目とリレーション、「必須」列を確認)。標準の必須フィールドは「会社」なので、フォームで必ず取得するようにします。

レコード作成前にリターンURLリダイレクトが実行される: Web-to-LeadはPOSTを受信するとすぐにリターンURLへリダイレクトします。Leadが実際に処理されて作成される前です。サンクスページへSalesforceレコードIDを渡す方法はありません。

これは予期された動作です。サンクスページはSalesforceレコードが作成されたことを確認しようとすべきではありません。作成は非同期で行われるためです。Wikipediaの非同期処理パターンに関する記事では、Web-to-Leadのようなファイアアンドフォーゲットアーキテクチャがバックエンドの処理完了前にリダイレクトする理由について背景を提供しており、技術的な知識がない運用チームがこれらの連携を設定する際によくある混乱の原因です。

オプションB: Zapier無料プラン

Zapierの無料プランには月100タスクが含まれており、低量チーム (Webフォームから月100件未満のリード) には十分です。

Web-to-LeadではなくZapierを使う場面:

  • Salesforceへの書き込み前に変換ロジックを追加したい場合 (例: 名+姓をフルネームに結合、リードスコアを計算)
  • フォームツールにZapier連携はあるが、Web-to-Leadの直接オプションがない場合
  • デバッグ用にZapierの履歴で送信内容を確認したい場合

セットアップ (15~20分)

  1. フォームツールをZapierのトリガーとして接続します

    • 主なもの: Typeform、Gravity Forms、HubSpotフォーム、Webflow、Jotform、Googleフォーム
    • トリガーイベントとして「新規送信」を選択します
    • Zapierがサンプル送信を受信することを確認します
  2. Salesforceアクションを追加します

    • アプリとして「Salesforce」を選択します
    • アクションとして「リードを作成」(またはupsert動作には「リードを検索/作成」) を選択します
    • Salesforceアカウントで認証します
  3. フォームのフィールドをSalesforce Leadフィールドにマッピングします

    • email → メール
    • first_name → 名
    • last_name → 姓
    • company → 会社
    • 必要なカスタムフィールドをマッピング
  4. このフォームが代表するソースの固定値を持つ「リードソース」フィールドを追加します: 「Webサイト」

  5. 実際の送信でテストし、Salesforce内にLeadが表示されることを確認します

upsertの制限: Zapierの基本「リードを作成」アクションは常に新しいレコードを作成します。同じメールアドレスがフォームを2回送信すると、2件のLeadが作成されます。重複排除を処理するには、「レコードを検索」と条件付きパスのアプローチを使用します。

ステップ1: Zapier → リードを検索 (メールで検索) ステップ2: リードが見つかった場合 → リードを更新 / 見つからない場合 → リードを作成

これは送信ごとに1タスクではなく23タスクを使用します。無料プランの月100タスク制限では、上限に達する前に月約3050件のユニークなフォーム送信を処理できます。

オプションC: n8nセルフホスト (無料、無制限の処理量)

n8nはセルフホスト可能なオープンソースのワークフロー自動化ツールです。タスクごとの料金はありません。稼働させてしまえば、どんな処理量でも実質無料です。

n8nを使う場面:

  • サーバーを設定できる技術力がある (またはすでにサーバーを持っている)
  • 処理量がZapierの無料プランを超えている
  • タスクごとの料金なしでロジックを完全に制御したい
  • すでに他のワークフローでn8nを使用している

セットアップ概要

1. n8nをデプロイする:

開発者以外にとって最も簡単なデプロイ方法: n8nクラウド (アクティブワークフロー5件の無料プランあり)。または月額約900円のVPSでDockerを使ってセルフホスト:

docker run -it --rm \
  --name n8n \
  -p 5678:5678 \
  -e N8N_BASIC_AUTH_ACTIVE=true \
  -e N8N_BASIC_AUTH_USER=admin \
  -e N8N_BASIC_AUTH_PASSWORD=yourpassword \
  -v ~/.n8n:/home/node/.n8n \
  n8nio/n8n

http://your-server:5678 でn8nにアクセスします。

2. webhookトリガーノードを作成する:

n8nで新しいワークフローを作成します。「Webhook」ノードをトリガーとして追加します。

  • メソッド: POST
  • 認証: なし (セキュリティのためにHeader Authも可)
  • webhookのURLをコピー: https://your-n8n-instance/webhook/form-to-salesforce

3. フォームをn8n webhookにPOSTするよう設定する:

Web-to-Leadと同じアプローチですが、Web-to-LeadのURLの代わりにn8n webhookのURLをフォームアクションに指定します。

または、フォームツールにwebhookオプションがある場合 (Gravity Forms、Typeform、Webflowはすべて対応)、n8n URLへ送信するよう設定します。

4. フィールド変換を追加する (任意):

n8nの「Set」ノードでSalesforceへ書き込む前にフィールド値を変換できます。主な変換処理:

  • 名と姓をフルネームに結合
  • 電話番号フォーマットの正規化
  • フォームIDやページURLに基づくリードソースの設定

5. Salesforceノードを追加する:

n8nに「Salesforce」ノードを追加します。Salesforceアカウントを接続します。アクション: 「リードを作成または更新」(upsert)。

webhookペイロードのフィールドをSalesforce Leadフィールドにマッピングします。

n8nワークフローJSONテンプレート (フォームからSalesforce)

以下は適用可能な簡略化されたワークフロー構造です。

{
  "nodes": [
    {
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "parameters": {
        "path": "form-to-salesforce",
        "responseMode": "onReceived",
        "responseCode": 200
      }
    },
    {
      "name": "Map Fields",
      "type": "n8n-nodes-base.set",
      "parameters": {
        "values": {
          "string": [
            { "name": "email", "value": "={{ $json.body.email }}" },
            { "name": "firstName", "value": "={{ $json.body.first_name }}" },
            { "name": "lastName", "value": "={{ $json.body.last_name }}" },
            { "name": "company", "value": "={{ $json.body.company }}" },
            { "name": "leadSource", "value": "Website" }
          ]
        }
      }
    },
    {
      "name": "Salesforce",
      "type": "n8n-nodes-base.salesforce",
      "parameters": {
        "resource": "lead",
        "operation": "upsert",
        "externalId": "Email",
        "email": "={{ $json.email }}",
        "additionalFields": {
          "firstName": "={{ $json.firstName }}",
          "lastName": "={{ $json.lastName }}",
          "company": "={{ $json.company }}",
          "leadSource": "={{ $json.leadSource }}"
        }
      }
    }
  ]
}

externalId: "Email" を持つ upsert 操作は重複排除ロジックを処理します: そのメールアドレスのLeadが既に存在する場合は更新、存在しない場合は作成します。

テスト送信チェックリスト

3つのオプションのいずれかで本番稼働する前に:

  • 自分のコンタクト詳細でテストフォームを送信する
  • 2分以内にSalesforceのLeadレコードが作成されることを確認する
  • マッピングされたすべてのフィールドが正しく入力されていることを確認する (空の必須フィールドがない)
  • 同じフォームを2回送信する (同じメールアドレス): 重複排除ロジックでLeadが1件だけ作成 (または更新) されることを確認する
  • Leadの所有者割り当てを確認する: 正しい担当者/キューに届いているか?
  • リターンURLリダイレクトが機能することを確認する (Web-to-Lead) またはサンクスページが表示される (Zapier/n8n)
  • メールアドレスなしの送信が拒否されることを確認する (バリデーション)
  • Salesforce内のLeadで「ピックリストの値が無効」などのマッピングエラーが表示されていないことを確認する

重要な指標を計測する

サイレント失敗ゼロ: すべてのフォーム送信がSalesforce Leadを生成する (または既存のものを更新する) 必要があります。週次でカウントを比較します: フォーム送信数 (CMSまたはフォームツールのアナリティクスから) と新規Lead作成数 (Salesforceから)。差異はサイレント失敗を示します。完全なエラーログを備えたカスタムwebhookベースの取得を希望するチームは、カスタム連携のためのwebhookベースのリード獲得でその実装方法を解説しています。

リードからSalesforceまでの遅延時間: フォーム送信からLead作成までの時間。Web-to-Leadは通常数秒以内にレコードを作成します。Zapierはタスクキューによって1~5分かかる場合があります。n8nはほぼリアルタイムであるべきです。

コネクター費用ゼロ: 3つのオプションのいずれかを正しく実装した場合、継続的なコネクターコストはゼロであるべきです。ツール予算でこれを追跡し、節約をコンテンツや広告費用に充てましょう。GartnerのマーケティングテクノロジーへのIT支出に関する分析では、連携とコネクターのコストがmartechスタックの肥大化の最も一般的な原因の一つとして一貫して特定されており、不要なミドルウェアライセンスを排除することは機能を失わずに支出を合理化したいチームにとってすぐできる改善策です。

関連記事