← All posts

Page views counted twice: the duplicate page_view in GA4

When two sources send the same page_view, GA4 doubles views and events while traffic stays flat. How to find the second source and remove it.

Step 1 of 5 In the browser's Network tab, a single page load sends these requests to GA4.
  1. In the browser's Network tab, a single page load sends these requests to GA4.
  2. Two of them are the same page_view: GA4 logs two views where there was only one.
  3. The cause: two sources send the event, gtag.js in the code and the Google tag in GTM.
  4. The fix: keep a single source of page_view and remove the other one.
  5. Check it in DebugView and in the Network tab: one page_view per page load.

A duplicate page_view is one of the easiest mistakes to miss, because it doesn’t break anything visible: reports keep showing data that looks consistent. What changes are the ratios. Views per session go up, pages per user inflate and, if the duplication also hits ecommerce events, revenue stops adding up.

What a duplicate page_view looks like

A single page load produces two requests to GA4 with en=page_view. GA4 has no way of knowing they are the same event, so it logs two views. Sessions and users don’t change, because they are calculated from other identifiers; that is why the clearest symptom is a jump in views per session with no matching change in traffic.

Why GA4 receives the page_view twice

Two sources are sending the same event. The most frequent combinations:

  • gtag.js in the code and the Google tag in GTM. Typical after a migration to Tag Manager where nobody removed the original snippet, or when a CMS plugin adds its own gtag.js.
  • Two GTM containers, each with a Google tag pointing to the same measurement ID.
  • Single-page applications (SPAs). Enhanced measurement sends a page_view on every browser history change and on top of that, the developers push a manual page_view on the same route change.

How to find the duplicate page_view

  1. Open the developer tools, go to Network and filter by collect. Load the page once and count the requests with en=page_view.
  2. In DebugView, browse a few pages and check whether each view shows up once or twice.
  3. Search the page source for gtag/js?id= and googletagmanager.com/gtm.js: if both appear, or two containers do, you have the likely cause.
  4. In the reports, look at views per session over time: a sudden jump that coincides with a release is a very reliable clue.

How to remove the second page_view source

Pick one source of page_view and remove the other:

  • If you work with GTM, remove the gtag.js snippet from the code (or turn off the plugin integration).
  • In an SPA, choose between history-based enhanced measurement and the manual event. If you keep the manual one, turn off Page changes based on browser history events in the web stream’s enhanced measurement settings.
  • If you must keep gtag.js for another reason, configure it with send_page_view: false so it doesn’t send the view on its own.

Google’s documentation: Enhanced measurement events.

How to check there is one page_view per load

  • In the Network tab, one page load must produce exactly one request with en=page_view.
  • In DebugView, each navigation must show a single page_view, including SPA route changes.
  • Over the following days, views per session should return to the level they had before the problem. Data already duplicated isn’t corrected: if you compare periods, note the date of the change.