Enhanced measurement in Google Analytics 4

Updated: Sunday, January 4, 2026

What are the Enhanced Measurement in Google Analytics 4?

In Google Analytics 4, enhanced measurements are a set of features that automatically collect several types of interactions as soon as GA4 is installed on your website. No need to touch code or configure events in Google Tag Manager. In theory, this would seem to make Google Analytics a turnkey solution, but we’ll see in this article that this is far from the case.

In concrete terms, when you create a web data stream in GA4, enhanced measurements are enabled by default. To access them, go to Admin > Data Stream, select your web data stream, and you’ll see the dedicated section.

Attention

In the world of tracking, any automatic operation should be taken with a grain of salt. Enhanced measurements are easy to set up, but this solution has its limits and may not meet your requirements/needs.

Enhanced measurements when creating a web data stream
Enhanced measurements when creating a web data stream in GA4

Automatically collected events

When enhanced measurements are enabled (which they are by default), GA4 immediately starts tracking the following 7 types of interactions:

  • Page views (page_view)
  • Scroll beyond 90% of the page (scroll)
  • Outbound clicks to other domains (click with outbound set to true)
  • Internal searches (view_search_results)
  • YouTube video engagement (video_start, video_progress, video_complete)
  • File downloads (file_download)
  • Form interactions (form_start, form_submit)

Each event can be managed individually.

You can keep the ones you want and disable the others. This flexibility allows you to tailor your data collection to your needs.

Good to know

Beyond enhanced measurements, GA4 also collects 3 distinct automatic events that are also important to know about:

  • first_visit on a user’s very first visit (created automatically by GA4 when the _fv parameter is present in the page_view event)
  • session_start for each new session (automatically created by GA4 when the _ss parameter is present in the page_view event)
  • user_engagement which is triggered after certain actions. It contains the engagement_time_msec parameter indicating the user’s engagement time in milliseconds.

Recap table of recommendations

EventsGA4 parameters usedRecommendation
page_viewpage_location page_referrer page_title language screen_resolutionMandatory (can be disabled with send_page_view set to false in Google Tag for SPAs)
scrollpercent_scrolled⚠️ Disable (short pages = too many events, no 25/50/75% granularity => use GTM)
clicklink_id link_classes link_url link_domain outboundKeep (works correctly)
view_search_resultssearch_termKeep (may require additional configuration)
video_start video_progress video_completevideo_current_time video_duration video_percent video_provider video_title video_url visibleDisable (requires enablejsapi=1 and iframe_api, unreliable => use GTM)
file_downloadfile_extension file_name link_text link_url link_id link_classesKeep (fixed but sufficient list of extensions)
form_start form_submitform_id form_destination form_length first_field_id first_field_name first_field_typeDisable (imprecise, false positives => use GTM)

Page views

The page_view event is triggered each time a page is loaded. This is by far the most important event to set up to obtain quality data in GA4.

Unlike other enhanced measurement events, it is not possible to disable page_view from the GA4 interface. It is an integral part of the measurement system.

Each page view automatically transmits essential contextual information: browser language, full page URL, visitor’s original page, page title and screen resolution. This data accompanies all GA4 events, not just page views.

The Google Tag contains a parameter that controls the automatic sending of page views. In certain specific cases (notably for Single Page Applications), you can disable this automatic sending by setting send_page_view to false, then manage page views manually via a dedicated event tag.

Page views in Single Page Applications (SPA)

Single page applications (often coded with React, Angular, Vue or NextJS) pose a particular challenge: the URL changes without the page actually reloading. GA4 attempts to handle this case by tracking history changes through the gtm.historyChange-v2 event, but this remains an automatic operation that you should test to make sure it meets your expectations and needs.

If this is not the case, you can manually listen for history changes using the History Change trigger in Google Tag Manager.

Scrolling

GA4 automatically registers when a visitor scrolls beyond 90% of the page height.

GA4 parameters used

ParameterDescriptionAvailable custom reportAvailable exploration
percent_scrolledScroll depth

Limitations to be aware of

If your page is short in height, the scroll event will be triggered very often, which can affect the quality of your analysis in GA4. Also, enhanced measurements don’t offer a more granular view of thresholds at 25, 50 and 75% scroll.

Solution

For more precise scroll tracking, I recommend that you manually configure scroll tracking with Google Tag Manager by following my dedicated guide.

Scroll tracking with GTM and Google Analytics

Track scroll manually from Google Tag Manager with my dedicated article on the subject

Outbound clicks

An outbound click occurs when a visitor clicks on a link that takes them to a domain other than your own. GA4 automatically registers these interactions via an event named simply click, distinguished by an outbound parameter with the value true.

GA4 parameters used

ParameterDescriptionAvailable custom reportAvailable exploration
link_idValue of id attribute of link
link_classesValue of class attribute of link
link_urlhref attribute value for link
link_domainLink domain
outboundtrue if link is outbound
<a id="outbound-link" class="bg-dark color-blue" href="https://www.example.com" target="_blank">Go to example.com</a>
<!--
link_id -> outbound-link
link_classes -> bg-dark color-blue
link_url -> https://www.example.com
link_domain -> www.example.com
outbound -> true
-->

Solution

You can keep outbound clicks enabled, as it works fine. However, if you want to go further in your analysis, I recommend that you manually configure click tracking with Google Tag Manager.

Tracking clicks with Google Tag Manager and GA4

Track clicks manually with GTM and GA4

GA4 automatically detects when a user performs a search on your site with the view_search_results event by analyzing query parameters.

Default query parameters supported

Query parameterExample
qhttps://example.com/recherche?q=chaussures
shttps://example.com/recherche?s=chaussures
searchhttps://example.com/recherche?search=chaussures
queryhttps://example.com/recherche?query=chaussures
keywordhttps://example.com/recherche?keyword=chaussures

If your search URL looks like example.com/search?q=shoes, GA4 will automatically capture the term “shoes”.

Did you know?

Let’s imagine that on your site, the search is done with the term parameter like this example.com/search?term=shoes.

As term is not one of the query parameters listened to by GA4 by default, you can add it to the list in the enhanced measurement settings.

In all, 10 different parameters can be used.

Add term parameter to detect site search
Add term parameter to detect site search

GA4 parameters used

ParameterDescriptionAvailable custom reportAvailable exploration
search_termSearch term

Video engagement

If you embed YouTube videos on your site, GA4 can track the following interactions automatically under certain conditions:

  • start viewing (video_start)
  • progress over 10, 25, 50 and 75% (video_progress)
  • complete viewing (video_complete)

GA4 parameters used

ParameterDescriptionCustom report availableExploration available
video_current_timeCurrent time in video
video_durationTotal time in video
video_percentCurrent time / total time * 100
video_provideryoutube every time
video_titleVideo title
video_urlVideo URL
visibletrue if the video is in the viewport

Example of an embedded YouTube video

<script src="https://www.youtube.com/iframe_api"></script>
<iframe width="560" height="315" src="https://www.youtube.com/embed/nS8HLdwmVlY?enablejsapi=1"></iframe>

<!--
video_current_time -> 210
video_duration -> 517
video_percent -> 40
video_provider -> youtube
video_title -> Google Analytics MCP Setup Tutorial
video_url -> https://www.youtube.com/watch?v=nS8HLdwmVlY
visible -> true
-->

Limitations to be aware of

This feature requires that the YouTube iframe on your site contains a specific parameter (?enablejsapi=1) in its URL and that the iframe API is enabled (iframe_api). These conditions are not always met by default and require additional action on your part.

For more technical profiles

Automatic tracking of YouTube videos will not work if:

  • window.YT is set to undefined, and
  • the iframe URL does not contain enablejsapi=1.

Solution

The best thing to do here is to manually configure Google Tag Manager to track your YouTube (or other) videos.

Tracking YouTube videos with Google Tag Manager and GA4

Track YouTube videos manually via my dedicated article

Track Vimeo videos with Google Tag Manager and GA4

If you use Vimeo, take a look at my listener

File downloads

As soon as a visitor clicks on a link to a downloadable file, GA4 records the action via the file_download event.

Supported extensions

ExtensionDescription
pdfPortable Document Format
docMicrosoft Word (Legacy)
docxMicrosoft Word (Modern)
txtPlain Text File
rtfRich Text Format
xlsMicrosoft Excel (Legacy)
xlsxMicrosoft Excel (Modern)
csvComma-Separated Values
ppsPowerPoint Show (Legacy)
pptPowerPoint Presentation (Legacy)
pptxPowerPoint Presentation (Modern)
keyApple Keynote
zipZIP Archive
rarRAR Archive
7z7-Zip Archive
gzGZIP Compressed
pkgPackage File
exeWindows Executable
mp3MP3 Audio
wavWAV Audio
wmaWindows Media Audio
midMIDI Audio (Short)
midiMIDI Audio
mp4MPEG-4 Video
aviAudio Video Interleave
movQuickTime Video
mpegMPEG Video
mpgMPEG Video (Short)
wmvWindows Media Video

GA4 parameters used

ParameterAssociated valueAvailable custom reportAvailable exploration
file_extensionFile extension
file_nameFile name
link_classesValue of class attribute of clicked link
link_idid attribute value of clicked link
link_textText of link present between a tags
link_urlValue of id attribute of clicked link
<a href="./files/doc.pdf" download="document.pdf" id="dl_link" class="bg-black color-white">Download file</a>

<!--
file_extension -> pdf
file_name -> /files/doc.pdf
link_classes -> (empty) no value comes up in my test
link_id -> dl_link
link_text -> Download file
link_url -> https://example.com/files/doc.pdf

Document name when downloaded by visitor: document.pdf
-->

Limitations to be aware of

The list of supported extensions is fixed. You cannot enrich it via the GA4 interface. If you distribute .jpg or .png files, for example, they won’t be counted automatically.

Solution

File downloads work correctly. You can keep this enhanced measurement enabled.

Using Google Tag Manager, you can create a custom trigger that detects missing extensions.

Form interactions

GA4 promises to track forms automatically with the following events:

  • form_start when a user starts filling in a field
  • form_submit when the form is submitted.

GA4 parameters used

ParameterDescriptionAvailable custom reportAvailable exploration
form_destinationform destination URL
form_idForm identifier (id attribute of HTML form tag)
form_lengthNumber of fields present in the form (including the submit field)
first_field_idAttribute id of the first field to be filled in
first_field_nameAttribute name of the first field to be filled in
first_field_typeAttribute type of the first field to be filled in

Limitations to be aware of

I wouldn’t recommend using this feature, as it’s too imprecise. Very few forms are supported and when they are, there can be false positives in the submissions detected.

Also, you’ll need to create custom dimensions to exploit form-related parameters in your GA4 reports or explorations.

Solution

To track your forms, I advise you to follow dedicated tutorials depending on the form you’re using.

Tracking Elementor forms

Complete guide to tracking Elementor forms

Tracking Hubspot forms

Complete guide to tracking Hubspot forms

Tracking Webflow forms

Complete guide to tracking Webflow forms

Tracking forms

General guide to tracking forms

Lessons learned

I generally disable GA4’s enhanced measurement completely on customer projects for several reasons:

  • Lack of flexibility: enhanced measurement is too rigid.
  • Data quality: automatically collected data may lack precision.
  • Automatic behaviour: I prefer to have total control over what is tracked.

However, if you’re new to GA4 and don’t have the resources for a custom setup, the enhanced measurement may be a good place to start. They offer basic data collection without extra effort.

Let's talk about your tracking

A question about this article, need an audit of your setup or server-side migration? Drop me a line, I reply within 24h.