Google Tag Manager Is Not a Skill. It Never Was. - Tag Companion Blog
Google Tag Manager Is Not a Skill. It Never Was.
June 6, 2026
Admin
Last Tuesday, a developer pushed a CSS update.<br>A class name changed from btn-submit to btn-primary. A routine refactor. Took the developer eleven minutes.<br>By Thursday, a company had lost four days of conversion data. The Meta pixel was dark. The Google Ads tag was firing on page load instead of on submission. The ad platform was making bidding decisions based on nothing.<br>Nobody noticed until Friday, when the ROAS tanked. And even then, the first assumption was creative fatigue. Then seasonality. Then audience saturation. The GTM container was the last place anyone looked.<br>That is the real GTM problem. Not that it is hard to learn. Not that the interface is unintuitive. The problem is that it is structurally fragile, and the fragility is silent. No error. No alert. No warning in your GTM dashboard. The tracking simply stops, and your ad platform starts flying blind while you troubleshoot assumptions.<br>That fragility was never inevitable. It was a design consequence nobody planned for.
How We Got Here<br>Google Tag Manager launched in 2012. The premise was genuinely revolutionary: give marketers a way to deploy tracking code without waiting for developers. No more tickets. No more sprint cycles. No more begging engineering to add a pixel to the checkout confirmation page.<br>For about three years, it worked exactly as intended. You dropped a container snippet on the site, you configured your tags through a UI, and tracking was in your hands.<br>Then the use cases got complicated.<br>The eCommerce events got complicated. The DataLayer got complicated. Custom event tracking required understanding JavaScript. Ajax forms required intercepting network requests. Element visibility triggers required knowing enough about DOM structure to write a CSS selector that would survive the next frontend deploy.<br>Marketers needed to become semi-developers to use a tool that was supposed to free them from developers.<br>A consulting ecosystem formed around that gap. Agencies built GTM practices. Freelancers built entire careers on tag management. Certification programs emerged. The complexity that was supposed to disappear became, instead, a credential.<br>None of this was malicious. The complexity was real. The expertise was real. The consultants who built those careers understood something genuine: clean conversion data is the foundation that ad performance is built on, and getting that data right requires knowing what you are doing.<br>But somewhere along the way, the complexity became the point. Mastering GTM became the goal, rather than getting the data.<br>Those are not the same thing.
The Selector Problem Is Not a Bug<br>Back to that developer. Back to btn-submit becoming btn-primary.<br>When a GTM consultant sets up a click tracking trigger, they typically open Chrome DevTools, right-click the element, copy the selector, paste it into GTM. The selector DevTools gives you looks something like this:<br>body > main > section.hero > div.form-wrapper > button.btn-submit<br>That selector is a structural address. It says: go to the body, find the main element, find the first section with class hero, find the div with class form-wrapper, find the button with class btn-submit.<br>It works perfectly until something changes. Add a wrapper div. Run an A/B test that restructures the hero section. Let the CMS update a template. Push a CSS refactor that renames btn-submit to btn-primary.<br>Any of those changes breaks the selector. The trigger stops firing. No warning.<br>This is not a bug in GTM. GTM is doing exactly what you told it to do: look for an element at that structural address. When the address no longer exists, there is nothing to find.<br>The problem is that DevTools generates the weakest possible version of the selector by default. It copies the full structural path because that is what DevTools is designed to do. It does not ask whether a more stable anchor exists on that element. It copies the path it sees.
A selector built on a stable identifier survives this. An ID, a class name that is not tied to visual styling and unlikely to change, a data attribute like data-testid placed intentionally by a developer. Any of those outlasts a layout change. A positional path does not.
The issue is not that marketers choose fragile selectors. It is that the default tool, DevTools, does not distinguish between fragile and stable. It outputs what it sees. The fragility is built into the workflow.<br>This is the GTM problem in its most concrete form: the standard workflow for setting up tracking produces tracking that is designed to break.
The DataLayer Was Supposed to Fix This<br>The DataLayer is a JavaScript array, window.dataLayer, that sits on your site and acts as a communication channel between the website and GTM. When something happens on the site, a developer pushes an event to the DataLayer. GTM listens, catches the push, fires the...