What is GA4 enhanced measurement?
Enhanced measurement is GA4's built-in automatic event collection for common web interactions — enabled with a toggle, no code required. There are 8 enhanced measurement event types: page views, scrolls, outbound clicks, site search, video engagement, file downloads, form interactions, and history changes. The default: all are enabled when you create a new GA4 data stream. This sounds convenient, but several of these defaults cause data quality problems: they inflate event counts, create duplicate events when you also have custom event implementations, or collect low-signal data that clutters your Events report.
Understanding each one before your first GTM implementation prevents months of data quality debt.
The 8 enhanced measurement events
1. Page views ✅ Always keep ON
Event name: page_view
What it does: Fires on every page load and (for SPAs) on URL changes detected by the History Change API.
Keep on: Yes. Page views are foundational. The SPA behaviour (firing on history state changes) may require configuration if your SPA changes URL without using the standard History API — but for most sites, this works correctly.
2. Scrolls ⚠️ Evaluate
Event name: scroll
What it does: Fires when a user scrolls to 90% of the page depth. Once per page, per session.
Potential problem: A single threshold (90%) doesn't distinguish engaged reading from accidental scrolling. A user who opens a blog post, scrolls quickly to the bottom without reading, and leaves immediately triggers a scroll event just like a user who spent 8 minutes reading the full article.
For content sites: Consider disabling and replacing with a custom article_completed event that fires at 90% scroll ONLY on article templates and only after 60+ seconds on page — a much better engagement signal.
For e-commerce and SaaS: The 90% scroll event on product pages or pricing pages is a reasonable intent signal. Keep enabled.
3. Outbound clicks ⚠️ Evaluate
Event name: click
What it does: Fires when a user clicks a link that goes to a different domain.
Potential problem: This generates extremely high event volumes. Every ad click, every footer link to a third-party, every social share icon triggers it. For high-traffic sites, click can become your highest-volume event, swamping the Events report with noise.
When to disable: If you're not actively analysing outbound click destinations, or if you have a custom outbound_click event with better parameter data (target domain, link text).
When to keep: If you want to understand which external sites your users navigate to. Add the link_url dimension in a Free Form Exploration to see the data.
4. Site search ✅ Usually keep ON
Event name: view_search_results
What it does: Fires when a URL contains a query parameter matching your search parameter name (default: q, s, search, query, keyword).
Configure: In the enhanced measurement settings, specify the exact query parameter your search uses. If your site uses ?search_term= rather than ?q=, update the parameter configuration.
Value: Site search data reveals what users can't find in navigation — a direct roadmap for content gaps and navigation improvements.
Potential problem: If your URL structure uses q= for non-search purposes (e.g., a filter parameter), this fires incorrectly. Check: Reports → Engagement → Events → view_search_results → see what search terms appear. If they look like filter values rather than search queries, update the parameter setting.
Want to see whether purchase, revenue, or item-level tracking is drifting in your property?
5. Video engagement ✅ Keep ON (if using YouTube embeds)
Events: video_start, video_progress (at 10%, 25%, 50%, 75%), video_complete
What it does: Tracks engagement with embedded YouTube videos on your site.
Works only with: YouTube iframe embeds. Does NOT work with Vimeo, Wistia, HTML5 <video> elements, or custom video players.
Potential problem: None for most sites. If you're using a custom video player with your own tracking, you'll get duplicate video events. Disable enhanced measurement video events in that case and keep only your custom implementation.
6. File downloads ✅ Keep ON for most sites
Event name: file_download
What it does: Fires when a user clicks a link to a downloadable file (PDF, docx, xlsx, zip, etc.).
Value: Direct intent signal — users downloading your product brochure, spec sheets, or case studies are in active consideration.
Potential problem: None usually. If you have a custom download tracking implementation, disable to avoid duplicates.
7. Form interactions ⚠️ Often disable
Events: form_view, form_start, form_submit
What it does: Automatically attempts to track form views, first interactions, and submissions.
The problem: Enhanced measurement form tracking is unreliable. It:
- Doesn't always correctly identify form types (can fire on search bars, newsletter forms, and contact forms identically)
- Doesn't capture
form_idconsistently across form libraries - Conflicts with custom form tracking implementations (producing duplicate events)
- On SPAs (React, Vue) — often fires incorrectly or not at all
Recommendation: Disable enhanced measurement form interactions and implement custom generate_lead events for the specific forms you care about. Custom implementation gives you accurate form_id, lead_type, and page context that enhanced measurement can't provide.
8. History changes / Virtual page views ✅ Keep ON for SPAs
Event name: page_view (additional fires triggered by URL history changes)
What it does: For single-page applications, fires page_view when the browser URL changes via the History API (pushState/replaceState).
Value: Essential for SPAs. Without this, GA4 only records the initial page load. Navigation between SPA routes is invisible.
Potential problem: If your SPA uses a router that fires history changes for non-page transitions (e.g., modal opens that update the URL hash), you may get spurious page_view events for modals. Address with a custom SPA pageview implementation that filters these out.
The duplicate event problem
The most common enhanced measurement mistake: enabling both enhanced measurement and a custom GTM implementation for the same event type.
Example: You enable enhanced measurement form interactions AND you have a GTM tag firing form_submit on your contact form. Result: every form submission triggers TWO form_submit events — one from enhanced measurement, one from GTM.
Fix: Disable the enhanced measurement toggle for any event type where you have a custom implementation. Chose one source of truth per event.
Check for duplicates: GA4 → Reports → Engagement → Events → select form_submit → check if count seems 2x higher than expected → confirm in GA4 DebugView by submitting the form once and counting how many events fire.
FAQ: GA4 Enhanced Measurement: What to Enable, What to Disable, and Why
What is the first thing to verify when ga4 enhanced measurement: what to enable, what to disable, and why affects revenue?
Should I compare GA4 only to the ecommerce platform total?
How do I keep this from breaking after the next release?
Related guides for GA4 Enhanced Measurement: What to Enable, What to Disable, and Why
Shopify GA4 Setup: Web Pixel vs theme.liquid in 2026
The 2026 best practice for Shopify GA4 is Web Pixel via Customer Events API — Shopify's sandboxed pixel system that runs GA4 in isolation, supports the Customer Privacy API for consent, fires standard e-commerce events automatically, and works on all Shopify plans (including Basic)…
Item Array Integrity: What Stops Items Reporting in GA4 (2026)
Items fail to appear in GA4 e-commerce reports when the items array is missing, malformed, or inconsistent across the funnel. Eight common bugs: (1) missing item_id (the only required field — items without it are dropped), (2) item_id mismatched between view_item and purchase (same product reports as different items)…
Audit GA4 Enhanced Measurement: What to Enable, What to Disable, and Why before revenue reporting drifts further
Run a free GA4 audit to catch purchase, refund, item-array, and attribution issues before they distort ecommerce decision-making.