0Health Score
Sample report · fictional data Full report, fully unlocked

This is the report you get.

A complete assessment of alpenglow-outdoor.com — Web (GTM-DEMO123) — a fictional outdoor store with a container that looks a lot like most real ones. Everything below works exactly like your own report.

3 Critical7 Warnings5 Suggestions

Tangible impact

Container weight

41 KB

of removable weight

118 KB total container payload

Measured
19 KB inline code
Estimated
72 KB vendor libraries

Inline code measured directly from the container export; vendor library sizes estimated from published bundle sizes. Sample data for a fictional store.

Tracking integrity

  • Duplicate conversion tags

    GA4 – Purchase, GA4 – Purchase (copy)

  • Conversion tags with no trigger

    Ads – Newsletter Signup

  • Conversion tags firing on all pages

    Ads – Purchase Conversion

These three patterns — duplicated, dead, and over-firing conversion tags — cause most of the reporting distortion found in real containers, and none of them produce a visible error anywhere.

Site type detected from the container itself: E-commerce — in your report you confirm or change this in one tap.

Segment coverage · separate from your health score

Get more from your e-commerce tracking.

Detected from the container’s own signals — purchase events, product data layer pushes, and ads conversion tags. In your report you can confirm or change this in one tap.

6 of 9 core e-commerce events tracked

Coverage 67%

Plus 2 of 6 recommended events.

Track add_payment_info and add_shipping_info

Recommended
Why it matters
Checkout is currently a black box between begin_checkout and purchase. Without these two events you can see that buyers drop out, but not at which step — which is exactly the information that makes checkout fixes cheap.
How to add it
Push both events from the checkout steps and add matching GA4 event tags. Your data layer already carries the item payload, so the tags are small additions.

Add view_cart

Recommended
Why it matters
Cart views are the strongest abandonment signal you’re not capturing — the audience of people who almost bought is invisible to both reporting and remarketing.
How to add it
Fire view_cart when the cart page or drawer opens, reusing the items array your add_to_cart push already builds.

Capture on-site search

Optional
Why it matters
Search terms are free demand research: they show what visitors want in their own words, and which searches return nothing.
How to add it
Push a search event with the query term on results pages and add a GA4 event tag for it.

Critical

3 findings

Conversion tracking

Duplicate GA4 purchase tags double-count every order

Critical
Why it matters
Two tags — “GA4 – Purchase” and “GA4 – Purchase (copy)” — fire on the same transaction trigger. Every order is recorded twice, so revenue and conversion counts in GA4 (and anything imported into Google Ads) are roughly doubled. Smart Bidding then optimises toward phantom revenue, and reported ROAS is fiction.
How to fix it
Keep one purchase tag and delete “GA4 – Purchase (copy)”. Run a test order in Preview mode and confirm exactly one purchase event fires. Then annotate the affected date range in your reporting so nobody trusts the doubled numbers retroactively.

Consent & privacy

Advertising tags fire before consent is given

Critical
Why it matters
The Google Ads and Meta tags carry no consent checks and fire on page load, before the banner is answered. In the EEA that is a GDPR exposure, and since Google began enforcing Consent Mode v2 for EEA traffic, unconsented ad signals degrade or stop working — you lose remarketing audiences and conversion modelling either way.
How to fix it
Enable GTM’s consent overview, require ad_storage for all advertising tags, and fire your consent platform from a Consent Initialization trigger so it always wins the race against tags. Verify in Preview that ad tags hold until consent is granted.

Conversion tracking

Google Ads conversion fires on every page

Critical
Why it matters
“Ads – Purchase Conversion” is attached to the All Pages trigger. Every pageview registers as a purchase conversion, so the conversion column in Google Ads is meaningless and any automated bidding trained on it is optimising for traffic, not sales.
How to fix it
Re-attach the tag to the order-confirmation trigger only, and add a page-path condition as a safety net. Then check the damage window in Google Ads and exclude or annotate it before trusting performance comparisons.

None of these three produce a visible error — they only show up in an audit. Most containers we see carry at least one of them.

Check yours — free

Warning

7 findings

Conversion tracking

Newsletter-signup conversion has no trigger

Warning
Why it matters
“Ads – Newsletter Signup” exists but is attached to nothing, so it has never fired. Signups are silently invisible to your campaigns — the kind of failure nobody notices because nothing errors; the number is just quietly zero.
How to fix it
Attach the tag to the signup-success event and confirm it fires once per signup in Preview mode.

Legacy cleanup

3 Universal Analytics tags still fire to a sunset property

Warning
Why it matters
UA stopped processing data in 2023–24. These tags add payload and execution time on every page and send data nowhere.
How to fix it
Pause the three UA tags now, delete them after one release cycle once nothing depends on them.

Maintainability

GA4 Measurement ID hardcoded in 7 tags

Warning
Why it matters
The same ID is typed by hand in seven places. One typo — or one property migration — and part of your data silently lands in the wrong property.
How to fix it
Create a single constant variable for the Measurement ID and reference it from every GA4 tag.

Performance

Custom HTML tag loads jQuery on every page

Warning
Why it matters
A ~31 KB library is loaded site-wide to power one scroll listener. That’s pure page-speed cost for functionality achievable in a few lines of plain JavaScript.
How to fix it
Rewrite the listener in vanilla JS inside the same tag and drop the jQuery import.

Consent & privacy

Consent banner loads as an ordinary pageview tag

Warning
Why it matters
Your consent platform fires on the standard All Pages trigger, so it races the tags it is supposed to gate. On fast connections it usually wins; on slow ones, tags can fire before the banner exists.
How to fix it
Move the consent platform tag to GTM’s dedicated Consent Initialization trigger, which is guaranteed to run first.

Container hygiene

11 triggers are attached to nothing

Warning
Why it matters
Orphaned triggers make every audit slower and invite mistakes — the next person may attach a tag to a stale trigger that looks right but isn’t.
How to fix it
Delete the 11 unused triggers in a new workspace, then check Preview mode before publishing. The report lists each one by name.

Change management

14 versions published without version notes

Warning
Why it matters
When tracking breaks, version notes are how you find which change did it. Without them, rollback is guesswork under pressure.
How to fix it
Adopt a one-line note per publish: what changed and why. It costs ten seconds and pays off on the worst day.

Suggestion

5 findings

Organization

63 items in a flat list — no folders

Suggestion
Why it matters
Everything lives at the top level, so related tags, triggers, and variables can’t be scanned as groups.
How to fix it
Create folders per platform (GA4, Ads, Meta, Utilities) and file items as you touch them — no big-bang cleanup needed.

Container hygiene

5 paused tags are over a year old

Suggestion
Why it matters
Long-paused tags are almost never revived; they just add weight to the export and noise to every audit.
How to fix it
Delete them. The container version history keeps them recoverable if you’re ever wrong.

Naming

Three naming conventions in one container

Suggestion
Why it matters
“GA4 – Purchase”, “ga4_add_to_cart”, and “New Tag 3” coexist. Inconsistent names slow every future change and hide duplicates — it’s partly how the duplicate purchase tag survived.
How to fix it
Pick one convention (e.g. Platform – Event) and rename as you touch items.

Maintainability

3 custom JavaScript variables duplicate built-ins

Suggestion
Why it matters
Custom click-handling variables re-implement what GTM’s built-in Click variables already provide, adding code to maintain for no benefit.
How to fix it
Enable the built-in Click variables and swap the references, then delete the custom ones.

Reliability

Transaction values have no data layer fallback

Suggestion
Why it matters
If the site ever pushes an undefined value, the purchase event fires with no revenue — a gap you’d only find weeks later in reports.
How to fix it
Add a default value guard in the value variable so malformed pushes are caught and visibly zeroed, not silently dropped.

Now run it on the container that matters.

Free preview

Your health score, finding counts, and impact summary — in your browser, in under a minute. Your container file never leaves your device.

Full Report

Every finding with its fix, in priority order, plus tracking coverage for your site type — exactly like the report you just read.