Required Datapoints
- Total Time Spent on Page: The cumulative time users spend on a page during a specified period.
- Page Views: The number of times the page was viewed during the same period.
Time on Page measures the average amount of time users spend on a single webpage. It reflects how engaging or relevant the content on that page is to visitors.
Time on Page is a key indicator of content relevance, engagement depth, and UX quality, reflecting how effectively a webpage holds user attention and supports conversion or education goals.
The relevance and interpretation of this metric shift depending on the model or product:
A higher Time on Page often signals compelling content and value alignment, while a shorter time may indicate disinterest, friction, or poor targeting. It helps teams optimize messaging, design, and content strategy.
By segmenting by traffic source, device, or campaign, you can tailor page experiences to audience expectations and user journeys.
Time on Page 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. |
| Content Engagement Testing | Content Engagement Testing focuses on systematically evaluating how prospects, leads, and customers engage with sales and product-related content across various digital touchpoints. It coordinates execution across touchpoints so teams can move users or accounts toward the target outcome. Relevant KPIs include Time on Page. |
A blog page has the following data for a month:
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('PageAnalytics', { sql: `SELECT * FROM page_analytics`,
measures: { totalTimeSpent: { sql: `total_time_spent`, type: 'sum', title: 'Total Time Spent on Page', description: 'The cumulative time users spend on a page during a specified period.' }, pageViews: { sql: `page_views`, type: 'sum', title: 'Page Views', description: 'The number of times the page was viewed during the same period.' }, averageTimeOnPage: { sql: `${totalTimeSpent} / NULLIF(${pageViews}, 0)`, type: 'number', title: 'Average Time on Page', description: 'Measures the average amount of time users spend on a single webpage.' } },
dimensions: { id: { sql: `id`, type: 'string', primaryKey: true, title: 'ID', description: 'Unique identifier for each page analytics record.' }, pageUrl: { sql: `page_url`, type: 'string', title: 'Page URL', description: 'The URL of the webpage.' }, eventTime: { sql: `event_time`, type: 'time', title: 'Event Time', description: 'The time when the page view 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