SalesIQの二重初期化とは、Zoho CRMのWebフォームを貼ったページで、Zoho SalesIQのチャットウィジェットを読み込む処理が2回動いてしまう状態のことです。SalesIQは、Webサイトの訪問者の追跡とチャットができるZohoのツールです(チャットボットとしての使い方はZoho SalesIQで簡単作成!AIチャットボットの活用術で紹介しています)。サイト全体にSalesIQを入れているところへ、Zoho CRMのWebフォーム(問い合わせをそのまま見込み客として登録するフォーム)を貼ると、この状態が起きることがあります。

この記事では、当社が支援した中小の金属表面処理加工業のサイトで実際に起きた事象をもとに、原因と直し方、反映後の確かめ方を手順でまとめます。

起きたこと:お問い合わせページのチャットが「オフライン」のまま消えない

お問い合わせページにZoho CRMのWebフォームを設置したあと、そのページだけチャットウィンドウに「担当者がオフラインです」と表示され続けるようになりました。

このサイトでは、SalesIQの埋め込みコードを全ページ共通で設置していました。さらに、フローティングのチャットボタンは非表示にする設定(SalesIQのJavaScript APIの $zoho.salesiq.floatbutton.visible("hide"))を入れていました。ところが、フォームを貼ったページだけこの非表示設定が効かず、オフライン表示のチャットが出たままになっていました。

問い合わせをしようとしたお客様から見ると、「オフライン」と書かれた窓が画面に残り続けます。フォームから送れば問題なく届くのですが、「今は受け付けていないのか」と迷わせてしまいます。

なぜZoho CRMのWebフォームでSalesIQが二重に読み込まれるのか

原因は、Webフォームのコードにも、SalesIQを読み込む処理が入っていることです。Zoho CRMが生成するWebフォームのコードには、「訪問者の追跡」が有効なとき、id='VisitorTracking' という <script> ブロックが含まれます。このブロックには、役割の違う2つの処理が同居しています。

  1. 訪問者IDをリードに紐付ける処理:$zoho.salesiq オブジェクトの定義と、trackVisitor…() 関数です。送信時に、SalesIQが付けた訪問者IDを隠し項目 LDTuvid に書き込み、CRMのリードと紐付けます
  2. SalesIQのウィジェットを読み込む処理:document.createElement('script') でウィジェットのスクリプトを作り、ページに差し込みます

サイト全体にSalesIQの埋め込みコードを入れていない場合は、2の処理があることでフォームのページでもSalesIQが動きます。しかし、サイト共通の埋め込みコードがすでにある場合は、2の処理が2回目の読み込みになります。当社は、この重複が、チャットボタンの非表示設定が効かなかった原因と判断しました(コードを調べたうえでの当社の見立てです)。

Zohoのサポートに問い合わせた際も、読み込み処理を1つにまとめるよう案内がありました。ただし、二重読み込みと非表示設定の関係そのものを、Zoho側が説明したわけではありません。

やってはいけない直し方:「訪問者の追跡」をオフにする

最初に思いつくのは、CRMのWebフォーム設定で「訪問者の追跡」をオフにする方法です。オフにすれば VisitorTracking ブロックごと出力されなくなるので、重複は止まります。

ただし当社が2026年8月に、このサイトのメルマガ登録フォームで「訪問者の追跡」のオンとオフを切り替えてコードを比べたところ、オフの方では次の3つもまとめてなくなっていました。

失われたもの 影響
AJAX送信(fetch() を使ったページ遷移なしの送信) 送信後に別ページへ遷移する、旧来の送信方式に戻る
スパム対策の隠し項目(ハニーポット) 機械的な送信を見分ける仕組みがなくなる
ldeskuid / LDTuvid の隠し項目 チャットの訪問者とCRMのリードが紐付かなくなる

つまり「訪問者の追跡」のオン/オフは、チャットを出すか出さないかの設定ではなく、フォームの生成テンプレート自体を切り替えるスイッチとして働いていました。チャット対策としてオフにするのはやめてください。

直し方:ウィジェットを注入する8行だけを削除する

Webフォームの埋め込みコードのうち、チャットのウィジェットを読み込む部分だけを削除し、訪問者をリードに紐付ける処理は残す直し方を示した図

正しい直し方は、CRMから取得したフォームのコードを貼る前に、2の「ウィジェットを読み込む処理」だけを消すことです。

手順

  1. Zoho CRMの「設定」から「チャネル」→「Webフォーム」を開き、対象のフォームの埋め込みコードを取得します(メニュー名は当社が確認した2026年8月時点の表記です)
  2. コードの中から <script type='text/javascript' id='VisitorTracking'> のブロックを探します
  3. ブロックの中で、$zoho.salesiq = $zoho.salesiq || {...} の定義の直後にある、次の8行を削除します
var d = document;
s = d.createElement('script');
s.type = 'text/javascript';
s.id = 'zsiqscript';
s.defer = true;
s.src = '(SalesIQのウィジェットを読み込むURL)';
t = d.getElementsByTagName('script')[0];
t.parentNode.insertBefore(s, t);

実際のコードでは、6行目にZohoのウィジェット読み込み用のURLが入っています。目印は s.id = 'zsiqscript'; の行です。この行を含む、var d = document; から t.parentNode.insertBefore(s, t); までの8行が削除の対象です。

  1. 削除したコードを、サイトのフォーム設置箇所に貼り付けます

消してはいけない箇所

8行の前後には、残さないと動かなくなる処理が並んでいます。次の表の要素は削除しないでください。

要素 消すとどうなるか
$zoho.salesiq = $zoho.salesiq || {...} の定義 訪問者IDの取得が動かない
trackVisitor…() 関数 同上。しかも try/catch で囲まれているため、壊れてもエラーが画面に出ない
id='ldeskuid' / id='LDTuvid' の隠し項目 チャットの訪問者とCRMのリードが紐付かない
id='wf_anal' のスクリプト フォームの分析データが取れない
reCAPTCHAのブロックと関連の関数(有効にしている場合) reCAPTCHAが機能しない
流入元(UTMなど)を入れる非表示項目(設けている場合) 流入元の記録が切れる

trackVisitor…() の関数名の「…」には、フォームごとに異なる数字が入ります。消すのは8行だけで、ほかは1文字も触らない、と覚えておくと安全です。

差し替えファイルに、変更点を書き残す

当社では、修正済みのコードをファイルとして保管し、冒頭のコメントに次の4点を書いています。

  • 対象のページとフォーム
  • CRMが生成したコードから変えた箇所(この8行の削除だけ)
  • 削除してはいけない箇所
  • 反映後の確認方法

サイトの更新を制作会社に依頼している場合、このコメントがそのまま申し送りになります。HTMLのコメントなので、残したまま貼ってもフォームの動作には影響しません。依頼の際は「CRMから取り直したコードをそのまま貼らないでください」と必ず添えます。そのまま貼ると、8行の削除が元に戻ってしまうためです。

直ったかどうかはどう確かめるか

見た目でチャットが消えていても、それだけでは足りません。前述のとおり trackVisitor…() は失敗してもエラーを出さないので、紐付けが壊れていても画面では気づけません。次の3つを順に確かめます。

1. ウィジェットの読み込みが1回になっているか

対象ページを開き、ブラウザの開発者ツールのコンソールで次を実行します。

document.querySelectorAll('script[src*=zoho][src*=widget]').length
  • 1 なら正常です
  • 2以上 なら、8行の削除漏れがあります

2. チャットの表示とフォームの送信

  1. シークレットウィンドウで対象ページを開き、チャットが意図どおりの状態(このサイトでは非表示)になっていることを確認します
  2. テスト送信を行い、画面に完了メッセージが出ることを確認します。reCAPTCHAを有効にしている場合は、チェックせずに送信するとエラーになることも確かめます

3. CRMのリードの中身

テスト送信で作られたリードを開き、次を確認します。

  • LDTuvid に値が入っている(訪問者の紐付けが生きている)
  • 見込み客のデータ元などの項目が正しい値になっている
  • 流入元の項目を設けている場合は、値が入っている

確認が済んだら、テストで作ったリードは削除します。

なぜ一度で終わらないのか

この対処は、残念ながら自動化できません。理由は2つあります。

  • Zoho CRMのインライン埋め込みコードは、取得した時点のHTMLのコピーです。CRM側で設定を変えても、すでにサイトに貼ってあるコードは変わりません
  • 逆に、フォームの項目を変えたり、reCAPTCHAを有効にしたりしてコードを取り直すと、VisitorTracking ブロックは毎回同じ形で出力されます

このサイトでも、のちにスパム対策でreCAPTCHAを有効にした際、全フォームのコードを取り直しました。そのときも、すべてのフォームで8行の削除をやり直しています。

もう一つ注意があります。CRM側でフォームの設定を変えると、フォームの受付用の値(xnQsjsdp、xmIwtLD など)が新しくなります。サイトのコードが古いままだと、送信が受け付けられなくなるおそれがあります。とくにreCAPTCHAを有効にした場合、サイト側に入力欄がないまま送信されるため弾かれます。CRM側の設定変更とサイトへの反映は、間を空けずにセットで行ってください。

1ページに2つのフォームを置く場合の注意

資料請求ページなどで、CRMのフォームを1ページに2つ並べることがあります。当社が本番環境で確かめた範囲では、次のことが分かりました。

  • VisitorTracking ブロックはフォームごとに出力されるので、どちらのフォームのコードからも8行を削除します。片方だけ直すと、読み込みは重複したままです
  • 生成コードの送信ボタンを無効にする処理は、ページ内で最初に見つかったフォームのボタンをつかみます。2つ目のフォームから送ると、1つ目のフォームのボタンが無効になります。ただしreCAPTCHAの確認は1回限りなので、2つ目のフォームから二重に送っても2回目はZoho側で弾かれました。当社はこの部分には手を入れず、生成されたまま使う判断をしました。直すと、コードを取り直すたびに元に戻ってしまうためです
  • 要素のIDが2つのフォームで重複するため、2つ目のフォームのラベルを押すと1つ目の入力欄に移ります。使い勝手は少し落ちますが、送信されるデータには影響しませんでした

まとめ

SalesIQをサイト全体に入れているなら、CRMのWebフォームのコードに入っているウィジェットの読み込み処理は不要です。

  • 消すのは VisitorTracking ブロックの中の、ウィジェットを注入する8行だけ
  • 「訪問者の追跡」はオンのまま。オフにするとフォームの機能が減る
  • コードを取り直すたびに削除をやり直し、コンソールとCRMのリードの両方で確かめる

この3点を、フォームの運用手順に組み込んでおくことをおすすめします。

ZohoのフォームとCRMのつなぎ方は、ほかにもZoho Campaignsでメルマガ登録フォームを作成し自社サイトに表示させる方法や、Zoho FormsからCRM連携でサブフォームが消えたときの設計で紹介しています。Webフォームやチャットを含めたZoho CRMの設定を相談したい場合は、Zoho CRMカスタマイズ・設定代行サービスのページをご覧ください。

よくある質問

CRMの「訪問者の追跡」をオフにすれば、チャットの重複は止まりますか?

読み込みの重複は止まりますが、おすすめしません。当社が2026年8月に、メルマガ登録フォームで設定のオンとオフを切り替えてコードを比べたところ、オフにした方はフォームのコード自体が別物になり、ページ遷移なしの送信(AJAX送信)、スパム対策の隠し項目、訪問者IDをリードに紐付ける仕組みがまとめてなくなりました。このスイッチはチャットの表示切り替えではなく、フォームの生成テンプレートの切り替えと考えてください。

8行を消すと、チャットの訪問者とCRMのリードは紐付かなくなりませんか?

紐付きます。紐付けを担うのは `$zoho.salesiq` の定義と `trackVisitor…()` 関数、`LDTuvid` の隠し項目で、削除する8行には含まれません。ウィジェット本体はサイト共通の埋め込みコードが読み込むため、フォーム側に読み込み処理がなくても訪問者IDは取得できます。反映後にテスト送信し、リードの `LDTuvid` に値が入ることを必ず確かめてください。

一度直せば、次からは対応しなくてよいですか?

いいえ。CRMのインライン埋め込みコードは、取得した時点のHTMLをそのまま貼る方式です。項目の追加やreCAPTCHAの有効化などでコードを取り直すたびに、同じ8行が出力されます。フォームを貼り直すときは毎回削除が必要です。

直ったかどうかは、どう確かめればよいですか?

2段階で確かめます。まず対象ページでブラウザの開発者ツールのコンソールを開き、`document.querySelectorAll('script[src*=zoho][src*=widget]').length` を実行して1になることを確認します。次にシークレットウィンドウでテスト送信し、CRMのリードの `LDTuvid` に値が入っていることを確認します。

Zoho CRMのWebフォームとは何ですか?

Zoho CRMの設定画面で作れる入力フォームで、送信された内容を見込み客(リード)などのレコードとしてCRMに直接登録します。生成された埋め込みコードを自社サイトのHTMLに貼って使います。「訪問者の追跡」を有効にすると、SalesIQの訪問者IDをリードに紐付ける処理もコードに含まれます。