GA4 shows real traffic, Realtime looks active, everything seems fine — but if it's only ever measuring the very first page a visitor lands on, most of their actual browsing may be invisible.
GA4's default page-view tracking assumes a new page load means a new browser navigation — a full reload that re-runs the page's scripts, including the GA4 tag. Single-page apps (typical of React, Vue, and Angular sites) deliberately avoid full reloads: clicking an internal link swaps content on the existing page via JavaScript, without the browser ever reloading.
If the GA4 tag was only ever configured to fire once, on that initial full load, every subsequent "page" a visitor navigates to within the app produces no new hit at all. GA4 keeps showing sessions and an entry page — it just never sees anything after that.
Because GA4 does show data — real sessions, a real entry page, real user counts — everything looks like it's working from a glance at the dashboard. The gap only shows up when you look closely at what's being measured after that first page, which most people don't do until something else prompts a closer look (like conversion numbers not adding up).
gtag('config', ..., { page_path: newPath }) on each route changeWe test exactly this — clicking through and checking for a new GA4 hit — as part of every audit.
Run a free check on your own site →