Someone Visited Your Website. How Much They Actually Saw Is Another Story.
Picture this. A kid has an exam the next day covering five chapters. That night, the parent checks in on them. Light's on. Textbook open. Notes scattered across the desk. Classic study session. The parent's satisfied and goes to bed.
The kid actually read chapter one and got halfway through chapter two. Then got distracted. The textbook stayed open on the desk.
Exam day: three of the five questions come from chapters three, four, and five. Blanks.
The parent had one data point: studying was happening. They had no idea which chapter it stopped at.
Your website has exactly the same problem.
When someone visits a page on your site, your analytics tool records that a visit happened. It may even record how many seconds the tab was open. What it doesn't record is how much of the page that visitor actually scrolled through before they left.
Your case study might be in the bottom third of the page. Your pricing might be halfway down. Your call to action might be near the bottom. If your visitors are leaving before they get there, you have no way of knowing - not from the data most teams are looking at.
Scroll depth tracking is what tells you which chapter they stopped at.
Why the Metrics You're Already Tracking Don't Show You If Your Content Was Read
Most websites track a handful of standard numbers: how many people visited, how long they stayed, whether they bounced. These numbers feel like engagement data. They're not. They're arrival data.
Here's what each one actually measures:
Sessions and pageviews tell you someone opened your page. They say nothing about what happened after the page loaded.
Bounce rate tells you whether someone left without clicking to another page on your site. A visitor can read your entire page, decide it's not for them, and close the tab. That's a bounce. So is a visitor who opened the page, glanced at the headline, and left immediately. The metric treats both identically.
Engagement rate - a metric Google introduced in its current analytics tool (Google Analytics 4) to replace bounce rate - classifies a session as "engaged" if the visitor spent more than 10 seconds on the page, triggered two or more page views, or completed a specific action (GA4 Engagement Rate, Google Support). A visitor who scrolled 20% of your page and left after 15 seconds qualifies as engaged. Your analytics says the session was a success. The visitor never saw your offer.
Time on page sounds like the most useful signal of the three, but it has a structural problem. Analytics tools measure time on a page by recording when the visitor left for the next page. If they close the tab or navigate away to a different website, there's no final timestamp to record. The result: the time measured for the last page a visitor views in any session is always zero, and the overall average is distorted accordingly. Avinash Kaushik, Google's former Digital Marketing Evangelist, has called this metric fundamentally unreliable for this reason. A visitor who scrolled 15% of your page and left their tab open for four minutes while they made coffee looks identical in your data to someone who read every word.
Beyond the technical problems, the reading behavior research makes this worse. Nielsen Norman Group found that on the average web page, users read at most 28% of the words - 20% is more realistic. 79% of users scan pages rather than read them top to bottom. The time-on-page number you're looking at is built on a foundation of tabs left open and content skimmed in seconds.
For B2B businesses in particular, this is a costly blind spot. Your main selling point (value proposition), your evidence, examples that back up your claims, your social proof (testimonials, reviews, client logos), and your call to action typically live in the bottom half of any page. If visitors aren't reaching them, the conversion (a conversion is when a visitor does what the page is designed to get them to do - fill a form, book a call, make a purchase) never had a chance - and your analytics is actively hiding that from you.
Most B2B website redesigns try to fix the wrong thing - because the data teams are looking at doesn't show them where the real problem is. Check → Why B2B Website Redesigns Fail.
Before you rewrite your copy, redesign your layout, or change your call to action, you need to know whether those elements are even being seen. Traffic is arriving, but the page isn't being read far enough to do its job. (This is what we call a demand leak at the content layer.)
What Is Scroll Depth and What Does It Actually Tell You?
Scroll depth tracking measures how far down a page a visitor scrolled, expressed as a percentage. The most useful way to set it up is with milestones - 25%, 50%, 75%, and 90% - each representing a zone of the page.
- Reaching 25% means the visitor went just past the opening section.
- Reaching 50% means they saw the middle of the page.
- Reaching 75% means they consumed most of it.
- Reaching 90% means they got through nearly everything.
- Not reaching 25% means they left before seeing anything past the first screen.
This makes scroll depth a diagnostic tool, not just another engagement number. It doesn't tell you whether engagement was "high" or "low" - it tells you exactly where on the page your visitors stopped reading.
Here's what that looks like with real data.
One of our clients was running paid ads on Meta (Facebook and Instagram) to a landing page. In one month, that page received 532 visitors. Scroll depth data showed that only 4.7% of those visitors reached 90% of the page. There were three conversions.
We shifted the budget to Google Search - same landing page, same offer, no changes. 366 visitors came in over three weeks. 57% of them reached 90% scroll. Twenty conversions.
The difference wasn't the page. It was whether the visitors who arrived were ready to read it. The problem was where the visitors were coming from (channel-intent mismatch) - not the copy, not the design, not the call to action. Read the full breakdown here →
Scroll depth was what made that visible. Without it, the instinct would have been to redesign the page.
How to Set Up Scroll Depth Tracking - Step by Step (No Developer Needed)
This setup uses two free tools from Google: Google Tag Manager and Google Analytics 4.
Google Analytics 4 (usually shortened to GA4) is the analytics tool that tracks who visits your website and what they do. Google Tag Manager (GTM) is a separate tool that acts as a control panel - it sits between your website and your analytics, and lets you set up tracking instructions without touching your website's code directly. That last part matters: this entire setup can be done without a developer.
You'll need editor access to both tools before you start. If you're not sure whether you have this, ask the person who manages your website or your marketing tools.
Prerequisites: GTM is installed on your website and connected to your GA4 property. You have editor access to both.
Step 1 - Tell GTM to Start Paying Attention to Scroll Behaviour
Before GTM can capture scroll data, you need to switch on the built-in variables that record it.
- In GTM, click Variables in the left sidebar.
- At the top of the page, in the section called Built-In Variables, click the Configure button (top right of that section).
- A panel slides out. Scroll down to the Scrolling section and check the boxes next to these three items exactly as labelled:
- Scroll Depth Threshold
- Scroll Depth Units
- Scroll Direction
These are not new features you're adding - they already exist inside GTM. You're just switching them on so they're available to use in the next steps.
Step 2 - Create an Instruction for When to Record a Scroll
Now you need to tell GTM: "Every time a visitor hits the 25%, 50%, 75%, or 90% mark on any page, do something." In GTM, this kind of instruction is called a trigger.
- Click Triggers in the left sidebar.
- Click the New button (top right).
- Click anywhere in the Trigger Configuration box to open the type selector.
- In the panel that slides out, scroll to the User Engagement section and click Scroll Depth.
- In the settings that appear:
- Check the box for Vertical Scroll Depths.
- Leave the option on Percentages (not Pixels).
- In the input field, type:
25, 50, 75, 90 - Leave This trigger fires on set to All Pages.
- Name your trigger at the top left - something like "Trigger - Scroll Depth" - then click Save.
Step 3 - Create an Instruction for What to Send to Your Analytics
Now you need to tell GTM what to actually do when that trigger fires: send a signal to GA4 with the scroll percentage. In GTM, the instruction for what to send is called a tag.
- Click Tags in the left sidebar.
- Click the New button.
- Click anywhere in the Tag Configuration box.
- In the panel, click Google Analytics, then Google Analytics: GA4 Event.
- Fill in the fields:
- Measurement ID: Enter your GA4 Measurement ID. This is a code that looks like
G-XXXXXXXXXX. You'll find it in your GA4 account under Admin → Data Streams → your website stream. - Event Name: Type exactly
scroll_depth_percentage(all lowercase). The exact name is your choice, but whatever you type here is the name you'll filter on when you build the report later - so keep it consistent. - Click Event Parameters, then Add Parameter.
- In the Event Parameter field, type exactly:
percent_scrolled - In the Value field, click the small icon that looks like building blocks and select Scroll Depth Threshold from the list. (This pulls in the number - 25, 50, 75, or 90 - automatically.)
- Measurement ID: Enter your GA4 Measurement ID. This is a code that looks like
- Scroll down to the Triggering box. Click it and select the trigger you created in Step 2.
- Name your tag at the top left - something like "GA4 - Event - Scroll Depth" - then click Save.
Step 4 - Turn Off GA4's Built-In Scroll Tracking
GA4 has its own built-in scroll tracking. By default, it records one signal when a visitor scrolls past 90% of a page. The problem is that if you leave this on alongside the custom tracking you just set up, your data will count that 90% milestone twice. You need to turn it off.
- Go to your GA4 account.
- Click the gear icon labelled Admin at the bottom left.
- Under Data collection and modification, click Data streams.
- Click on your website's data stream.
- In the stream details, find the Enhanced measurement section and click the gear icon (⚙️) on the right side of that panel.
- A panel opens. Find the row labelled Scrolls and click the blue toggle next to it to turn it off. It will turn grey.
- Click Save at the top right.
Step 5 - Test It Before Making It Live
Never publish tracking changes without testing them first. GTM has a built-in testing mode called Preview, and GA4 has a real-time testing view called DebugView.
In GTM:
- Click the Preview button at the top right of the GTM workspace.
- A new tab opens with a tool called Tag Assistant. Enter your website URL and click Connect.
- Open your website in the new tab that appears and scroll past each of the four milestones.
- Switch back to Tag Assistant. In the left column, you should see events called Scroll Depth appearing as you hit each threshold. Click one - your GA4 tag should appear under Tags Fired.
Step 6 - Publish
Once everything looks correct in testing:
- Go back to your GTM workspace.
- Click the blue Submit button at the top right.
- On the screen that appears, leave the setting on Publish and Create Version.
- Give this version a name in the Version Name field - for example, "Added Custom Scroll Tracking."
- Click the blue Publish button.
Your scroll tracking is now live. It will begin collecting data immediately, though it usually takes 24 to 48 hours for events to appear in GA4's standard reports.
How to See Your Scroll Depth Data in GA4
Once your tracking is live and collecting data, you need a place to actually read it. GA4's standard reports won't show this data in a useful format. You need to build a custom report - GA4 calls these Explorations - to see the scroll milestones in a table.
There's one setup step required before you build the report.
First: Register Percent Scrolled as a Custom Dimension
GA4 collects the percent_scrolled value you set up in GTM, but it won't let you use it in custom reports until you tell it to. This is a one-time step.
- In GA4, click Admin (gear icon, bottom left).
- Under Data display, click Custom definitions.
- Make sure you're on the Custom dimensions tab, then click Create custom dimensions (top right).
- Fill in the fields:
- Dimension name: Percent Scrolled
- Scope: Event (leave as default)
- Event parameter:
percent_scrolled(type this exactly as written)
- Click Save.
Note: it can take 24 to 48 hours for this dimension to start showing data, but you can build the report now while you wait.
Then: Build the Exploration
- In the left sidebar, click Explore (the icon that looks like a graph with an arrow).
- Under "Start a new exploration," click the Blank template (the one with the plus sign).
- You'll see two columns on the left: Variables and Tab Settings.
Import your dimensions and metrics (Variables column):
- Click the + next to DIMENSIONS.
- Search for Event name and check the box.
- Search for Percent Scrolled and check the box.
- Click Import.
- Click the + next to METRICS.
- Search for Active users and check the box.
- Search for Event count and check the box.
- Click Import.
Build the table (Tab Settings column):
- Drag Percent Scrolled from the Variables column into the ROWS box.
- Drag Active users and Event count into the VALUES box.
Add a filter to isolate your scroll data:
- Scroll to the bottom of the Tab Settings column. Drag Event name into the FILTERS box.
- Click the filter to open it. Set the condition to exactly matches and type
scroll_depth_percentage(the event name you created in Step 3) in the expression field. - Click Apply.
Your report now shows a clean table: each scroll milestone (25, 50, 75, 90) on its own row, with the number of users and total event count for each one next to it.
To focus on a specific page, add a second filter: drag Page path into the FILTERS box and enter the URL of the page you want to examine.
What GA4 Already Tracks by Default - And Why It's Not Enough
If you've ever noticed an event called "scroll" appearing in your GA4 account without setting anything up, here's what that is.
GA4 includes a feature called Enhanced Measurement that automatically tracks several types of visitor behaviour - including scrolling. When this is enabled, GA4 fires a single event the moment a visitor scrolls past 90% of any page (Enhanced Measurement Events, Google Support).
That single data point tells you whether visitors finished the page. It doesn't tell you anything about what happened if they didn't.
If visitors are dropping off at 30%, 50%, or 70%, the default tracking gives you zero visibility into that. You have one answer: did they reach the end, yes or no. You can't see where the exit happened, you can't compare how different pages perform across the middle sections, and you can't see whether different types of traffic behave differently.
The four-milestone custom tracking you set up in the previous section converts scroll depth from a single yes-or-no answer into a map of your page. It tells you not just whether visitors finished, but which zone they were in when they stopped.
This is why we turned off GA4's built-in scroll tracking in Step 4 of the setup - not because it's useless, but because the custom version replaces it with something considerably more informative.
How to Interpret Your Scroll Depth Report
The most important thing to understand about scroll depth data is what it can and can't do. It tells you where visitors stopped. It does not tell you why. But that's still enormously useful, because it turns a vague, expensive problem ("why isn't this page converting?") into a focused, specific one ("why are visitors not getting past the 30% mark?").
Here are the four patterns you'll most commonly see, and what each one points you toward.
If most visitors leave before reaching 25%: The opening section of the page - what visitors see before they scroll at all - is where the investigation starts. Not the call to action at the bottom. Not the copy in the middle. The first screen. The question to ask: does the opening of this page immediately signal to the right visitor that they're in the right place? If it doesn't, the rest of the page doesn't matter - they're gone before they see it. Nielsen Norman Group's eyetracking research confirms that users spend around 57% of their page-viewing time in the content visible before they scroll at all.
If visitors are dropping off between 25% and 75%: They cleared the opening - the opening did its job. But something in the middle of the page is breaking their attention. Scroll depth has identified the zone; the next step is to find the specific moment within that zone. Tools like Microsoft Clarity (free) let you watch recordings of individual visitor sessions, so you can see exactly what a visitor was looking at when they stopped scrolling.
If visitors are reaching 75-90% but not converting: The content didn't lose them. They consumed almost the entire page. The investigation shifts away from the page itself and toward the conversion element (the part of the page that asks the visitor to take action): the offer, the call to action, the form, or the next step. Something near the bottom is the barrier, not the content that led to it.
If scroll depth varies significantly by where visitors are coming from: Same page, but visitors from some sources scroll much deeper than visitors from others. This usually means the traffic source (where your visitors came from - Google, social media, email, etc.) is the variable, not the page. The page may be doing its job - just not for every audience arriving at it. We've written about this in detail here →
What scroll depth alone cannot tell you: whether a specific section is confusing, whether an image failed to load, whether the writing lost the reader's interest, or whether someone found your phone number at the top of the page and called you directly (which would show up as a very low scroll depth despite being a successful visit). Scroll depth narrows the search. The investigation still has to happen - but now it starts in the right place.
What Scroll Depth Can't Tell You
Scroll depth is a simple, scalable signal. Simple signals have edges. It's worth knowing what they are before you use the data to make decisions.
Scrolling is not the same as reading. A visitor can swipe through an entire page in three seconds. The 90% event fires. They read nothing. Scroll depth records a physical movement, not comprehension or attention.
The same percentage means different things on different pages. 75% of a 300-word page and 75% of a 3,000-word page represent very different amounts of content consumed. When you compare scroll depth across pages of different lengths, you're not comparing like for like.
A low scroll depth isn't always a problem. A visitor who finds your phone number in the first 10% of the page and calls you looks identical in scroll data to someone who left frustrated after reading 10% and finding it wasn't for them. Both have the same scroll depth. Only one of those visits is a problem.
It can't capture direction. If a visitor scrolled down to 75%, scrolled back up to check something at 20%, and then scrolled down again, GA4 records one 75% milestone event. The back-and-forth - which often signals re-reading or confusion - is invisible in the data.
It may behave unpredictably on certain types of pages. Pages that load new content as you scroll (infinite scroll feeds, for example), or single-page web applications where the URL doesn't change as you navigate, can produce unreliable scroll percentages. The number may not reflect what was actually visible to the visitor.
None of this makes scroll depth less useful. It makes it what it is: one layer of the diagnostic, not the whole picture.
Scroll Depth vs. Session Recordings vs. Heatmaps - When to Use Each
Scroll depth is not the only tool for understanding what visitors do on a page. Here's how it compares to the two other tools that are most commonly used alongside it.
GA4 Scroll Depth (this blog) is quantitative data at scale. You're looking at patterns across hundreds or thousands of visitors - which pages hold attention, which pages lose visitors early, how scroll behaviour varies by where your visitors came from, and whether visitors who scroll deeper convert at a higher rate. GA4 connects scroll data to everything else you're already tracking: where traffic came from, which campaigns drove it, and whether those visitors eventually converted. The limitation: GA4 doesn't show you what individual visitors were actually doing on the page.
Microsoft Clarity (free) lets you watch recordings of individual visitor sessions - you can see what the page actually looked like as the visitor scrolled, where they moved their cursor, where they clicked, and at what point they left. It also provides scroll heatmaps: a colour-coded visual of the page showing where attention fades across all sessions (Scroll Maps, Microsoft Clarity). Clarity is free and straightforward to set up. Its limitation is that it doesn't connect to your acquisition (data about where your visitors came from) and conversion data at the same depth as GA4 - you can't easily ask "do visitors from Google Search scroll deeper than visitors from LinkedIn?"
Hotjar (free plan available) is similar to Clarity - session recordings, scroll heatmaps, click maps - with the addition of tools that capture visitor opinions and feedback directly: a short question that appears when someone is about to leave the page and on-page feedback widgets that let you ask visitors directly why they're leaving or what they were looking for (Hotjar Heatmaps). Hotjar is a strong choice when data about what visitors actually do on the page (behavioural data) alone isn't enough and you need the visitor's own words to complete the picture. More advanced features require a paid plan.
| GA4 Scroll Depth | Microsoft Clarity | Hotjar | |
|---|---|---|---|
| What it shows | How far visitors scroll, across all sessions | What individual visitors did on the page | What individual visitors did + why (via surveys) |
| Scale | Hundreds or thousands of visitors at once | One session at a time | One session at a time |
| Connects to your ad and traffic data | Yes | No | No |
| Shows which traffic source scrolls deeper | Yes | No | No |
| Session recordings | No | Yes | Yes |
| Scroll heatmaps | No | Yes | Yes |
| On-page surveys | No | No | Yes |
| Cost | Free | Free | Free plan; advanced features paid |
The typical sequence: GA4 scroll depth identifies that there's a problem and shows you which zone of the page it's in → Clarity or Hotjar shows you what's actually happening in that zone → you form a hypothesis → you test it.
Most teams don't need all three immediately. Start with GA4 scroll depth. When the data points to a specific problem zone, add Clarity or Hotjar to investigate that zone. The tools are complementary, not redundant.
One practical note on Clarity and Hotjar: both tools work by loading an additional script on your pages, and that script runs every time a visitor loads the page. On a small site with a handful of pages, this is negligible. On a larger site - an e-commerce store with hundreds of product pages, for example - loading either tool across every page adds overhead that can affect how quickly those pages load for visitors. Page speed has a direct impact on both user experience and search rankings. The right approach is to deploy these tools surgically: activate them on the specific pages your scroll depth data has flagged as worth investigating, not site-wide by default. Both Clarity and Hotjar let you control which pages are tracked, so there's no reason to instrument pages you're not actively examining.
What to Do After You Have Scroll Depth Data
Scroll depth points you in the right direction (routing mechanism). It routes your attention to the right layer of the problem. Here's where each pattern routes you.
Pattern 1 - Low scroll across all pages, all traffic sources. Start with the first screen. Before changing anything else, understand what a first-time visitor sees before they scroll. Use Clarity or Hotjar to watch what real visitors do in the first few seconds. The question: does the opening signal immediately, to the right visitor, that they're in the right place?
Pattern 2 - Scroll depth varies by traffic source. The page may not be the problem at all. Visitors from different channels arrive with different levels of context, intent, and familiarity with your category. Before rewriting anything, understand the audience arriving from each source. → Why Switching Marketing Channels Doesn't Fix What's Actually Broken
Pattern 3 - High scroll, low conversion. Content consumption is not the constraint. The investigation moves to the conversion element: the call to action, the offer clarity, the form, the next step, the trust signals near the bottom. Scroll depth has ruled out the content as the barrier. Something else is blocking the decision.
Pattern 4 - Drop-off concentrated at a specific milestone. Something in that zone is causing exits. Open Clarity or Hotjar and filter for sessions that ended around that scroll point. Look for: a section that visually looks like the end of the page (accidental false bottom), a slow-loading image or asset, a content block that's clearly out of place. Once you see what's happening, you have something specific to test.
Every Unconsumed Section Is Demand That Went Nowhere
Every percentage point of drop-off is potential demand that never reached the part of the page designed to capture it. That's not necessarily a traffic problem. It may not be a copy problem. It's a consumption problem - and scroll depth is what makes it visible for the first time.
Before redesigning a page, rewriting copy, or testing a new call to action, the first question is whether visitors are even reaching those elements. You cannot optimise what isn't being seen.
This principle runs through every layer of measurement: tracking what's happening at the surface and calling it performance keeps the real constraint invisible. Scroll depth is one instrument in a diagnostic approach to measuring what's actually working.
Frequently Asked Questions
- Do I need Google Tag Manager to track scroll depth in GA4?
- Not for basic tracking. GA4's built-in tracking fires a single event when a visitor reaches 90% of a page - no setup required. But if you want milestone tracking (25%, 50%, 75%) that shows you where visitors stop throughout the page, you need Google Tag Manager to configure it. No developer is required; Tag Manager is built for non-technical users to configure without touching code.
- Will this tracking slow down my website?
- No. The scroll tracking we set up works by listening for the moment a visitor passes each percentage threshold - it's a lightweight background instruction with negligible impact on page speed.
- How is scroll depth different from time on page?
- Time on page measures how long a browser tab was open. It inflates if someone opens a page, walks away, and comes back later. It also has a fundamental measurement problem: analytics tools can't record the time spent on the last page of any visit, so that time always registers as zero. Scroll depth measures a physical action - how far down the page the visitor's screen actually moved. It's a more reliable signal of whether the page was consumed, not just opened.
- How soon will I see data after setting this up?
- Scroll events will appear in GA4's testing view (DebugView) immediately while you're testing. Once you publish, standard scroll data appears in your reports within 24 to 48 hours.
- What scroll depth is considered "good"?
- There's no universal benchmark - it depends entirely on what the page is supposed to do. If the page is meant to generate an enquiry or a form submission, the meaningful question is whether visitors who scroll further convert at a higher rate. If they do, getting more visitors to scroll deeper is worth investigating. If the page is informational, the question is whether visitors are getting far enough to receive the information the page is designed to deliver. Scroll depth is always measured against the page's objective, not an abstract standard.
- Can I set this up to track scroll depth only on specific pages, not every page on my site?
- Yes. In the GTM trigger you created in Step 2, add a condition: set it to fire only when the Page Path (the portion of the URL after your domain name) contains your target page's address. This keeps the data clean and avoids mixing scroll behaviour from pages with completely different purposes.
- Do I need Clarity or Hotjar if I already have GA4 scroll depth data?
- They answer different questions. GA4 scroll depth shows you patterns across all your visitors - which pages lose people early, which traffic sources produce deeper engagement, whether scroll depth correlates with conversion. Clarity and Hotjar show you what individual visitors were actually doing on the page. If GA4 flags a problem zone, session recordings are what help you understand what's happening in that zone specifically. The right sequence for most teams: set up GA4 scroll depth first, identify the problem area, then add a session recording tool to investigate that area. You don't need all of them on day one.
Sources
- GA4 Engagement Rate - Google Support
- Enhanced Measurement Events - Google Support
- How Little Do Users Read? - Nielsen Norman Group
- How Users Read on the Web - Nielsen Norman Group
- Scrolling and Attention - Nielsen Norman Group
- Standard Metrics Revisited: Time on Page & Time on Site - Avinash Kaushik
- Scroll Maps - Microsoft Clarity
- Heatmaps - Hotjar