Troubleshooting
The chat bubble not showing up is almost always one of the five causes below. Work through them in order — each has a 30-second check.
1. AI model not configured (most common)
The widget stays intentionally hidden until an AI model passes the connectivity test for your account.
Check: Dashboard → AI Model — is there a saved configuration with a green "verified" status?
Fix: Choose a provider (OpenAI-compatible / Anthropic Claude / Google Gemini), enter your API key, and save. The widget appears within about 1 minute after the test passes. See Embed Code for details.
2. Content Security Policy blocking the script
If your site sends a Content-Security-Policy header, the browser may silently refuse to load the widget.
Check: Open DevTools → Console. CSP violations look like:
Refused to load the script 'https://widget.webnav.ai/widget/chat-widget.js'
because it violates the following Content Security Policy directive: "script-src ..."Fix: Add the widget domain to script-src and connect-src (that's all it needs — see CSP details):
script-src 'self' https://widget.webnav.ai;
connect-src 'self' https://widget.webnav.ai;3. Ad blockers / privacy extensions
Some blockers match on chat-widget URL patterns.
Check: Open your site in a private window with all extensions disabled. Bubble appears? An extension is the culprit.
Fix for your visitors: nothing to do — blockers are a per-visitor choice; the widget fails silently and never breaks the host page.
4. Script tag not actually on the page
Check: DevTools → Network → filter chat-widget. You should see chat-widget.js with status 200.
- No request at all → the
<script>tag isn't in the served HTML (check your template/deploy), or a tag manager strips it. - Status 4xx/5xx → note the response; a 403 usually means the domain isn't whitelisted for your account.
5. Domain not whitelisted
The widget only serves conversations for domains registered to your account.
Check: Dashboard → Domains — does the exact domain (including subdomain) of the page appear there?
Fix: Add the domain, or set data-base-url to a registered domain. See Widget Attributes.
Still stuck?
Grab the following and contact us via the widget on webnav.ai or the dashboard:
- The page URL where the widget should appear
- A screenshot of DevTools Console errors
- A screenshot of the Network entry for
chat-widget.js
Good to know
data-excludeonly controls crawling (what the AI learns) — it does not hide the bubble on those routes. To hide the bubble on specific pages of an SPA, load the script conditionally in your router logic.- The widget renders inside Shadow DOM and never inherits or leaks styles; visual glitches are usually the host page's global CSS using
!importanton universal selectors.