Why is Google Analytics 4 / GA4 Under or Over-Reporting?

Learn the common reasons why reporting may not be what you expect


Understanding why Google Analytics 4 (GA4) might not always report data as expected involves considering a few key points. Traditional tracking methods often miss data if users leave a page too quickly. Switching to server-side tagging solves this issue by tracking orders, not just page loads. Additionally, differences in how Shopify and GA calculate metrics can cause discrepancies, as can the use of third-party checkouts and upsells. Even with server-side tagging, anomalies can occur due to unintentional exclusions or including offline orders. So, it's crucial to regularly review and refine tracking methods for accurate insights.

Load-Based Client-Side Tracking

With traditional browser-based tags (a.k.a. client-side tagging) you are always going to have a gap in conversion and user behavior data missing in your GA4 platform.

This is because browser-based tags are load-based. Meaning they need the Thank You Page to fully load for the tracking to fire. If a shopper navigates away from the Thank You Page too quickly, the tracking doesn't fire & the data doesn't get sent.

The Solution:

  • Switch to Server-Side Tagging. It's order-creation based tracking, meaning it doesn't matter how long the shopper stays on the Thank You Page. The trigger is an order being created in Shopify.

AdBlockers + Client-Side Tracking

Traditional browser-based tags will always have a gap in data due to AdBlockers.

42.7% of internet users worldwide (16-64 years old) use ad blocking tools at least once a month. And ad blocking is most common among internet users between 16 and 24 years old. Among this demographic, 46.2% of users worldwide admit to using ad blockers.

The Solution:

  • Switch to Server-Side Tagging. Server-Side allows you to collect data in a first-party context. From split testing sitewide server-side tracking for GA in a 1st party domain context & comparing it to "client side" only tracking (e.g. using native Shopify or GTM web container), the server-side property sees ~ 20-30% more sessions.

Shopify Calculates Metrics Differently

If you're comparing your data to Shopify, do it with a grain of salt. Shopify states that they calculate metrics differently than third-party tracking services such as GA4.

Some common metrics that will be different between the two are:

  • Unique Visitors
  • Sessions
  • If you're using client-side tracking, offline orders such as POS orders or draft orders won't appear in GA4. This will cause the total number of orders to be different in Shopify vs Google Analytics.

The Solution:

  • There is no solution for Shopify calculating metrics differently than GA4. However, you can send offline orders to GA if you switch to Server-Side Tracking. This will allow the total number of orders in GA to better match Shopify.

Different Timezones

Are your two sources reporting in the same timezone?

Locate Shopify Time Zone Settings:

  • Begin on the Shopify homepage and click on the "Settings" button in the lower left-hand corner.
  • Once in your Shopify settings, scroll down and navigate to the section titled "Time zone and units of measurement".
    • Locate the heading "Time zone".
    • Use the box and the drop-down menu feature to select the time zone you are currently in.
    • (See Figure 1)

Step 2 screenshot

Figure 1

Locate GA4 Time Zone Settings:

  • Begin on the GA4 homepage and click on the "Settings" button in the lower left-hand corner.
  • Once in your GA4 settings, use the left-hand menu and click on the tab titled "Property".
  • A drop-down menu will appear and click on "Property details".
  • Once in your property details, locate the section titled "Reporting time zone".
    • Use the box and the drop-down menu feature to select the time zone you are currently in.
    • (See Figure 2)

Step 1 screenshot

_Figure 2_

Third Party Checkouts

Are you using anything beyond the native Shopify Checkout? Examples of such checkout's include, Recharge, Carthook, Global-E, etc.

If you are, check to see if you have tracking on those additional checkout pages!

A few ways you can test those checkouts are:

  • Using Google's Pixel Helper Tag Assistant Legacy (by Google)
  • Using Google Tag Manager's Preview Mode
  • Chrome's Developer Tool

Upsells in Checkout

Are you offering upsells during on your unified Shopify checkout?

If yes, you may see GA under-reporting if you're also using native integrations or hard-coded script on the Thank You Page. Native integrations & hard-coded script will only fire the Purchase event if the shopper makes it to the Thank You Page. If the shopper exits during the upsell page, your tracking won't fire.

The Solution:

  • Switch to Google Tag Manager + Elevar's Pre-Built Upsell Tracking.

If yes and you're using Elevar's Post-Purchase Upsell Tracking, you may see GA over-reporting quantity of orders. This is because our standard GA Pre-Built Upsell tags send a custom GA event upon upsell purchase that hyphenates the original order id.

The Solution:

  • Create a View in GA that filters out upsell purchases.

Using Server-Side Tagging

You're Excluding Orders That You Want to Send:

If total number of orders in GA4 is lower than the total number of orders created in Shopify, you may be excluding orders that you want sent.

  • Begin on your Elevar homepage and use the left-hand menu to click on "My Tracking".
  • Click on your GA4 Destination
    • Locate the box titled "Setup Steps".
    • Click on the tab titled "Filter Transactions".
      • Once in the "Filter Transactions" step, navigate to the box titled "Block some transactions".
      • Review the channels you are blocking. You may be blocking orders you would like to send.
      • (See Figure 3)

Step 1 screenshot

Figure 3

You're Sending Offline Orders That You Might Not Want to Send:

The reverse could also be true! Are you sending offline orders like POS orders or draft orders to GA4 and you don't actually want to?

  1. Check what Sales Channels you currently have in place. [ Learn how ]

  2. Block your desired transactions from being sent [ Learn how ]