• Courses
    • Courses
    • Course bundles
  • Blog
  • Resources
    • Youtube channel
    • E-books and Guides
    • GTM Recipes
    • View All Resources
    • GTM Community
    • GA4 community
  • Services
  • About
    • About
    • Contact
  • Login
  • Courses
    • Courses
    • Course bundles
  • Blog
  • Resources
    • Youtube channel
    • E-books and Guides
    • GTM Recipes
    • View All Resources
    • GTM Community
    • GA4 community
  • Services
  • About
    • About
    • Contact
  • Login

April 2, 2025

Duplicate Events in Google Analytics 4 and How to Fix them

Updated: April 2nd, 2025

Lately, I have noticed an increasing number of people complaining about duplicate events in their Google Analytics 4 debug view. Sometimes, the reasons for this are quite obvious, but in other cases, they were a bit trickier than I initially anticipated.

If you are seeing something similar in your GA4 DebugView, you have come to the right place.

I have collected the most common issues I have dealt with when it comes to duplicate events in Google Analytics 4, and hopefully, you will find this article useful.

If none of the tips here helped you, let me know in the comments. Maybe we will find something new and then I will update the blog post.

In this article, you will learn the following solutions to fix duplicate events in Google Analytics 4:

  1. Having hardcoded GA4 and GTM at the same time
  2. Duplicate dataLayer events
  3. “Create event” feature in Google Analytics 4
  4. The same GTM container is added multiple times to the website
  5. Poor configuration of tag’s triggers
  6. Ignore duplicate instances of on-page configuration
  7. Single-page applications
  8. Incorrect server-side tagging configuration
  9. Overlap between your GTM events and GA4 enhanced measurement
  10. Visitor reloads/revisits a Thank you page
  11. Measurement Protocol
Subscribe and Get the Ebook - 20 GA4 mistakes

 

Video tutorial

If you prefer video content, here’s a tutorial from my Youtube channel.

 

#1. Hardcoded Google Analytics 4 and same events in Google Tag Manager

If you want to install GA4 on your website, a recommended way is to use Google Tag Manager. It gives you more flexibility and control.

However, sometimes marketers/analysts do that without realizing that some hardcoded GA4 tracking code is also sending the same events to GA4. The result? If, say, a visitor starts a checkout, two identical events will be sent to Google Analytics 4, one from GTM and one from GA4.

There are various ways to identify if you have hardcoded (added directly to the website’s source code) GA4. If you are technical enough, you can check the source code of the website.

You can open your browser’s developer tools (I am using Chrome), then go to Sources.

Then hit CTRL + SHIFT + F (on Mac, that would probably be Command + SHIFT +F) and enter the name of the event that is tracked as a duplicate. In my example, that is add_to_cart.

When you enter it, check the search results and see if any of those codes contain “gtag”. If yes, it means that the add_to_cart event is also being sent from the website’s code.

If you found such a code, you are dealing with a thing called double tagging. It means that you are tracking same things with GTM+GA4 and with hardcoded GA4.

Another (more drastic) option could be to temporarily remove the GTM container from the website and see if you are still getting GA events (non-duplicate). If yes, then you have hardcoded GA somewhere on your website.

What is the solution? Audit your entire setup, remove unnecessary hardcoded GA4 snippets and at the same time, make sure that everything is configured only in Google Tag Manager. This is quite a complex process, and if you want to learn more, enroll in my GTM course for beginners. Migration to GTM is one of the topics that I explain in great detail.

Also, check if your GA4 is not installed via some plugin (e.g., Google Site Kit).

 

#2. Duplicate dataLayer events

Let’s say that you are seeing duplicate add_to_cart events in your GA4 Debug View. Those events are sent when a visitor clicks the “Add To Cart” button, a dataLayer.push is activated and the click information is visible in the preview mode.

add to cart in gtm preview mode

Sometimes, the problem might be in the implementation, and because of some bug, a developer’s code activates the same dataLayer.push code multiple times.

If that is your case, then ask a developer to fix this problem and fire the same event only once per interaction.

 

#3. “Create event” feature in Google Analytics 4

This reason is possible if you haven’t properly invested enough time to learn Google Analytics 4 and just decided to guess what some features do.

If you log in to GA4 and go to Admin > Events, you will see a button called “Create events”. Sometimes, this might not look very clear. Occasionally, people start sending events from GTM to GA4 (e.g., add_to_cart), but they also create the same event in the GA4 interface (with the help of the “Create events” feature).

That is NOT how this feature works. If you want to properly learn what “Create events” is and how to use it, read this guide.

All you need to know right now is that if you are already sending some events from GTM to GA4 and everything is fine with those events, you should NOT also enter them in the Create Events section.

Otherwise, you will be sending one event from GTM, and then GA4 will create another event with the same name and the same parameters if you create a rule like this:

This rule is looking for all events with the name “add_to_cart” (see Matching Conditions) and then it will copy all parameters of the event, hence create a new one (see Parameter configuration). The name of that new event will also be add_to_cart (see Custom Event Name field).

If, however, you already have that created, here’s how you can delete that “Create event” rule. Go to Admin > Events > Create event. Click the rule you want to delete:

Then, in the top-right corner, click three dots > Delete.

This will stop new duplicates. But you cannot fix the historical data. There is no solution for that.

 

#4. The same container is added multiple times to the website

Also, it is possible that a developer accidentally added the same Google Tag Manager container twice. This will result in duplicate events. I have published a blog post explaining how to diagnose this.

Important: GTM’s preview and debug mode will cause multiple GTM containers to be shown on a website. Do your diagnosis while having the preview mode closed.

Subscribe and Get the Ebook - Mastering GA4 event tracking

#5. Poor configuration of tag’s triggers

This part will be the least specific because there are a million ways how to misconfigure something. But maybe this will give you at least some clues.

When you start debugging GTM (by enabling the Preview and Debug mode), clear the stream:

Then complete the action that is causing duplicate events. Click on Summary in the GTM preview mode.

Then take a look at the tag that is supposedly causing duplicate events. How many times did it fire? If one, then the problem is somewhere else.

Was the tag fired twice or more? Click that tag. Then, scroll down a bit and see the exact preview mode messages on which the tag fired. Did you expect the tag for fire on both events?

Click on the message that you did not expect. Then, scroll down to see the triggering conditions that were met and fire the tag. Fix your trigger conditions to be more precise and not fire on this event. How can you do that? There is no quick fix. You will have to learn GTM, how it works and how to use it. My courses can help you with that.

 

#6. Ignore duplicate instances of on-page configuration

This tip comes from our reader Zander.

When he created the GA4 account, he already had GA3, and it automatically connected the two using a Google Tag without him realizing it. So Zander had mystery pageviews firing in GA4.

After digging into the settings, he found this. Go to GA4 > Data Streams > Choose your data stream > Configure tag settings > Click on Your Google Tag.

And if you haven’t yet, click Ignore duplicate instances of on-page configuration (recommended).

See if this fixes the issues.

 

#7. Working with a single-page application?

There are several ways how to track pageviews on single-page applications. I explain them here. The last method in that article explains how you should ask a developer to push “virtual pageviews” to the data layer, and then you should fire the GA4 page_view event tag.

Every time the tag fires, a pageview is tracked.

However, Google Analytics also offers an automatic pageview tracking feature for single-page applications. It’s part of the Enhanced Measurement.

On some SPAs, it works. On others – it doesn’t. If it works on your website (while you also have implemented custom page_view tracking (with “virtual pageviews”)), this means that you’ll get duplicate pageviews. One page_view will come from your custom setup. The other one will be tracked automatically by Enhanced Measurement.

What to do?

Go to Google Analytics 4 admin > Data Streams and select your website data stream. Click the cog icon in the “Enhanced Measurment” section.

Then click “Show advanced settings” in the “Page views” section and disable “Page changes based on browser history events”. Click save.

This should get rid of duplicate page_view events.

 

#8. Incorrect server-side tagging configuration

If you are using server-side tagging in your GA4 setup, check the number of outgoing requests in your SGTM’s preview mode.

Even if you receive one GA4 request from your website, you might have multiple Google Analytics 4 tags in the server container that send the data to the same container.

Normally, this should not happen. But maybe you made a mistake in your configuration.

If, on the other hand, you see two outgoing requests to Google Analytics, check the value of the “tid” parameter. If it contains different GA4 measurement IDs, then you’re ok. Your main goal here is to make sure that your server-side GTM is not sending the same events twice to the *same* property.

 

#9. Overlap between your GTM events and GA4 enhanced measurement

Google Analytics 4 can automatically track a bunch of events (such as outbound clicks, scrolling, etc.). However, in some situations, you might want to implement custom events (via GTM) to replace them.

For example, the built-in GA4 scroll tracking tracks only when the visitor scrolls below the 90% threshold. If you want to track other thresholds too (e.g., 25%, 50%), you will need to implement a custom solution.

If you do so, make sure to disable the same feature (scroll tracking) in Enhanced Measurement. Otherwise, you might have duplicates (one 90% event is coming from GTM and one from Enhanced Measurement).

The same principle applies to other events. If you create a “custom replacement” in GTM, then disable the related event-tracking feature in GA4.

 

#10. The visitor reloads/revisits a Thank You page

You might be firing some events on a “Thank you” page (a.k.a. order confirmation page). This means that if a visitor reloads or revisits that page, the tag will fire again.

There are several solutions here:

  • When a visitor lands on that page, you can store a cookie in visitor’s browser (e.g., “gtm_user_converted” with the value “true”). Then update your trigger not to fire if gtm_user_converted equals true. This means that the visitor will be tracked on the first page load, but subsequent page loads will be ignored.
  • If a developer pushes the event to the data layer on a Thank you page, you can either apply the previous example with the cookie or you can ask the developer to handle this in the code (if a visitor revisits the page, the dataLayer.push should not happen again).
  • If you are tracking purchases, it’s important that transaction_id is sent together with the event. If GA4 receives multiple purchase events with the same transaction_id from the same user, the duplicate will be ignored.

 

#11. Duplicate is sent via Measurement Protocol

Another possible scenario applies to organizations that use Measurement Protocol. If you are sending particular events client-side (a.k.a. from your browser), check with your developers if they are not sending the same event via Measurement Protocol.

If you are new to this topic, Measurement Protocol is a way for website developers to send data directly from their server to GA4 servers. It still requires Google Analytics 4 to be installed client-side (via gtag.js or web Google Tag Manager).

This means there is a chance that in your setup, web GTM sends a particular event, and then your website developers send the same event via Measurement Protocol. A popular scenario is for a purchase event.

If you aren’t sure if your organization uses Measurement Protocol, talk with developers. Maybe they will know something about it.

 

Still seeing duplicate events in Google Analytics 4?

If none of my suggestions in this article worked for you, let me know in the comments. Maybe you have another issue that will eventually become an additional tip in this blog post.

From my experience, the most common issues for duplicate events in Google Analytics 4 are hardcoded events vs GTM and misconfigured GTM triggers.

 

Julius Fedorovicius
In Google Analytics Tips
27 COMMENTS
Minas
  • Nov 10 2021
  • Reply

Hello,

I am struggling to measure the ecommerce purchases on GA4 because it always measures it twice (if I order one product it will see it as two). I have Google Tag Manager and the dataLayer.push() implemented on my website. I have checked and tried everything on this article but nothing works. Can someone please help me?

    Julius Fedorovicius
    • Nov 10 2021
    • Reply

    You will need to store the transaction ID in a cookie and then use it to check for duplicate transactions. If cookie already exists in a browser, don't fire the GA4 tag again. I explain this in detail in my Intermediate/Advanced GTM course https://www.analyticsmania.com/courses/intermediate-google-tag-manager-course/

Nicole
  • Dec 10 2021
  • Reply

Hi Julius!

I recently enabled GA4 on three of my websites. I created a GA4 configuration tag for GTM as I know this is a requirement for setting up any other GA4 tags. In the configuration tag I checked the box "Send a page view event when this configuration loads" as was outlined in many tutorials I watched (even one from Google). Additionally, I had page_view enabled in enhanced measurements. Fast forward 20ish days later and my pageviews are through the roof and so my bounce rate is super low (I still have Universal GA tracking too). Is the reason because duplicate pageviews were firing? I have since unchecked the "Send a page view event when this configuration loads" on the GA4 configuration tag but am unsure if this was correct or if instead I should have toggled off the enhanced measurement. Please note, I never saw duplicate events when in preview mode, which is why I was unaware of this issue. Hoping you can help!

    Julius Fedorovicius
    • Dec 21 2021
    • Reply

    It is difficult to comment without seeing the actual setup. Maybe you have some hardcoded snippets, maybe something is misconfigured in GTM, maybe something else.

    Ethan
    • May 23 2022
    • Reply

    I have this issue as well. It seems strange to me that the GA4 Config tag would send a page view when page views are already tracked by Enhanced Measurements. I have not been able to find any assistance with this exact problem, even on Google's forum. I have checked into all the other solutions presented in this article and none of them are the issue.

    Nicole, what we your results when deselecting the "Send a page view when this configuration loads?" option in the config tag?

    Anna
    • Aug 2 2022
    • Reply

    I had the same issue. Was unchecking "Send a page view event when this configuration loads" the right call?

    Fabiano Piazzarolo
    • Oct 17 2022
    • Reply

    Hi Nicole, I had the same problem with duplicate "page_view" events!! In my case I set some params to get from the data layer, and then, I realized that a configuration in Optimized Metric was triggering the duplicate page_view, through the option called "Page changes according to browsing history events" into the "page views". When I unchecked this option, the duplicity stopped. Hope this helps.

Pablo
  • May 11 2022
  • Reply

Thanks a lot Julius for this article!

The #3 was the mistake in my case.

I wasted some time figuring out how to delete the event I had created in GA4, just to realize that I had to click "Create Event" again (not very intuitive) in order to see the list of Custom Events and delete it. I hope this helps anyone who has the same problem.

    Ryann
    • Mar 2 2023
    • Reply

    This comment saved me. Thank you!

Zander Aycock
  • Sep 29 2022
  • Reply

I found a setting in GA4 > Data Streams > Choose your data stream > Configure tag settings > Click on Your Google Tag > "Ignore duplicate instances of on-page configuration (recommended)".

I realized one of my websites was tracking GA4 data, but the GA4 configuration was installed. When we created the GA4 account, we already had GA3, and it automatically connected the two using a Google Tag without us realizing it. So we had mystery pageviews firing in GA4.

After digging into the settings, I realized there's this "Ignore duplicate instances" checkbox that is recommended - yet doesn't come stock with GA4 for some reason. I think this allows me to now use GA4 configuration in GTM without worrying about duplicate pageviews.
I hope this is helpful!

    Nikki Stine
    • Apr 4 2023
    • Reply

    This may be my problem also! Thank you for posting this.

Roel
  • Dec 30 2022
  • Reply

Hi Julius,

I have issue number 3 (“Create event” feature in Google Analytics 4). Now i measure clicks double. I added the event via tag manager and also I created the event with the same name in GA4. How can I delete the created event in GA4? I can't find an option for that at all. Do you possibly have an article or information about that? Thansk!!

    Carlos Hartley
    • Jan 4 2023
    • Reply

    Hi Roel, I have the same issue were you able to solve this issue? If so can you let me know how? thanks

    Julius Fedorovicius
    • Jan 4 2023
    • Reply

    You go to GA4 admin > Events > Create events > Click the rule > and delete the rule there. This will stop future duplicate events. But already-collected events will remain in your property.

Denis
  • Jan 12 2023
  • Reply

Hello, Julius! Thank you for all you do. I'm your subscriber recently.
I've already broken my brains. Nothing from this article helped me.

In "Preview mode" I have 3 containers: UA-XXXXXXX, GTM-XXXXXXX and G-XXXXXXX
So, when I send some events from my pages, for example "purchase", I see that GTM-XXXXXXX count it correctly. But G-XXXXXXX counts everything twice, I mean everything!
-Consent Initializtion - 2 times
-Initialization - 2 times
-purchase - 2 times
-Container Loaded - 2 times
-DOM ready - 2 times
-Window Loaded - 2 times
I swear I checked everything and tried all from this article.

And the second point is that my DebugView recives such events as: gtm.init, gmt.init_consent, gtm.js, gtm.dom. I even can see report for these events. But I don't need it and I didn't see such events in your tutorials.

I wrote to GA support team, but they don't answer to me. Maybe you can help me to solve these problems?

    Denis
    • Jan 24 2023
    • Reply

    I found the reason, it was really specific. But maybe someone will need it. In Google Tag Manager for "GA4 Event Tag" I created custom trigger with RegEx "login|purchase|(all needed events)|add_to_cart|". So I made a mistake in the end of this regex, I forgot to delete last "|", so each event was sent to GA4.

K4t3
  • Jan 23 2023
  • Reply

Morning Julius,
I hope you are doing well thank if you can help me here.
I'm triggering a custom event from GTM to GA4, but I would like to use this one in reporting. Were I should create those? As Event, or under Custom Dimension? What is the impact if I'm including those in both? I believe now I have in both , and I'm seeing duplications from the debugger.

Please advise if you can
thanks

    Julius Fedorovicius
    • Jan 23 2023
    • Reply

    Neither. Just send the event with GTM and you're good to go. Event name does not require it to register anywhere in GA4

K4t3
  • Jan 23 2023
  • Reply

oh, no either if I need those in Reporting (Free form/Navigation etc..) ?
What if I want those as Goal/Conversion? They will show up anyway in Conversion section? Thanks 1000 times

    Julius Fedorovicius
    • Jan 23 2023
    • Reply

    The event will be available in your reports within 24-48 hours. If you want to treat that event as a goal/conversion, you have to register a conversion with tag event (in the admin section).

Kelly
  • Aug 18 2023
  • Reply

Hey there. I am having the double add_to_cart issue however none of my others send twice, even ones that are fired on the same page. I went through all of the possibilities in the article and am not finding any of these issues. You mentioned to comment if that was the case so here I am.

    Kelly
    • Aug 18 2023
    • Reply

    Ok I might have figured it out. looks like it's step Ignore duplicate instances of on-page configuration. We have a dev and production site. So on dev it let me turn that on and it got rid of the issue. On production it's grayed out and I can't change it. Any idea why that would be?

Xi Yang
  • Sep 22 2023
  • Reply

Hi Julius,
Thanks a lot for the article!
I have question but I didn't find answer in it: On the website the team has implemented GA4 before, and now we want to implement GTM for adding facebook pixels and other third-party snippets. We don't plan to fire Google analytics again through GTM.
In this case, do we still need to disable GA4 to avoid duplication and migrate them to GTM?

Many thanks,
Xi

Siva Chamarthy
  • Sep 27 2024
  • Reply

Hello Julius,

Really appreciate the article explaining the issues with respect to double page_views. We have salesforce experience cloud pages that use the GA4. previously we were on UA and moved to GA4. in one of teh pages, we have a navigation link ( say Inbox) and the URL changes to /s/your_inbox. In some instances, the url wont change but the additional parameters are added to the URL (SPA) behaviour. we see custom events listed Your_inbox, yourpayments etc in GA4. we are seeing double page_views within the short interval of page loads. Dont see an option to delete the event (may be down to my access). got to know from inhouse Google Analytics that we dont use Google tag Manager due to security restrictions. we cannot go with the option of unchecking the option of "page changes based on browser history events" because soem of teh navigation behaves like SPA only the parameters of the url change.. How to resolve the issue. we have been trying to resolve it from quite sometime. Please suggest..

Marie
  • Sep 27 2024
  • Reply

Hi Julius,

I also have a duplicate event similar to #5. The problem is that they both trigger on the same thing: purchase. In one data layer I see eventmodel.value and the other one says ecommerce.value. The problem I have in Google Ads is that there is almost no conversion value registration.

Could you please help. I am lost with a double conversion event and no conversion value...

Alex
  • Jan 19 2025
  • Reply

Hi Julius,

Great video, much appreciated.

I ran into an issue. I had a form submission being recorded twice and it turns out, I did the Create Event method and created the issue.
As you recommended, I deleted the Create Event.
But now instead of the event firing once, it doesn't fire at all.
I tested it in Debug in Tag Assistant, and also checked to make sure the correct tag is firing once in GTM.

I am wondering if there is some way that I can get the event to fire in GA4, or what I could have done wrong by deleting the Create Event line?

Thanks so much for your help! I watch all your videos!

Isabelle
  • Aug 19 2025
  • Reply

I recently experienced a GA4 bundle sending a form submit event to 2 GA4 properties and Gads (AW), resulting in 3x form submit events p/ 1 actual form submission.
The GA4 bundling appeared to a hard coded gtag within the source code (when viewing the "collect" under network under developer tools.
Removing the 2nd GA4 property from the bundle stopped the duplicate event tracking, can you do a video explaining the GA4 bundling, pros, cons, when to use it, when to change it and if you have to use it then what is best practice to prevent duplicate tracking?

Leave a comment Cancel reply

Your email address will not be published. Required fields are marked *


 

Hi, I'm Julius Fedorovicius and I'm here to help you learn Google Tag Manager and Google Analytics. Join thousands of other digital marketers and digital analysts in this exciting journey. Read more
Analytics Mania
  • Google Tag Manager Courses
  • Google Tag Manager Recipes
  • Google Tag Manager Resources
  • Google Tag Manager Community
  • Login to courses
Follow Analytics Mania
  • Subscribe to newsletter
Recent Posts
  • Conversion rate in Google Analytics 4
  • Google Tag Manager Data Layer Explained
  • Cross-domain tracking in Google Analytics 4
Analytics Mania - Google Tag Manager and Google Analytics Blog | Privacy Policy
Manage Cookie Settings