Scroll Depth
Scroll depth tells you how far down a page your visitors actually get. It's measured by the same script that records page views, it sends nothing extra, and like everything else in Cabin it's anonymous.
What is measured
Every visit records the deepest point it reached on the page, as a percentage of the page's content. The number only ever rises during a visit, so scrolling back up never lowers it. It's sent once, when the visitor leaves the page, alongside the time-on-page reading.
The percentage is measured against the content of the page, not the whole document. A tall footer full of related posts and newsletter boxes can be a quarter of a page, and if it counted, a visitor who read every word of the article would show up as 75%. See what counts as the page below for how Cabin decides where the content is, and how to tell it exactly.
Where to find it
On the dashboard, the Attention row shows the site's average scroll depth next to time on page. The small strip beside the number is a picture of a page, top to bottom: the line marks the average depth reached, and the shading shows where visitors spent their time. Hover a band for the exact share of visitors.
In the page peek, open any page from the Top Pages list and switch to the Attention tab. Alongside the same average and strip for that page, you'll see a Scroll Depth list showing where visitors stopped, from under 10% to the very bottom.
Reading the list
Each row is the share of visitors who stopped at that depth, so the rows add up to all measured visits and one visitor shows up in exactly one row. "Under 10%" is people who barely moved. "100%" is people who reached the very bottom.
| Stopped at | Visitors |
|---|---|
| Under 10% | 18% |
| 40% | 9% |
| 70% | 21% |
| 100% | 22% |
Read like this, the table above says roughly a fifth of visitors never really scrolled, and of those who did, most either stopped around two thirds of the way down or went all the way. Toggle between visitor counts and percentages with the switch on the list, as on every other dashboard list.
A tall 100% row with little above it usually means people flicked straight to the end rather than read the page. Reaching the bottom means the end of the content was on screen, not that it was read.
Reading the strip
The strip beside the average is a different measure from the list, and it answers a different question: not how far people got, but where they lingered. The page is split into ten bands, and a band is shaded darker the more visitors held it on screen for a second or more.
Two things to keep in mind:
- Short pages show several bands at once. If half the page fits in the viewport, the top five bands are on screen the moment it loads, so they all shade without anyone scrolling. On a short page the strip says less than it does on a long article.
- The line and the shading can disagree. A page where everyone skims to the bottom has a low line and pale shading at the top. A page that people read slowly and abandon halfway has a mid-height line and dark shading above it. Both are useful, which is why both are shown.
What counts as the page
Cabin measures depth against the content block, which it finds in this order:
- An element carrying
data-cabin-content, if you've added one. - Otherwise the first
<article>or<main>on the page. - Otherwise the whole document, cut off at the first
<footer>if there is one.
Most sites land on the second or third rule and get a sensible reading. If your layout doesn't use <article> or <main>, or the element that carries them wraps the sidebar and comments as well as the post, tell Cabin exactly where the content is:
<div data-cabin-content>
<!-- the article body -->
</div>Only the first element with the attribute is used. Because the content block is re-measured as the page loads, lazy-loading images inside it are accounted for.
What isn't counted
- Pages shorter than the screen. If there is nothing to scroll, the visit is recorded as unmeasured rather than as a full read, and it's left out of the average. Sites that scroll an inner panel rather than the window report the same way.
- Visits that end abruptly. Time on page and scroll depth are both sent as the visitor leaves. Some browsers, and some ways of closing a tab, don't give the script the chance, so both readings come from a sample of visits rather than every one. The number of measured visits is shown under the average.
- Bots and scrapers. They don't run the script, so they never contribute a reading. AI crawlers are counted separately in AI Agent Traffic.
Starting out
Scroll depth is recorded for every site from the moment the current tracking script reaches its visitors, whatever the plan. Upgrading to Plus reveals what's already been collected. Browsers hold on to the script for up to a day, so a page's list fills in from its next few visits rather than all at once, and a page nobody has visited since the feature arrived shows no list yet.
