GTM and GA4: why does tracking go wrong?

An event splits into two identical tracks, whilst another track loses its connection.

Duplicate events, consent errors, "Unassigned" and sales without a source. How to spot the most common mistakes in GTM and GA4, and what to do about them.

Anabel Hafstad5 min
In this article

It is an uncomfortable feeling to present numbers from GA4 whilst suspecting deep down that they are inaccurate. When tracking goes wrong, it is usually down to a handful of recurring culprits: duplicate installations, consent banners that block too much or too little, lost traffic sources, and events that fall outside the channel rules.

This is part 2. Part 1 covered how to set up useful tracking in GTM.

What is a tracking error in GTM and GA4?

A tracking error happens when what gets recorded does not match what actually took place. A form is submitted once, but counted twice. A purchase arrives via Google, but shows up with no source. The error is rarely visible within the report itself. You only notice it when the numbers contradict your inbox, your checkout, or basic common sense.

When I troubleshoot, I always compare GA4 against a secondary source: the number of form submissions in your inbox, orders in your ecommerce backend, or calls in your phone log. The discrepancy tells you where to start looking.

Why are events counted twice in GA4?

The most common culprit is GA4 being installed twice, both directly in the site code and via GTM. When this happens, every single pageview and event fires twice. Search your source code for your measurement ID, the one beginning with G-. If it appears in more than one place, you have likely found your problem.

The second cause is having two triggers for the same action. If both the button click and the thank-you page are configured as form conversions, you will record two conversions per submission. Pick one, ideally the one confirming that the submission actually succeeded.

A consent banner can fail in both directions. It can block all tracking entirely, even after a visitor accepts, because the tags are not mapped to the consent signal. Or it can fire tags before the user has answered, which both skews your data and risks breaching privacy regulations.

Test this using a fresh incognito browser window. Open GTM's Preview mode, reject consent, and verify that analytics tags do not store cookies. Repeat the test and accept consent. The events should now fire properly, exactly once each.

What is "Unassigned" in GA4?

GA4 categorises traffic into channels such as "Organic Search", "Paid Search", and "Email" based on strict rules around source and medium. "Unassigned" means GA4 received data that fails to match any of these predefined rules.

The most common causes I see:

  • Custom UTM values, such as utm_medium=newsletter instead of email. Stick to the mediums GA4 recognises natively.
  • Events without a session, such as events sent via server-side measurement or after a session has expired.
  • Consent restrictions limiting information, preventing the traffic source from being stitched to the event.

Create a simple UTM template for your entire team to use. That often resolves more issues than tweaking settings inside GTM.

Several tracks flow into defined channels, whilst one single track remains stranded outside.
“Unassigned” represents data that does not fit into any channel rule, not data that is missing entirely.

Why do purchases lose their source?

Many online shops send customers to an external payment provider on a separate domain. Without cross-domain measurement, the session often breaks. When the customer returns to your thank-you page, GA4 treats it as a brand-new visit coming from the payment gateway, attributing the purchase to the wrong source or leaving it blank.

Add the payment provider's domain to GA4's cross-domain measurement list, or configure it as an unwanted referral if cross-domain tracking is not supported. Additionally, ensure the purchase event sends the same client ID, especially when dispatching transactions from the server.

Troubleshoot your tracking

  • Search for the measurement ID in the code; it should only load via GTM.
  • Ensure every conversion has one trigger, not two.
  • Test consent by accepting and rejecting in an incognito window.
  • Confirm UTM links use mediums recognised by GA4.
  • Configure cross-domain measurement for external payment gateways.
  • Reconcile GA4 figures against your inbox, orders, or phone logs.

What I often see go wrong with GTM and GA4 tracking

  • The error is fixed in the report, not at the source. Filters in GA4 hide the problem, but the underlying data is still wrong.
  • No one tests after changes to the site. A new theme or checkout can break tracking without anyone noticing.
  • "Unassigned" is accepted as normal. A small share is common, a large share almost always means a specific error.
  • The payment provider is not excluded as a referrer. Then the purchase gets "payment" as its source instead of the ad that actually drove the sale.

In short: My advice on GTM and GA4 tracking errors

Bad data is worse than no data, because you make decisions on it with a clear conscience. I recommend a fixed check after every major change to the site, not only when the numbers look odd.

Set aside one hour a month to test a purchase and a form in DebugView. It is the cheapest insurance you can buy for your marketing budget.

Anabel, founder of SmåSeo

Anabel Hafstad

Independent SEO and GEO advisor

Do you trust the numbers in GA4?

I can review your tracking setup and find where data is disappearing or being counted twice. Book a free introductory chat.

Read more about how we start →

Or test your website first: Run a free SEO analysis →

Further reading (for the especially interested)

Sources used in this article

The documentation was verified on 27 October 2026. Report names and channel rules may change. The issues described are general and are not drawn from any specific client's data.

Ofte stilte spørsmål

  • It means GA4 has received data, but the source and medium do not match any of the default channel rules. Common causes include custom UTM values, missing source details, and events sent without an active session.