QA Ultimate Stack
Find tags blocked by a Content Security Policy
A CSP block stops a hit before it reaches the network, so most tools never show it. See which requests the site's policy blocked, which directive applied, and how to fix and test the policy.
Why CSP blocks are easy to miss
A Content Security Policy tells the browser which hosts a page may load scripts from and send data to. When a tag tries to send a hit to a host the policy doesn't allow, the browser refuses before the request ever reaches the network. There's no row in the Network tab to inspect, only a console line and a violation event. The hit simply disappears.
ODDVX listens for those violation events and turns each one into a failed request row, with the reason. The exact failure the inspector exists to find is never silently left out.
Four steps: the tag fires, the browser checks the policy, the request is refused with no network row, and only a violation event remains.
Read the CSP status of each request
Every request, failed or delivered, shows how the page's policies treat it:
- Enforced policy: whether it allows the request. If not, the request was blocked.
- Report-only policy: whether it would allow it. If not, the request went through but would be reported, which is a warning of a block to come.
- The directive that applied, usually connect-src for hits and script-src for tag libraries, and the policy text, which you can copy for the developers.
A CSP table showing an enforced connect-src policy blocking a request and a report-only policy that would report it.
Which directive blocks what
The directive tells you how much was lost:
- script-src controls which scripts may load. If it doesn't allow Google Tag Manager's host, gtm.js never loads and nothing fires: no GA4, no pixels, no Custom HTML. The page shows zero hits. Custom HTML tags that inject their own scripts need their hosts allowed here too.
- connect-src controls where scripts may send data. A gap here lets tags fire but makes their hits vanish. This is the classic server-side tagging block.
- img-src controls image requests. Some ad pixels, and fallback hits, are sent as images.
- frame-src controls iframes. Floodlight and some ad tags load in frames.
A policy without a specific directive falls back to default-src, so a strict default can block hits even when no connect-src line exists.
A grid of CSP directives and the tagging requests they govern: script-src, connect-src, img-src and frame-src.
Fix the policy, not the tag
The fix is to add the missing host to the right directive. The most common cause is a move to server-side tagging or first-party mode: hits that used to go to a Google host now go to a subdomain of the brand's own site, which the existing policy doesn't list. The tags are fine; the policy needs the new endpoint.
Before and after connect-src directives, with the server-side endpoint blocked before and allowed after.
Test a new policy safely
- Ship the new policy as report-only, so nothing is blocked.
- Inspect the key pages and look for "would be reported" rows.
- Fix the policy until there are none.
- Switch it to enforced and inspect again.
Four steps for rolling out a CSP change: report-only, inspect, fix, enforce.
ODDVX for Windows
From the page to the hit, proved.
Start free with one saved form, one page and one parity check. Premium adds batch runs, exports and scheduled QA.