GA4. Measurement

GA4 Comparisons After a Tracking Change: Why the Arrows Lie, and When to Trust Them Again

+803.5%Transactions arrow on one store, caused by a tracking fix
+789.0%Purchase revenue arrow, same window, same cause
No dataAdd to carts comparison, because the event was broken all window
Day 56First honest Last 28 days comparison after day 0

Quick answer

If a GA4 or Looker Studio comparison jumped right after a tracking fix, a new tag or a consent banner change, the arrow is measuring the tracking change. Find day 0, the first full day the new setup ran. For any window of W days, the first honest period comparison arrives on day 0 plus two full windows: day 14 for Last 7 days, day 56 for Last 28 days, and roughly a year plus 28 days for year over year. Add a day or two for GA4 processing. Until then, report absolute numbers, compare only windows that sit wholly after day 0, read organic trend in Search Console (it doesn’t depend on your tags), and record the change as a GA4 annotation and in a change log.

Written by Ram Kr Shukla, SEO and growth consultant, Google Analytics certified.

Here’s the dashboard that started this post. A D2C beauty brand on Shopify, a Last 28 days view, comparison set to the previous period. Transactions: up 803.5%. Purchase revenue: up 789.0%. Add to carts: no percentage at all, just “No data” where the comparison should be.

Nobody had a sale on. Nothing went viral. What happened was that ecommerce tracking went live partway through the previous window, so the baseline was almost empty. The percentages measured the tracking fix, not trading.

That’s the whole problem in one screen. Any time you fix tracking, add a tag, migrate a platform or change a consent banner, the arrows move. Every period over period comparison in GA4 and Looker Studio reports the change as if the business did it. Sometimes up, sometimes down. This post covers how to spot it, how to work out the exact day the arrows become honest again, what to report until then, and how to write the change down so nobody falls for it twice. Want someone to fix the tracking and set up the reporting around it? That’s my GA4 conversion tracking work.

This post is about comparison windows. If your organic number is wrong for other reasons, like untagged paid clicks or URL parameters rewriting the source, that’s an attribution problem, covered in why your organic traffic numbers are lying to you.

What a Broken GA4 Comparison Looks Like

A comparison is two totals and a division. Current window over previous window, minus one. If the tracking was different in the two windows, you’re dividing two different measurements, and the answer is noise with a percent sign.

Three tells give it away. You only need one.

1. The comparison says No data

When a metric was zero or missing for the whole previous window, there’s nothing to divide by. Looker Studio showed “No data” on the add to carts scorecard in the dashboard above, because add_to_cart had been broken for the entire previous period. Other tools draw a zero baseline differently, so treat any blank, dash or missing comparison the same way. That blank is the tool telling you the baseline doesn’t exist.

2. The percentage is impossible for your business

Ask whether anything you know about could explain the number. A store doesn’t grow transactions ninefold in four weeks without someone noticing in the warehouse. Check the finance numbers, the order count in the store admin and the ad spend. If they all look normal and GA4 says +800%, GA4 is wrong about the baseline. The same goes for a sudden 40% drop that nobody else can see.

3. The daily line has a step on one date

Switch the line chart to daily and look for a cliff. Real demand ramps. Seasonality curves. A tracking change makes a vertical step on the exact day something shipped, then a new flat level. If the step lines up with a release, a GTM publish or a consent banner going live, you’ve found day 0.

Two related checks help. If page views or events per session roughly double overnight, a second tag is probably counting the same action. If an event goes from near zero to thousands in a day, it was broken before and fixed on that day. The Shopify GA4 funnel audit covers how to prove which events fire and where, so I won’t repeat it here.

The +803.5% Case: What Actually Happened

Here’s the timeline on that store, with day 0 as the first day ecommerce tracking was live. The dashboard was read on day 34. Its Last 28 days window ran from day 6 to day 33. The previous period started 22 days before day 0 and ended on day 5.

So the previous window had six days of working ecommerce tracking and 22 days from before ecommerce tracking was live. The current window had 28 full days. Of course the arrow went green. It was comparing four weeks of measured orders against six days.

Comparison windows around a tracking fixTimeline from 24 days before the fix to 60 days after. On the day it was read, the previous 28 day window had ecommerce tracking for only its last 6 days. The first comparison with both windows after day 0 is available on day 56.Why the arrows said +803.5%Two Last 28 days windows, read on day 34 after the fixWHAT THE DASHBOARD COMPAREDPrevious period22 days untrackedCurrent period28 days tracked6 tracked daysFIRST HONEST COMPARISONPrevious perioddays 0 to 27Current perioddays 28 to 55day -22day 0day 28day 56Day 0: ecommerce tracking goes liveBaseline mostly empty, so arrows read +803.5% and +789.0%Day 56: both windows clean, arrows mean something againRamKrShukla.comIllustrative. Anonymised client data.
One store, read on day 34: the previous window had ecommerce tracking for its last 6 days only. Both windows sit after the fix from day 56. Illustrative. Anonymised client data.

Add to carts was worse. The add_to_cart event had been broken for that entire previous window, so its comparison had no baseline at all. That’s where “No data” came from. If you want the full story of how the cart event was broken and how it was proven, it’s in the funnel audit write-up.

The rule we set for that client was short. Report absolute numbers and ignore the arrows until a full 28 day window sits clear of the fix. On paper that’s day 56. We called it at roughly day 58 to leave room for processing.

And the comparisons stayed on the dashboard. That was deliberate. Removing them means someone has to remember to put them back, and they fix themselves with time. A broken arrow you’ve explained is less dangerous than a missing one somebody re-adds without the context.

Why a Partly Tracked Window Makes Such Big Numbers

You’d expect a tracking fix to show +100% at most. It doesn’t, and the arithmetic explains why.

Say your store sells the same number of orders every day, and the old setup recorded none of them. If the previous 28 day window had tracking live for 14 of its days, it holds half the orders the current window does. The arrow reads +100%. If tracking was live for 7 days, the arrow reads +300%. For 3 days, +833%. Your business didn’t change at all in any of those cases.

Fake growth from a partly tracked baselineWith identical daily sales, a 28 day comparison shows +33% if the previous window was tracked for 21 days, +100% for 14 days, +300% for 7 days and +833% for 3 days.Flat sales, rising arrowsSame orders every day. Only the tracked days in the baseline change.DAYS TRACKED IN PREVIOUS 28ARROW SHOWS21 of 28 days+33%14 of 28 days+100%7 of 28 days+300%3 of 28 days+833%Arrow = 28 divided by tracked days, minus 1. Real business change: 0%.RamKrShukla.comIllustrative arithmetic
If tracking recorded nothing before day 0, the percentage depends only on how many baseline days were tracked. Illustrative arithmetic. No client data.

The formula is 28 divided by the tracked days, minus one. Real numbers drift from it in both directions. If the old setup recorded some orders, the arrow comes in lower. The store above landed at +803.5% with six tracked days in its baseline, well above the +367% the formula gives. That gap could come from the first tracked days being partial, from genuine trading changes in the current window, or both. The arrow can’t tell you which. Once the baseline is contaminated, the percentage can’t be split into “tracking” and “real” after the fact.

The same logic runs in reverse. Launch a consent banner that blocks tags until people accept, and the current window loses visitors the previous one had. The arrow goes red by roughly the share of people who don’t accept. Nothing happened to demand.

The Changes That Break Comparisons

Ecommerce fixes are the loudest case, but not the only one. Anything that changes what gets counted, from a given date onward, breaks every comparison that straddles that date. Here are the usual ones, with the direction they push the arrow.

ChangeArrowWhat you’ll seeSource
Ecommerce or event tracking fixedUp, often by hundreds of percentAn event goes from near zero to normal levels on one dayClient evidence above
A second Google tag addedUp, close to +100% on duplicated eventsEvents per session roughly double overnightGeneral practice
Consent banner with tags held until consentDownUsers and sessions fall on launch day while store orders don’tGoogle: consent mode
Behavioral modeling starts, or reporting identity set to BlendedUsers upGoogle notes reports with modeled data can show higher user countsGoogle: behavioral modeling
A data filter activated (for example internal traffic)DownFiltered data is gone from that day, and history isn’t touchedGoogle: data filters
An event newly marked as a key eventUp from zeroKey events count only from the day you mark themGoogle: key events
Site migration, new theme or new checkoutEitherTag missing on new templates, or events renamedGeneral practice
Changes on Google’s sideEitherA system-generated annotation on GA4 line chartsGoogle: annotations
Each change resets day 0 for the metrics it touches. Sources linked where Google documents the behaviour.

A few of these need a word more.

Consent. Google’s consent mode page says that when analytics storage is denied, GA4 won’t read or write its cookies. In the basic setup, tags don’t load at all until a visitor accepts. In the advanced setup, tags load first and send cookieless pings that Google can use for behavioral modeling. Modeling has thresholds: Google lists at least 1,000 events per day with analytics storage denied for at least 7 days, and at least 1,000 daily users with it granted for at least 7 of the previous 28 days. So a consent change can produce two steps, one when the banner goes live and another later when modeling kicks in. Each is its own day 0.

Key events and filters. Neither is retroactive. Google’s help page on key events says marking one “affects reports from time of creation” and doesn’t change historic data. A key event you marked on day 0 will show a huge increase against a previous period where it didn’t count as one, even if the underlying event fired the whole time.

Migrations. On Shopify, GA4 is usually connected through the Google & YouTube app. Moving from an older setup to the app, or from the app to a Tag Manager container, changes which events fire and how they’re named. Treat the switch day as day 0. If the migration also moved URLs, the rankings side has its own recovery plan: what to do after a redesign loses rankings.

When Is the First Honest Comparison?

Here’s the rule. For a reporting window of W days, the first honest period over period comparison arrives on day 0 plus W plus W.

The first W covers one full window of the new setup. The second W covers another full window after that. Only then do both the current and the previous period sit wholly after the change. Before that, the previous period has at least one day measured the old way. If you’d rather not count days by hand, the GA4 comparison window calculator works out the honest date for every window you report.

Then add a buffer. Google’s data freshness page says GA4 processing can take 24 to 48 hours, and data in reports may change during that time. Two days is enough for most standard properties.

Comparison you reportWindow (W)First honest dayWith 2 day buffer
Last 7 days vs previous period7Day 14Day 16
Last 28 days vs previous period28Day 56Day 58
Last 90 days vs previous period90Day 180Day 182
Calendar month vs previous monthabout 30Second full month after day 0Read it a couple of days into the third
Last 28 days vs same period last year28Day 393 (365 plus 28)Day 395
Day 0 is the first full day the new tracking ran. If the change shipped mid-day, count from the next day.

Two details trip people up.

First, day 0 has to be a full day. If a developer published the fix at 4 pm, the first afternoon is half one setup and half the other. Start counting from the next morning.

Second, year over year is slower than it looks. A “Previous year” comparison needs the same window last year to sit after day 0 as well. So for any metric a tracking change touched, a clean year on year comparison needs at least a year plus one window. Until then, year over year on that metric is measuring the setup change.

A tip if your stakeholders like a Monday to Sunday rhythm. GA4 offers Previous period (match day of week) as a comparison option. Over 28 day windows it makes no difference, because 28 is four whole weeks. That’s one reason 28 days is a cleaner reporting window than 30.

What to Report Until the Arrows Are Honest

You can’t pause reporting for eight weeks. You don’t need to. Four kinds of numbers stay trustworthy through a tracking change.

Absolute numbers

Transactions, add to carts, sessions. Report the count for the current window and say plainly that the comparison is invalid until a given day. A store doing several thousand transactions in four weeks is a perfectly useful fact without an arrow attached.

Comparisons between windows that both sit after day 0

Shorter windows clear faster. On day 21, Last 7 days versus the previous 7 days is already honest, because both weeks sit after day 0. Week over week can carry the trend while the 28 day view waits. In Looker Studio you can also set a fixed comparison range that starts on day 0, though it goes stale and someone has to remember to switch it back.

Search Console

Search Console’s Performance report counts clicks from Google Search results and impressions in them. None of it depends on your GA4 tag, your consent banner or your Tag Manager container, so a tracking change doesn’t move it. For organic trend through a tracking change, it’s the cleanest source you’ve got. It has its own rare logging problems, which Google publishes on its data anomalies page, so check that before reading a step there.

Split it by brand and non-brand before you present it, because branded clicks mostly track demand that already existed. The method is in branded vs non-branded traffic, and a few reports most people skip are in the Search Console reports most marketers never open.

The store’s own order count

Your ecommerce platform records orders whether or not a GA4 tag fired. It won’t tell you about channels, but it settles the one question that matters during a tracking change: did sales actually move? If the store admin is flat and GA4 says +800%, you’re looking at a measurement change.

Ratios inside one window also survive, as long as every metric in the ratio was tracked the same way for the whole window. Add to cart rate in the current window, for instance, is fine once add_to_cart is working. Comparing it to the broken window isn’t.

Should You Remove Comparisons From the Dashboard?

Usually no. On the store above, the comparisons stayed on, because they fix themselves with time. What changed was how they were read and reported.

What helps is a visible note. In Looker Studio, put a text box beside the scorecards that says which metrics are affected and the day the arrows become valid. GA4 annotations sit on GA4’s own line charts, and a Looker Studio report is a separate document, so don’t rely on the GA4 note being seen by people who only open the dashboard.

Only report editors can change the comparison date range in Looker Studio. In GA4 itself, the comparison anyone picks in the date picker is personal: Google’s date range help page notes that date changes don’t carry over to other users. So a colleague can open the same report, switch on a comparison and see +803.5% with no warning at all. That’s the strongest argument for annotations.

If you’re building the dashboard from scratch, the layout I use for Search Console and GA4 side by side is in the Looker Studio SEO dashboard guide. For what a monthly SEO report should contain once the numbers are clean, see what a real Shopify SEO report contains.

How to Document a Tracking Change

Most teams fix the tag and move on. A quarter later someone pulls a quarter on quarter view and asks why everything tripled.

GA4 annotations

GA4 now supports annotations. According to Google’s help page, you open a report with a line graph, right click a data point and choose Add annotation. Each one takes a title of up to 60 characters, an optional description of up to 150, a single date or a date range, and a colour. You need the Analyst role or above to create one, Viewers can see them, and a property holds up to 1,000. Annotations can also be created through the Admin API, and GA4 adds its own system-generated ones when something on Google’s side affects your data.

Write the annotation for the person reading it in six months. “Ecommerce tracking live, comparisons invalid until day 58” is better than “GTM fix”. Google suggests single-date annotations when you expect a lot of overlapping ranges, and for a tracking change a single date on day 0 is exactly right.

GA4 change history

GA4 keeps a property change history covering the last two years, with who changed what and when. It’s useful for admin changes like filters, key events and reporting identity. It won’t show changes made in your site code or in Tag Manager, so it doesn’t replace a log.

A change log

A shared sheet is enough. One row per change, written on the day it ships.

FieldWhat goes in itExample
Day 0First full day the change was liveThe date, in your own log
ChangeWhat shipped, in plain wordsEcommerce events moved to the Google & YouTube app
Metrics affectedEvery metric whose counting changedTransactions, revenue, add to carts
Expected directionUp, down or unknownUp
Honest fromDay 0 plus 2W, per window reported7 day: day 16. 28 day: day 58
Verified byHow you confirmed it workedTest order in DebugView, four funnel events present
AnnotatedYes or no, and whereGA4 annotation, dashboard text box
A minimal tracking change log. The example row is illustrative.

It also helps with the harder conversations. When someone asks why last quarter’s report said +800% and this one says +4%, you can point at a row instead of reconstructing the story from memory. For the broader version of that argument, how to read an e-commerce SEO report without being fooled covers the other numbers that flatter.

How to Handle GA4 Comparisons After a Tracking Change, Step by Step

Here’s the sequence, in order. Most of it happens on the day the change ships, plus one calendar reminder for the honest date.

1
Pin down day 0

Find the first full day the new tracking ran. Check the release notes, the Google Tag Manager version history, GA4 property change history and the first day the event shows up in a daily events chart. If the change shipped in the afternoon, day 0 is the next day.

2
Read the comparison for the three tells

Look for No data on the comparison line, percentages the business can’t explain, and a step on one date when you switch the line chart to daily. Any one of them, lined up with a release, means the arrow is measuring the tracking.

3
Work out the honest date for every window you report

For a window of W days, the first honest period comparison arrives on day 0 plus 2W. Add two days for GA4 processing. For year over year, it’s day 0 plus a year plus one window. Write each date down.

4
Annotate it in GA4 and log it

Add a GA4 annotation on day 0 that names the change and the metrics it touched. Add a row to your change log with the honest dates, so whoever reads the dashboard next doesn’t have to rediscover it.

5
Switch the report to absolute numbers

Report counts without arrows, and compare only windows that sit wholly after day 0. Put a one line note next to the scorecards that says when the arrows become valid.

6
Cross-check against sources the change didn’t touch

Read organic trend in Search Console, which counts clicks from Google Search itself, and check sales against the store’s own order count. If they’re flat while GA4 says +300%, you’ve confirmed the cause.

7
Re-read the arrows on the honest date

When the date arrives, check the comparison again, remove the caveat note and keep the annotation. If a second tracking change landed in between, day 0 moves and the count starts again.

GA4 Comparison FAQ

Why does my GA4 comparison show a huge increase after fixing tracking?

Because the previous period was recorded with broken or missing tracking, so its total is artificially small. Any percentage built on a near empty baseline measures the fix. On one store I audited, transactions showed up 803.5% and purchase revenue up 789.0% for exactly this reason.

Why does my comparison say No data?

The metric was zero or missing for the whole previous window, so there’s nothing to divide by. On the same store, add to carts showed No data because add_to_cart had been broken for the entire previous period. It tells you about the tracking. It says nothing about sales.

When can I trust period over period comparisons again?

On day 0 plus two full windows, where day 0 is the first full day the new tracking ran. That’s day 14 for Last 7 days, day 56 for Last 28 days and day 180 for Last 90 days. Add a day or two, because Google says GA4 data processing can take 24 to 48 hours.

How long until year over year comparisons work after a tracking change?

A year plus one window. For a 28 day window that’s about day 393, because the same 28 days last year also have to sit after the change. Until then, compare windows that both fall after day 0.

What should I report while the comparisons are broken?

Absolute numbers, comparisons between windows that sit wholly after the change, Search Console clicks and impressions for organic trend, and the store’s own order count as a sanity check. Leave the arrows on the dashboard with a note saying when they become valid.

Can a consent banner change break GA4 comparisons?

Yes. If tags wait for consent, visitors who decline or ignore the banner aren’t measured, so users and sessions drop on launch day. If behavioral modeling later switches on, Google says reports with modeled data can show higher user counts. Treat each switch as a new day 0.

Does Search Console change when GA4 tracking changes?

No. Search Console counts clicks and impressions from Google Search itself, so tag fixes, consent banners and duplicate tags don’t move it. It has its own occasional logging problems, which Google lists on its Search Console data anomalies page.

How do I add an annotation in GA4?

Open a report with a line graph, right click a data point and choose Add annotation. Give it a title of up to 60 characters, an optional description of up to 150, a date or date range and a colour. You need the Analyst role or above, and each property holds up to 1,000 annotations.

Just fixed your tracking, and the numbers look too good?

I fix GA4 ecommerce tracking, work out which comparisons are valid and from when, and set up reporting your team can read without falling for a tracking change.

GA4 Conversion TrackingShopify GA4 Funnel Audit

Tags: GA4SEO ReportingLooker StudioEcommerce Tracking

RS

Written by Ram Kr Shukla

SEO and growth consultant with 20+ years in SEO and growth across 50+ brands, working as a consultant or Fractional Chief Digital Officer. Google Analytics and Google Ads certified. Checks the tracking before trusting any comparison, and works daily in GA4, Search Console and Looker Studio.

Client Results, Not Claims

5x D2C revenue in 18 months via SEO
10x SaaS trials, zero new blog posts
120K Monthly organic visitors from zero

Free Resource

Steal My 40 Point SEO Audit Checklist

The exact list I run on every paid audit. Score your site in 30 minutes.

Get the checklist →

Is your site invisible to AI search?

Ask ChatGPT to recommend brands in your category. If you are not the answer, we should talk.

Book a Free Strategy Call