The symptom
Your GA4 numbers look too good: page views roughly double what your server logs or other tools suggest, sessions with two page_view events, engagement rates that make no sense, or conversion counts that don’t match your order count.
The usual cause is that the same GA4 measurement ID (G-XXXXXXX) is initialized more than once on the page. Each initialization sends its own hits, so everything doubles.
The classic WordPress case
Almost every duplicate GA4 setup on WordPress is some version of the same story: GA4 is configured both directly and through Google Tag Manager.
Common combinations:
- A GA4 tag inside your GTM container plus a plugin (Site Kit, an SEO plugin’s analytics module, a theme option) that also outputs a gtag snippet for the same ID.
- A gtag snippet hard-coded in the theme’s
header.phpfrom years ago plus a newer GTM-based setup. - Two plugins that each output GA4, often after a migration or an agency handover.
- The GTM container itself containing both a Google Tag and a legacy GA4 Configuration tag for the same ID, both firing on all pages.
How to find the duplicate
- Open your site in a private/incognito window with a network inspector (DevTools → Network, filter on
collect). - Load one page and count the
page_viewrequests going togoogle-analytics.com/g/collect(or your first-party endpoint if you run server-side tagging). Twopage_viewhits for one page load confirms the duplicate. - View the page source and search for your measurement ID and for
gtag(. Every occurrence outside the GTM container script is a separate initialization. - In GTM, check that exactly one Google Tag exists for the ID and that no additional GA4 Configuration tag fires alongside it.
- GA4’s DebugView (Admin → DebugView, with debug mode enabled) shows the duplicated
page_viewevents in real time.
The fix
Pick one integration path and remove the others:
- If you use Google Tag Manager (recommended with GTM Kit): GA4 lives as a Google Tag inside the container. Disable every plugin- or theme-level GA4 output. In Site Kit, disconnect the Analytics module or set it to “already inserted by another plugin” where available.
- If you use a direct gtag snippet: remove the GA4 tag from your GTM container instead. Do not run both.
After removing the duplicate, verify: one page_view per page load in the network inspector, and one event per page in DebugView.
Check the rest of your setup
A duplicate GA4 config rarely travels alone. Run a Tracking Health Check to see your full tag inventory (including duplicate GTM containers, cookie lifetimes, and consent mode wiring) in one report.