What we check
In the HTML: the scan looks for the loader paths of five tag management systems: Google Tag Manager (gtm.js or a GTM-… container ID), Cloudflare Zaraz, Adobe Launch, Tealium iQ and Segment. A match means "ok" with the name. No match is a note, never critical, because hardcoded tags measure too. Starting the scan as "server-side / custom" replaces the note with a remark that the tag manager probably runs server-side.
What the scan cannot see: containers loading through an own subdomain and a renamed path without the container ID in the source. And it does not look inside the container. Whether there are tags in it at all, whether they are published and what they hang on is left to the deep scan and Tag Assistant.
Why it matters
A tag manager is where tracking changes happen without a deployment, and where consent gets bound to every single tag. Hardcoded pixels have neither. Since the VG Hannover ruling, however, even fetching gtm.js needs consent; the container therefore belongs behind the CMP itself, and its triggers have to know the decision. What data the container receives is governed by the dataLayer, see the primer What is a dataLayer.
Common causes
- All pixels are hardcoded individually, grown historically across several agencies.
- A tag manager exists but loads from a first-party subdomain and is not recognisable as one in the HTML, then the finding is a false positive.
- The CMS plugin manages the tags, without versioning and without permission separation.
- The container was installed for a test and never published, the snippet points to an empty workspace.