Required Datapoints
- Page Height: The total height of the webpage or content being tracked.
- Scroll Position: The maximum position users reach while scrolling.
- User Sessions: The number of sessions or visits during the measurement period.
Scroll Depth measures how far users scroll down a webpage or piece of digital content. It provides insight into how much of the content users engage with and whether they reach critical sections, such as calls to action (CTAs) or key information.
Scroll Depth is a key indicator of content engagement and UX clarity, tracking how far down a page users scroll—giving insight into where attention holds and where it drops.
Its relevance shifts by content type:
A high Scroll Depth means users are engaged, while a low depth may signal layout fatigue, unclear structure, or unconvincing messaging.
By segmenting scroll data by page type, traffic source, or device, you can uncover drop-off patterns and test changes to content placement or format.
Scroll Depth informs:
These are the main factors that directly impact the metric. Understanding these lets you know what levers you can pull to improve the outcome
Actionable ideas to optimize this KPI, from fast, low-effort wins to strategic initiatives that drive measurable impact.
Activities commonly tied to improving or operationalizing this KPI.
| Activity | Description |
|---|---|
| Content Marketing | Content Marketing focuses on creating, distributing, and optimizing valuable content designed to attract, engage, and convert target audiences at every stage of the buyer journey. It helps teams translate strategy into repeatable execution. Relevant KPIs include Content Engagement and Engagement Metrics. |
| UX Testing | UX Testing involves systematically observing and analyzing how real users interact with a product or solution to identify pain points, usability issues, and opportunities for improvement. It improves performance by removing friction, testing changes, and scaling what works. Relevant KPIs include Onboarding Drop-off Rate and Referral Prompt Interaction Rate. |
| Engagement Analysis | Engagement Analysis involves systematically evaluating how prospects and existing customers engage with a company’s product, sales processes, and marketing efforts throughout the buyer journey. It turns signals into decisions, interventions, and measurable follow-up. Relevant KPIs include Scroll Depth. |
A landing page aims to convert users by showcasing a CTA at the 75% scroll mark. Analytics reveal:
This KPI is associated with the following stages in the AAARRR (Pirate Metrics) funnel:
This KPI is classified as a leading Indicator. It signals likely future performance and is used to predict outcomes before they fully materialize.
This role is directly accountable for the KPI and is expected to drive progress and decisions around it.
These roles contribute directly to performance and typically partner on execution, reporting, or optimization.
These leading indicators influence or contextualize this KPI and help create a multi-signal early warning system, improving confidence and enabling better root-cause analysis.
These lagging indicators support the recalibration of this KPI, helping to inform strategy and improve future forecasting.
How this KPI is structured in Cube.js, including its key measures, dimensions, and calculation logic for consistent reporting.
cube(`ScrollDepthMetrics`, { sql: `SELECT * FROM scroll_depth_metrics`,
measures: { scrollDepthPercentage: { sql: `100.0 * scroll_position / page_height`, type: `number`, title: `Scroll Depth Percentage`, description: `The percentage of the page height that users have scrolled through.` }, totalUserSessions: { sql: `user_sessions`, type: `sum`, title: `Total User Sessions`, description: `The total number of user sessions during the measurement period.` } },
dimensions: { id: { sql: `id`, type: `string`, primaryKey: true, title: `ID`, description: `Unique identifier for each scroll depth record.` }, pageHeight: { sql: `page_height`, type: `number`, title: `Page Height`, description: `The total height of the webpage or content being tracked.` }, scrollPosition: { sql: `scroll_position`, type: `number`, title: `Scroll Position`, description: `The maximum position users reach while scrolling.` }, eventTime: { sql: `event_time`, type: `time`, title: `Event Time`, description: `The time when the scroll event was recorded.` } }});Note: This is a reference implementation and should be used as a starting point. You’ll need to adapt it to match your own data model and schema