Verify and troubleshoot

A checklist for going live, and the six failures you are likely to hit.

Checklist

Work through this in a real browser on the real domain. Steps 2 and 3 catch the failures you would otherwise discover when a customer drops out halfway through the form.

  1. Open the page: the form appears within a couple of seconds.
  2. Click through every step: the frame grows and shrinks with the content, and there is no scrollbar inside the form.
  3. Open DevTools → Network → the /f/<slug> document: the response carries a content-security-policy header with frame-ancestors, and the host domain is in it.
  4. The console is free of warnings starting with [Kapture Signals].
  5. Switch to a mobile viewport (390×844, say) and repeat step 2 — the form is built mobile-first, and that is where the customers are.
  6. Submit a test enquiry and confirm with the contractor that it arrived. Note that it becomes a real lead, not a draft — put something obvious in the name field.

When it doesn't work

Always start in the browser console. The script writes its own warnings prefixed with [Kapture Signals], and the browser's own CSP errors sit right next to them.

Empty space where the form should be, and the console says "Refused to frame … an ancestor violates the Content Security Policy".

Cause: The host domain is not in the contractor's account.

Fix: Have the contractor add it under Opsætning → Dine hjemmesider and wait a minute. Check at the same time that you are testing on a domain on that list — a staging domain is not the same as the live one.

Nothing is inserted, and the console says "[Kapture Signals] mangler data-kapture-slug".

Cause: The attribute is missing, empty or has been stripped.

Fix: Check that the script tag still has data-kapture-slug after the CMS or tag manager has processed it. Some editors drop unknown attributes in WYSIWYG mode — paste the code in HTML mode or in a dedicated code block.

The console says "[Kapture Signals] fandt ikke data-kapture-target …" and the form is in an unexpected place.

Cause: The selector matches nothing — or the element is built after the script has run.

Fix: Fix the selector, or drop the attribute and put the script tag exactly where the form should appear.

The form appears twice.

Cause: The script tag is on the page twice, or a tag manager fires it on every page view on top of a copy in the theme.

Fix: Keep one script tag per page. From a tag manager, set the trigger to fire once per page view.

The form appears but stays at a fixed height, and the taller steps are cut off.

Cause: The height messages are not reaching the host page. Either the host domain is not in the contractor's account, or a fixed height is set on the iframe or its container in your own CSS.

Fix: Get the domain added, and remove height/max-height from .kapture-signals-embed and the iframe in your stylesheet.

The script is never fetched, or the iframe is blocked on a page that otherwise works.

Cause: The host site's own Content-Security-Policy blocks us.

Fix: Allow https://kapturesignals.com in both script-src and frame-src.

Handing this to an AI agent? Copy every page of the guide as JSON — same content, in a shape a model can work through.

Updated 2026-09-30 · kapturesignals.com