Scroll depth thresholds beyond 90%
GA4 enhanced measurement fires a single scroll event when a user reaches 90% of page depth — useful but coarse. When you need finer resolution, you implement custom scroll-depth thresholds (for example 25/50/75/100%) and send your own events at each. This page covers why the built-in signal is one-shot at 90% and how to add granular thresholds without double-counting or spamming events.
What the built-in gives you
Enhanced measurement's scroll tracking fires the scroll event once, when the visitor reaches 90% of the page's vertical depth (Google Analytics Help). It is a single, automatic milestone — enough to know someone read most of a page, but not where shorter readers dropped off. For drop-off analysis you need more than one threshold.
Adding granular thresholds
To measure partial reading, compute scroll percentage on scroll (debounced) and fire a custom event the first time each chosen threshold is crossed — 25, 50, 75, 100%, for instance. Guard each threshold so it fires at most once per page view to avoid inflation, and debounce to avoid an event per pixel. Send only the threshold and page; keep it non-identifying. This complements, rather than replaces, the built-in 90% signal.
- Built-in scroll fires once at 90% depth
- Custom thresholds enable 25/50/75/100% resolution
- Fire each threshold once per page view; debounce
How it appears in analytics and logs
Only ever seeing a 90% scroll signal means you are relying on enhanced measurement; absent finer marks indicates no custom thresholds are instrumented.
Diagnostic use case
Get scroll resolution finer than the built-in 90% mark by firing custom events at chosen thresholds (e.g. 25/50/75%), each at most once per page view.
What WebmasterID can help detect
WebmasterID can record scroll-depth milestones as first-party custom events at thresholds you choose, without cookies or per-visitor identity.
Common mistakes
- Firing a threshold repeatedly and inflating counts.
- Not debouncing, sending an event per scroll tick.
- Duplicating the 90% built-in signal with a custom 90% event.
Privacy and accuracy notes
Scroll-depth events carry a percentage and page context, not identity. Keep the threshold and page as the only parameters and avoid anything identifying.
Related pages
- The scroll event and depth tracking
A scroll event records that a visitor scrolled to a depth on the page. In GA4 enhanced measurement, a single scroll event fires once per page when the visitor reaches 90% of the page height. It is a coarse engagement signal — useful for spotting content people do not reach, but limited because the default is one threshold, not a continuous read-depth curve.
- Enhanced measurement (auto events)
Enhanced measurement is a GA4 setting that automatically collects a set of interaction events — scrolls, outbound clicks, site search, video engagement, file downloads, and form interactions — without extra code. It is convenient but not magic: it only covers standard patterns, can over- or under-count, and each option can be toggled. This page explains what it does and its limits.
- Engagement time and the user_engagement event
Engagement time measures how long a page was actually in the foreground and active, recorded through GA4's user_engagement event. It replaces the old, unreliable time-on-page that could not measure the last page of a visit. By only counting time when the tab is visible and focused, engagement time is a more honest attention signal — though still not a guarantee that anyone read anything.
- Event Explorer
Track granular scroll milestones.
Sources and verification notes
Last reviewed 2026-06-24. Facts are checked against primary/official sources where available; uncertain specifics are marked “Data not yet verified” rather than guessed.