An Tran Solutions
An Tran Solutions
Back to Blog

A Tag That Fires Is Not Data You Can Trust: 7 GA4 and GTM Mistakes Almost Every Site Makes

October 2, 20269 min readby An Tran
On this page

There's a sentence I've heard so often I could recite it: "We've got Google Analytics installed, so our data is complete."

Ask "how do you know it's complete?" and the answer is almost always the same: "I opened Realtime and saw people on the site."

Let me be blunt: numbers in Realtime prove exactly one thing, that a piece of code is sending data somewhere. They don't prove the data is correct. They don't prove each order is counted once. They don't prove that a visitor who came from your ads is still recorded as coming from your ads.

And here is the harder part: a broken GA4 setup is more dangerous than no GA4 at all. With no data, you know you're flying blind and you act carefully. With wrong data, you make confident decisions: you cut the channel that's actually bringing in revenue and pour money into the one that only looks efficient.

The numbers: most GA4 setups have errors

SR Analytics, an analytics audit firm, reports that after reviewing more than 200 GA4 implementations, over 81% contained implementation errors that compromise data accuracy. 73% were missing important event tracking, 71% had missing or misconfigured conversions, and 68% had broken cross-domain tracking (SR Analytics, Oct 2025).

I need to be honest about that figure: it comes from the client base of a company that sells audits, the methodology isn't published, and people who hire an auditor usually already suspect something is wrong. Don't read 81% as a market-wide rate.

There's a harder number to argue with: compare orders in your commerce system with purchase events in GA4. Clickport audited 75 live WooCommerce stores (May 2026) and found that a 15–25% gap is typical for US stores, while EU stores often lose 40–60% (Clickport, 2026). Part of that gap isn't a setup bug at all, it's the ceiling of browser-based measurement. eyeo estimates that 1.1 billion people, 30% of the global internet population, used an ad blocker as of Q4 2025 (eyeo 2026 Ad-blocking Report).

In short: GA4 will never match your real revenue 100%. The question isn't "is there a gap?" but "how big, why, and how much of it did we cause by setting it up wrong?" That last part is entirely fixable.

Here are the 7 mistakes I run into most, ordered by how badly they distort business decisions.

Mistake 1: Installed twice, so everything counts double

Symptom: pageviews and conversions look unusually high; bounce rate looks suspiciously low.

Cause: the site has gtag.js pasted into the theme (or injected by a plugin) and a Google tag in Google Tag Manager, both using the same Measurement ID. Every page load fires twice. Another variant: the same GTM container is injected twice, once by the theme and once by a plugin.

Nothing turns red. Nothing throws an error. Everything "works". The numbers are just wrong (Analytics Mania).

How to check: open the site, press F12 → Network, filter for collect, and reload. Each page load should produce exactly one page_view request. If you see two, you've just found the reason for last month's "traffic surge".

There's a variant specific to app-style sites (React, Vue, Next.js): GA4 can count a pageview whenever the URL changes, and GTM's "History Change" trigger does the same thing. Turn on both and every route change becomes two pageviews. Google's documentation is explicit: if GTM owns pageviews, turn off the automatic option in GA4 (Google Developers).

Mistake 2: Counting clicks on "Submit" instead of real leads

Symptom: GA4 reports 50 leads; the sales team received 30 forms.

This is the mistake I see on contact forms more than anywhere else. The fastest setup is to track "click on the Submit button". But a click is not a lead. A visitor clicks Submit with the phone field empty, the form shows an error, and GA4 still records a lead. A visitor double-clicks on a slow connection: two leads.

The opposite failure is just as bad: the form submits via AJAX (no page reload), GTM's default "Form Submission" trigger never sees it, and GA4 shows zero leads while your inbox fills up.

The rule: record a lead only after your server confirms it received the form, and use Google's standard event name, generate_lead.

Take the site you're reading right now. Its contact form fires generate_lead only after the API returns success, not when the button is clicked:

components/ui/ContactForm.tsx
const res = await fetch("/api/contact", {
  method: "POST",
  body: JSON.stringify({ ...form, locale }),
});
if (res.ok) {
  setStatus("success");
  trackEvent("generate_lead", { form_location: "contact_page", locale });
}

Validation error, server error, network error: no lead is recorded.

Mistake 3: Using a "Thank you" page as the conversion without guarding it

Symptom: more conversions than real orders, with an uneven gap from day to day.

Marking "a view of /thank-you" as a conversion is popular because it needs no code. The problem: a thank-you page can be opened as many times as anyone likes. Refresh, Back then Forward, reopen it from browser history: each one is a new "conversion". If several forms share one thank-you page, it gets worse: your newsletter signup and your quote request merge into one number.

A related mistake: marking the page_view event itself as a key event. The result is that every pageview on the whole site becomes a conversion. The right approach is to create a separate event from page_view with a URL condition, then mark that event.

Mistake 4: Orders without an order ID, or with the wrong one

Symptom: GA4 revenue is far off from your store's; product reports are empty even though there are orders.

GA4's purchase event has required fields that many setups skip:

  • transaction_id, a unique order ID. GA4 uses it to drop duplicate orders. Few people know this: if you send an empty string as the order ID, GA4 treats every order with an empty ID as the same order and drops all but the first (Google Analytics Help). You think you sold 100 orders; GA4 sees one.
  • value together with currency. Send a value without a currency code (USD, EUR) and the revenue may not be counted.
  • items, the product list. Without it you know you made money but not what you sold.

And value is just the sum of price × quantity: don't add shipping and tax to it. Google has separate fields for both.

One golden rule on top: send purchase only once the payment is confirmed, not when the customer clicks "Place order".

Mistake 5: You pay for the ads, someone else gets the credit

Symptom: you run ads steadily, but your traffic sources are full of "Direct", "(not set)" and "Unassigned", or your payment provider sits at the top of the Referral list.

This is the most expensive mistake because it bends budget decisions directly. The usual culprits:

  1. Redirects strip the UTM tags. The ad link carries ?utm_source=facebook&utm_medium=paid_social, but the site redirects from http to https, or from the bare domain to www, and drops everything after the ?. GA4 loads on the final page with no UTMs and records the visit as Direct.
  2. The payment provider steals the credit. The customer goes from your site to Stripe, PayPal or a hosted checkout, then returns to your confirmation page. Unless the provider is listed under "unwanted referrals", the order is credited to... the payment provider.
  3. Messy UTM spelling. Facebook, facebook and FB are three different sources to GA4. Google confirms UTM values are case-sensitive (Google Analytics Help). One campaign gets split into three rows, none of them big enough to notice.

One small trap that leads people to conclude "UTMs aren't working": GA4 deliberately excludes UTMs from the "Landing page + query string" dimension. They live in "Page location". Look in the wrong place and you'll go fix something that isn't broken.

Symptom: numbers swing in ways nobody can explain after adding a cookie banner; Google Ads remarketing audiences slowly shrink.

If you have visitors from the EEA, Google requires you to collect consent and pass consent signals to its tags (Google Analytics Help). Plenty of businesses have added a banner. Few have checked that it actually talks to GA4.

The two most common technical errors:

  • The "default" command runs after the measurement command. Google requires gtag('consent', 'default', …) to run before any command that sends data (Google Developers). Get the order wrong and the first hit, often the one carrying the ad source, uses the wrong consent state.
  • The two Consent Mode v2 signals are missing. Beyond ad_storage and analytics_storage, v2 needs ad_user_data and ad_personalization. Without them, Google Ads remarketing and enhanced conversion measurement suffer.

One more thing to remember: Consent Mode does not store the visitor's choice for you. The banner has to store it and read it back on the next visit. Otherwise a visitor who clicks "Accept" today is treated as undecided tomorrow.

Mistake 7: The ones you can't take back

The six mistakes above are all fixable: fix them and your data is correct from that day forward. This group is different: get it wrong and the data is gone for good.

  • An "Exclude" data filter switched to Active. Once an internal-traffic filter is Active, excluded data is removed from GA4 and from BigQuery, with no recovery (Google Analytics Help). Google gives you a "Testing" state precisely so you can trial it first. Type one IP range wrong and you may have deleted real customers' data too.
  • Sending parameters but never registering them. You send form_name, plan or product_type with your events, but to see them in reports they must be registered as Custom dimensions. Registration does not apply to data already collected (Google Analytics Help). Three months of sending without registering is three months you can't analyze.
  • The default 2-month data retention. This setting governs Explorations (advanced analysis). By the time you want a year-over-year comparison, the detail is already deleted. Most businesses should switch to 14 months on day one.

I don't hit 100% either, and you should know that

I showed off the form code above. To be fair, here's the rest of the story: this site measures entirely in the browser, too. With roughly 30% of internet users running ad blockers, some of my own leads never appear in GA4. I accept that because every lead still lands in my inbox. The inbox is the source of truth; GA4 is the compass.

That's the mindset I want you to keep: GA4 is for seeing trends and comparing channels, not for keeping the books. Set up properly, the trends are trustworthy. Set up wrong, the trends are wrong too, and that's the real problem.

A 30-minute check for business owners

You don't need to code to run this. You need one afternoon and someone with access to GA4.

1. Reconcile against your source of truth (10 minutes). Take last month's real orders or leads from your store, CRM or inbox. Compare with GA4 for the same period and time zone. A 10–25% shortfall is the normal range for browser-based tracking. GA4 higher than reality almost certainly means double counting (mistakes 1–3). GA4 far lower points to mistakes 2, 4 and 6.

2. Count the requests (5 minutes). F12 → Network → filter collect. Load a page: one page_view. Submit a valid test form: one generate_lead. Submit the form with a required field empty: nothing.

3. Check your sources (10 minutes). Open the Traffic acquisition report and look at Unassigned, (not set) and Referral. Your payment provider or your own domain under Referral: mistake 5. The same source in different capitalizations: mistake 5 again.

4. Check the settings you can't undo (5 minutes). Admin → Data retention: is it 14 months yet? Admin → Data filters: anything Active that nobody remembers testing? Admin → Custom definitions: are the parameters you send actually registered?

Keep three questions separate when you check: Does the tag fire? (Tag Assistant, GTM Preview). Does GA4 receive it correctly? (DebugView, Realtime). Are the processed numbers right? (reports after 24–48 hours, reconciled against real revenue). Each tool answers one question. Seeing a tag fire and concluding "the numbers are right" skips the other two.

The cost of wrong numbers

Back to where we started. A business with a broken GA4 setup doesn't lose money because of GA4. It loses money because of the decisions made on top of it.

An ad channel credited as "Direct" looks like it's burning cash, so it gets cut. A form that counts clicks makes cost per lead look cheaper than it is, so you raise its budget. An order counted twice makes ROAS look twice as good, right up until the books are closed.

Fixing these 7 mistakes won't make your website prettier or faster. It does something more important: it tells you which marketing dollars are actually bringing customers in.

If you've reconciled and found a gap you can't explain, send me the results of steps 1 and 2 above. Those two numbers are usually enough to narrow down where the problem is. And if you want to know why Google just added hostname filters to GA4, Google Analytics Just Got Dashboards is the natural next read.


Sources:

Related articles