How to Track Scroll Depth in GA4 (Step by Step)

How to Track Scroll Depth in GA4 (Step by Step)
GA4 scroll-depth tracking: browser article with 25/50/75 percent scroll markers

This guide covers scroll depth tracking — how to measure how far visitors actually read down your pages. It is one of the most useful signals for content sites, yet most setups either ignore it or implement it wrong. We will focus on implementation and validation, not theory.

If you are new to web analytics, this guide will give you a working setup you can trust. If you already track conversions, scroll depth fills an important gap: it tells you whether people engage with content before they convert — or leave.

TL;DR – Quick Summary
  • Scroll depth tracking measures how far down a page a user scrolls, usually reported as 25%, 50%, 75%, and 90% milestones
  • GA4’s Enhanced Measurement tracks a single 90% scroll event automatically — useful, but limited to one threshold
  • For multiple thresholds, configure a custom GTM scroll trigger and send a GA4 event with a percentage parameter
  • Always validate in GTM Preview and GA4 DebugView before trusting the numbers
  • Scroll depth is a behavioral signal, not a goal — pair it with reading time and conversions for context

What Is Scroll Depth Tracking?

Scroll depth tracking records how far down a page a visitor scrolls. Instead of guessing whether people read your content, you get measurable thresholds: how many reached 25% of the page, 50%, 75%, and so on.

This matters because a pageview tells you someone opened a page. It says nothing about whether they engaged. A visitor who loads an article and bounces in two seconds looks identical to one who read the whole thing — unless you measure scrolling.

Person monitoring user scroll behavior and engagement stats on a laptop
Scroll depth turns a vague “did they read it?” into measurable thresholds

When You Actually Need It

Scroll depth is not equally valuable on every page. Use this as a quick decision guide:

  • Long-form content (articles, guides, documentation) — high value. Did readers reach your call to action at the bottom?
  • Long landing pages — high value. Are people seeing the pricing or signup section below the fold?
  • Short pages (contact, login, simple forms) — low value. Everything fits on one screen, so scrolling tells you little.

Scroll depth pairs naturally with reading time. If most readers reach 90% but spend only ten seconds on the page, they are skimming, not reading. One metric without the other can mislead you.

Option 1: GA4 Enhanced Measurement (the easy way)

GA4 can track scrolling automatically. Enhanced Measurement includes a scroll event that fires once when a user reaches 90% of the page height.

  1. In GA4, open Admin → Data Streams and select your web stream.
  2. Click Enhanced Measurement.
  3. Make sure Scrolls is toggled on.

That is the entire setup. The trade-off is that you only get one threshold: 90%. You cannot see who reached 25%, 50%, or 75%. For many sites, the single 90% signal is enough. If you need more granularity, move to Option 2.

The built-in event is named scroll with a percent_scrolled parameter set to 90. If you later add a custom multi-threshold setup, use a different event name to avoid double-counting.

Option 2: Multiple Thresholds with Google Tag Manager

If you want 25/50/75/90 milestones, configure a custom scroll setup in GTM. The work is in four parts: a trigger, a variable, a tag, and verification.

Step 1 — Create the Scroll Depth trigger

  1. In GTM, go to Triggers → New.
  2. Choose Scroll Depth as the trigger type.
  3. Enable Vertical Scroll Depths and enter 25, 50, 75, 90 as percentages.
  4. Set the trigger to fire on the pages you care about (for example, only blog posts).
  5. Name it clearly, such as Scroll – Article Thresholds, and save.

Step 2 — Expose the built-in scroll variable

  1. Go to Variables → Configure.
  2. Enable Scroll Depth Threshold. This holds the percentage that triggered the event (25, 50, 75, or 90).

Step 3 — Send a GA4 event

Create a GA4 Event tag that fires on the trigger from Step 1 and passes the threshold as a parameter:

// GA4 Event tag configuration (conceptual)
Event name:  scroll_depth
Parameters:
  percent_scrolled = {{Scroll Depth Threshold}}
  page_path        = {{Page Path}}

Trigger: Scroll - Article Thresholds

If you prefer to push to the data layer yourself instead of relying on the built-in trigger, the pattern looks like this:

// Manual dataLayer push when a threshold is crossed
dataLayer.push({
  event: 'scroll_depth',
  percent_scrolled: 50,
  page_path: location.pathname
});

If you want percent_scrolled to appear as a usable dimension in reports, register it as a custom dimension in GA4 (Admin → Custom definitions). Without that, the parameter is collected but harder to break down in standard reports.

Debugging: Don’t Assume It Works

Scroll tracking breaks quietly. Test it before you trust it.

  1. GTM Preview mode. Open Preview, load a long page, and scroll slowly. You should see the Scroll Depth trigger fire at each threshold.
  2. GA4 DebugView. Confirm the scroll_depth event arrives with the correct percent_scrolled value.
  3. Check for duplicates. Each threshold should fire once per pageview, not repeatedly.

If thresholds never fire, the page may not be tall enough to scroll, or a sticky layout may be intercepting scroll events. Test on a page you know is long, in a normal browser window — not a maximized 4K monitor where everything fits above the fold.

Common Mistakes

  • Tracking scroll on every page. It adds noise on short pages. Scope the trigger to content pages.
  • Running both Enhanced Measurement and a custom setup with the same event name. This double-counts. Use distinct names.
  • Treating scroll depth as a goal. It is a behavioral signal. Reaching 90% is not a conversion by itself.
  • Ignoring page-height differences. A 25% threshold on a short page and a long page mean very different amounts of reading.

Wrap-Up

Scroll depth tracking is simple to set up and easy to validate. Start with Enhanced Measurement for a quick 90% signal. If you need finer detail, configure a GTM Scroll Depth trigger with 25/50/75/90 thresholds and send a custom GA4 event. Then verify in Preview and DebugView. Used alongside reading time and conversions, scroll depth tells you whether your content actually holds attention.

Frequently Asked Questions

Does GA4 track scroll depth by default?

Partly. Enhanced Measurement fires a single scroll event at 90% of the page. It does not record 25%, 50%, or 75% unless you build a custom setup in Google Tag Manager.

What scroll thresholds should I track?

For most content sites, 25/50/75/90 is a sensible default. It is enough to see drop-off without flooding your reports with events. Avoid tracking every single percentage point.

Is scroll depth the same as reading time?

No. Scroll depth measures distance down the page; reading time measures duration. A user can scroll to the bottom instantly without reading. Use both together to tell skimming apart from genuine engagement.

Why are my scroll events not firing in GA4?

The most common causes are a page too short to scroll, a trigger scoped to the wrong pages, or a tag that is not actually attached to the scroll trigger. Test in GTM Preview first, then confirm the event reaches GA4 DebugView.

Julius
Written by

Julius

Web Analytics Consultant

I help businesses understand their data through proper analytics implementation. With years of experience in Google Analytics, Tag Manager, and tracking solutions, I write practical guides that focus on real-world implementation.

Need Help With Your Analytics Setup?

Whether you are implementing GA4, setting up consent management, or building custom tracking solutions, I can help you get it right the first time.