Troubleshooting
Most install problems come down to a handful of causes, and almost all of them are settings rather than code. This page lists the issues you're most likely to hit and gives each one a short checklist to work through. Start at the top of the relevant section and stop as soon as something fixes it.
The box or widget doesn't show
If a floating box or classic box survey isn't appearing, check these in order:
- Is the survey active? A paused survey won't show. If you're testing on a phone, confirm it's also active on mobile — that's a separate toggle on Web integration.
- Is the page's domain allowed? The widget only displays on the allowed domains you've whitelisted. If the current domain isn't on the list, nothing shows.
- Is a cap suppressing it? A frequency or delay cap may be holding the survey back for this visitor or this session. Review the caps on Web integration.
- Is the script actually loading? Confirm the install snippet is in the page
<head>with the correct workspace ID, and check your browser's network tab for the integration script request.
Allowed domains is the usual culprit
If the script loads but nothing appears, the page's domain almost always isn't on the allowed list. Check that first before digging deeper.
The library is blocked by a Content Security Policy
If your website sets a Content Security Policy (CSP), the browser can block the e-satisfaction library from loading or running — even when your snippet is perfectly correct. The tell-tale sign is a CSP error in the browser console naming the directive that stopped a request.
Allow the e-satisfaction collection domains in the relevant directives of your policy:
script-src— allowhttps://collection.e-satisfaction.comso the library can load (andhttps://cdn.e-satisfaction.comtoo if you use the CX Badge).connect-src— allowhttps://collection.e-satisfaction.comso the library can send and receive survey data.img-srcandstyle-src— allow the same domains so the survey renders with its images and styling (a strict policy may also need to permit inline styles).frame-src— allowhttps://collection.e-satisfaction.comif your survey is shown inside a frame.
Let the console guide you
A CSP block always reports exactly which directive stopped the request. Add the e-satisfaction domain to that directive, reload, and check the console again — repeat until the errors clear.
It shows on one domain but not another
The widget only appears on the exact hosts in your allowed domains list, and the most common trap is the www variant. If your site answers on both example.com and www.example.com, a widget allowed only for example.com won't show on www.example.com — and the other way around.
- Add every variant visitors actually use — list both
example.comandwww.example.comif both resolve to your site. - Mind subdomains.
shop.example.comis a different host fromexample.com; add each subdomain that should run the widget. - Don't forget staging and preview domains. A widget that works in production can be silently blocked on a preview or
*.myshopify.com-style URL that isn't on the list.
Match what the address bar shows
Whatever host appears in the browser's address bar when the survey should show is the host that must be on your allowed-domains list — copy it exactly, www and all.
Something between the browser and e-satisfaction is blocking it
Sometimes the library never gets the chance to load, because something in the visitor's environment blocks it:
- Ad blockers and privacy extensions — uBlock Origin, Brave Shields and similar tools can block the script or its requests, so those visitors never see the survey.
- Browser tracking protection — Safari's Intelligent Tracking Prevention and Firefox's Enhanced Tracking Protection can do the same.
- Corporate networks — a company firewall, proxy or web filter may block
collection.e-satisfaction.com, so the survey won't load on that network.
This is usually the visitor's environment rather than your installation. To confirm, test in a clean browser profile with no extensions, and on a different network. For corporate environments, ask IT to allow collection.e-satisfaction.com.
It's gated behind your cookie-consent banner
If you load e-satisfaction through a consent manager (such as OneTrust or Cookiebot) or a Google Tag Manager consent category, the library won't run until the visitor accepts the category it's assigned to.
- Place e-satisfaction in the right consent category and make sure it loads after consent is granted.
- If you installed through Google Tag Manager, also confirm the tag's trigger actually fired and that you published the container.
The widget loads but you can't see it
If the script loads cleanly but the survey still isn't visible, it may be rendering somewhere you can't see it:
- Hidden behind another element — a sticky header, a cookie banner, or another floating widget (like a live-chat bubble) sitting on top of it.
- A z-index or CSS conflict on your site is covering it.
- Off-screen or mis-positioned — adjust the position, or for an embed, the target selector.
Mind your other floating widgets
If you run a live-chat or support bubble in the same corner, give the two different positions so they don't overlap or hide each other.
The snippet is installed more than once
Duplicate widgets, flickering, or odd behaviour usually mean the snippet is on the page twice — for example pasted into your theme and added through Google Tag Manager, or duplicated across templates. Keep exactly one installation per page, with a single workspace ID.
Another error on the page stops it from running
A JavaScript error elsewhere on the page can halt execution before the library finishes loading.
- Open the browser console and resolve any errors that fire before the integration script.
- If you push context with
updateMetadata, call it after the library has loaded — calling it too early can quietly do nothing.
It doesn't appear in automated tests
Testing tools — Lighthouse, Playwright, headless Chrome — and bot filtering may not render the widget, so "it's broken in my test" is often a false alarm. Confirm in a real browser before assuming the install is wrong.
An embedded survey doesn't show
An embed survey renders into a CSS selector you set on Web integration. For it to appear:
- The target element must exist on the page when collection loads. If the selector you configured doesn't match anything at load time — because it's rendered later, or the selector is wrong — there's nowhere for the survey to render.
- Double-check the selector matches exactly what's on the page, including casing and any prefix like
#or..
Render order matters for embeds
If your store or app builds the target element dynamically, make sure it's in the DOM before collection runs — otherwise the embed has no anchor to attach to.
Metadata isn't tracked
If responses are coming in but the context you pushed isn't attached:
- Define the fields first. The field has to exist in the dashboard (Admin → Data & AI) before you push it. Names that aren't defined are dropped.
- Match names exactly. The names you push must match the defined names character-for-character.
- Push in time. Call
updateMetadatabefore or while the survey is shown — not after the respondent has finished. - Mind the questionnaire ID. It's case-sensitive — copy it exactly from the dashboard;
Abc123andabc123are different surveys.
A follow-up message or sequence doesn't fire
If an on-site survey works but an email, SMS, or Viber follow-up never goes out:
- Is it active? Confirm the pipeline or sequence is switched on.
- Do the conditions match? Check the routing rules and conditions actually match the recipients you expect — a condition on metadata that isn't being pushed will quietly exclude everyone.
- Is there a valid contact? Each recipient needs a valid contact identifier for the channel — an email address for email, a phone number for SMS or Viber. Recipients without one can't be reached.
Trace it backwards
When a follow-up doesn't fire, work from the recipient outward: confirm the recipient has a valid contact, then that the conditions include them, then that the pipeline or sequence is active.
Related articles
Web integration
Active state, allowed domains, caps, and the embed selector all live here.
Pushing metadata
Field definitions, name matching, timing, and case-sensitivity.
Messaging pipelines
Check that follow-up routing rules and conditions match your recipients.
Follow-up sequences
Confirm a sequence is active and its steps are configured to send.