Skip to content
Website widget6 min read

The widget is not showing

Five gates in order — plan, activation, the snippet, allowed domains, the browser — before you touch your theme.

Browse topics

What it is

A missing chat bubble is almost never a CSS problem. It is nearly always one of a small number of gates, and they fail in a predictable order. Work down this list rather than rewriting your theme.

The gates, in the order they are checked:

  1. Plan — Free workspaces cannot use the widget at all.
  2. Activation — a draft or paused chatbot refuses to serve it.
  3. The snippet — present on the published page, with its attributes intact.
  4. Allowed domains — the page's host must be on the list.
  5. The browser — blockers, caching, and mixed content.

Most reports are gate 3 (the snippet is in an unpublished draft) or gate 4 (the live host was never added).

When you would use it

The launcher is missing, the chat never opens, or the browser console shows a blocked request from your site.

Where to find it

Open Dashboard → Chatbots → your chatbot → Integrations → Web widget.

Step 1 — Is the chatbot active?

Open Playground. The badge must read Active, not draft or inactive. A chatbot that has never been activated will not serve the widget anywhere, no matter how perfect your snippet is.

Fix: activate it from the note on the Playground tab or from Settings → Danger zone. See Activate or pause a chatbot.

Step 2 — Does your plan include the widget?

Open Integrations → Web widget. If you see an upgrade wall instead of a snippet, you are on Free. The widget, iframe embed, plugins, and messaging channels all need a paid plan.

Fix: upgrade, or use the hosted link, which works on every plan — Integrations → Messaging → Direct link. See Integrations and plans.

Step 3 — Is the snippet actually on the live page?

This is the one people are most confident about and most often wrong about.

  1. Open your live site — the real address a visitor uses, not a preview URL.
  2. View the page source (not the inspector's rendered DOM, which can hide the difference).
  3. Search for chatbot-widget.

If it is not there: you saved the snippet into a draft, a different template, or a page type your visitors never reach. Republish.

If it is there, check it is intact:

  • data-widget-token present, with a real value.
  • data-api-base-url present.
  • The tag not mangled by your CMS — some editors strip attributes or escape the tag into plain text.
  • The snippet appearing exactly once. Twice gives you two bubbles.

Recopy from Integrations → Web widget if anything looks off. See Embed the website widget.

Step 4 — Is your host on the allowed-domains list?

The single most common production failure. In production the widget is blocked on any host that is not listed, and an empty list blocks it everywhere — an empty list means "not configured", not "allow everyone".

Compare the address bar on the failing page with the list, character by character:

  • Is it www.example.com while you only listed example.com? Different hosts. Add both.
  • Is it a subdomain like shop.example.com? Add it, or use *.example.com.
  • Is it a staging or preview domain? Add it too.
  • Did you paste a full URL with https:// or a path? Save the bare hostname instead.

Fix and save, then hard-refresh. See Allow the widget on your domains.

Step 5 — Is it the browser?

If gates 1–4 all pass:

  • Try a private window with extensions disabled. Content and ad blockers sometimes hide chat launchers by heuristic.
  • Hard-refresh. Your CDN or the browser may be serving a cached copy of the page from before you pasted the snippet.
  • Check your site is served over HTTPS. A secure script on an insecure page is blocked as mixed content.
  • Look at the browser console for a blocked request or a content-security-policy error. A strict CSP on your site can refuse to load third-party scripts — you would need to allow the widget's origin.
  • Try a second device. A single stubborn browser profile is a different problem from a broken embed.

Step 6 — Prove the chatbot itself works

Open Test Chatbot from the chatbot header and send a message. If it answers, the chatbot is fine and the problem is purely in the delivery path — keep working the gates above.

Note that Test Chatbot proves nothing about the widget: it is the owner's private door and uses no widget token, no allowlist, and no plan gate. A working Test Chatbot with a broken widget is completely normal. See Try Test Chatbot.

Telling the failures apart

Different symptoms mean different causes. Do not treat them as one problem:

SymptomCause
No bubble at all on your sitePlan, activation, snippet, or allowed domains — this page
Bubble appears, chat says "not ready yet"Untrained. See Untrained mode
Bubble appears, chat stopped answeringOut of credits. See Out of credits
Hosted link shows a not-found pageActivation or a stale handle. See Hosted page 404
Two bubblesThe snippet is on the page twice
Bubble in the wrong placeConfigurator. See Change the widget look and position

What you will see

The Playground tab shows Active or a draft note. The Web widget tab shows either a live snippet with usage statistics or an upgrade wall. The allowed-domains box warns you when the list is empty.

Limits and plan notes

The widget needs a paid plan with integrations and an active chatbot. In production the allowlist is required.

Widget requests are also rate-limited per minute and per day, with the current limits shown on the Web widget tab. A visitor who trips the limit is asked to retry shortly — that shows as a message inside a working chat, never as a missing bubble.

Messaging channels showing as unavailable or coming soon are unrelated to the website widget; they are a different tab.

Common problems

The script is on the page and still nothing happens.

Allowed domains in production, nine times out of ten. Add the exact host visitors use, including www, save, and hard-refresh.

It works in Test Chatbot but not on the site.

Expected — Test Chatbot bypasses every gate the widget has to pass. Fix the live script attributes and the allowlist.

It worked yesterday.

Ask what changed: a site deploy that dropped the snippet, a new domain, a plan downgrade, or exhausted credits. Check the credits meter in the sidebar first, since it is the fastest to rule out.

It works for me but not for a colleague.

An extension or a cached page on their side. Have them try a private window on another device.

The bubble flashes and disappears.

Usually two instances fighting, or a single-page app re-initialising on navigation. Remove the duplicate snippet, and tear instances down on route changes in an SPA.

Common questions

It works in Test Chatbot but not on my site.

Expected. Test Chatbot is the owner's private door and bypasses the plan gate, the widget token, and the allowlist. Fix the live script attributes and the allowed domains.

The script is on the page and still nothing happens.

Allowed domains in production, nine times out of ten. Add the exact hostname visitors use, including www, save, and hard-refresh.

Will a content blocker hide the widget?

Sometimes. Test in a private window with extensions disabled — but only after you have confirmed the plan, activation, snippet, and allowlist.

It worked yesterday and stopped today.

Ask what changed: a site deploy that dropped the snippet, a new domain, a plan downgrade, or exhausted message credits. Check the credits meter first.

Does a messaging channel showing as unavailable break the widget?

No. Messaging apps are a different tab entirely and have no bearing on the website bubble.

Was this article helpful?

Ready to try it on your own content?

Create a free workspace, add a document, and ask the questions your team is tired of answering.