Crescentek

Tag Manager Setup

Google Tag Manager, done once, done well.

Container architecture, data layer design, tag naming conventions, consent-aware triggers, workspace versioning, and the governance that keeps GTM from turning into a hairball of 70 abandoned tags three years later.

Tag Manager · GTM-XY4Z9PQv12 · published
Preview
Tags · 7
GA4 Config
Google Analytics 4
All Pages
GA4 · purchase
GA4 Event
dataLayer purchase
Meta Pixel · base
Custom HTML
All Pages · Consent
Meta · AddToCart
Custom HTML
add_to_cart
Google Ads · Conversion
Ads Conversion
purchase
TikTok Pixel
Custom HTML
All Pages · Consent
LinkedIn Insight
Custom HTML
All Pages · B2B paths
Debug · Preview Mode
Event: add_to_cart · 6 tags sequenced
Version history
v12
v11
v10
v9
v8
The four building blocks of GTM

Tags, Triggers, Variables, Data Layer.

Tags
What fires — GA4 events, Meta Pixel, Google Ads conversions, LinkedIn Insight, custom HTML scripts. We keep them atomic, one purpose each.
Triggers
When they fire — page views, clicks, form submits, custom events from the data layer. Consent-aware so nothing fires before consent granted.
Variables
What data they use — page path, item ID, user ID, cart value. Properly-named built-in + user-defined variables prevent copy-paste chaos.
Data Layer
The source of truth — a JavaScript object holding all dynamic values. Tags read from it, not from the DOM. Cleanest, most reliable pattern.
Governance that scales

Naming conventions = future-proofing.

After 6 months a typical GTM container has 30+ tags. Without naming discipline, it becomes unmanageable. Here's the pattern we use and document with every client.

✓ Tags
[Platform] · [Event type] · [Optional qualifier]
Examples: GA4 · purchase · ecom · Meta · Lead · B2B form · Ads · Conversion · phone_call
✓ Triggers
[Type] — [What it matches]
Examples: Custom Event — purchase · Click — cta_primary · Form Submit — newsletter
✓ Variables
DLV — [dataLayer.key] (for data layer vars), JS — [purpose], CJS — [purpose]
Examples: DLV — ecommerce.items · JS — hashed_email · CJS — scroll_depth
✕ What we remove
Tags named "test", "new tag", "GA". Triggers named "Page View" (ambiguous — is it All Pages?). Variables with no prefix.
Our GTM approach

We don't build throwaway containers.

What we avoid
✕ Scraping the DOM for values a data layer should expose
✕ CSS-selector triggers that break on next design iteration
✕ One tag per campaign instead of reusable variable-driven tags
✕ Copying tags to modify them vs. using lookup tables
✕ Publishing without QA via Preview Mode
✕ No documentation of what each tag does or why
What we do instead
✓ Data layer-first — push from app code, not scrape
✓ Custom events in data layer, not selector matching
✓ Variables + lookup tables for campaign-level mapping
✓ One tag per channel, parameterised by variables
✓ Preview Mode QA on every change, real browser validation
✓ Notion documentation keyed to each tag + trigger
Monthly governance

What we do on an ongoing GTM retainer.

Health audit
Container monitored for orphan tags, broken triggers, consent issues. Monthly report shows fire volume trends.
Change log
Every workspace change documented. When + what + why. Reverse-engineering prevented via discipline.
Version hygiene
Old versions pruned. Meaningful version names ('v14 — CAPI deployed'). Workspace merges clean before publish.
New tag requests
Marketing asks for new tracking → we scope, build, QA, document, publish. Typical turnaround 2–4 days.
Frequently asked

Tag Manager questions.

Yes, often. We usually start with a full audit — inventory tags, categorise them, flag orphans, identify duplicates, document what each does. From there we either clean in place or build a parallel container to migrate into. Parallel is safer for large containers.
A well-configured GTM adds 30–80ms to page load. A badly-configured one (50+ tags, blocking scripts, no consent gating) can add 600ms+. We audit for performance as part of setup — non-essential tags deferred, async where possible, bundle optimised.
For most marketing tags (GA4, Meta, Google Ads, LinkedIn, TikTok) — yes, entirely. Devs never touch analytics again. For pages where server-side rendering matters (e.g. real-time consent), or for server-side tagging, there's still a dev touchpoint but minimal.
Client-side GTM runs in the browser (standard setup). Server-side GTM runs on your infrastructure (typically Google Cloud Run) and proxies events to destinations server-to-server. More expensive (€30–€80/mo infra), more complex, but recovers ~30% of signal lost to iOS/ad blockers. Worth it above €5k/month ad spend.

Get a free GTM audit.

Share container access and we'll return a tag inventory, orphan detection, performance audit, and the top 10 cleanups to run. Free, no commitment.