6 min read

What Is Pages Per Session in Google Analytics 4

Pages Per Session tells you how many pages users see on average during a visit—a core signal of engagement. In GA4, this metric works differently than Universal Analytics because GA4 is event-based rather than pageview-based. Understanding how it's calculated and where to find it is essential for diagnosing whether users are actually exploring your content.

How Pages Per Session Works in GA4

GA4 calculates Pages Per Session by counting page_view events within each session. A session is any group of interactions that occur within 30 minutes of idle time or before midnight.

Understand GA4's Event-Based Model

In GA4, a page view is captured when the page_view event fires on page load or route change. A session groups all events within a 30-minute window. Pages Per Session = total page views ÷ total sessions. Unlike Universal Analytics, there's no separate pageview hit type—it's just another event.

javascript
// GA4 fires page_view automatically via gtag on page load
// For manual tracking or custom implementations:
gtag('event', 'page_view', {
  'page_title': 'Pricing Page',
  'page_path': '/pricing',
  'page_location': window.location.href
});
Firing a page_view event in GA4

Know What Counts as a Page

Each unique page path is one page. Single-page applications (SPAs) require manual page_view events when the view changes, since the URL might not change. Query parameters are stripped by default, so /product?color=blue and /product?color=red are treated as the same page. Only page_view events count—custom events like form submissions don't contribute to Pages Per Session.

javascript
// For SPAs: manually fire page_view on route change
// Example with React Router
import { useEffect } from 'react';
import { useLocation } from 'react-router-dom';

export default function PageTracker() {
  const location = useLocation();
  
  useEffect(() => {
    gtag('event', 'page_view', {
      'page_path': location.pathname,
      'page_title': document.title
    });
  }, [location]);
  
  return null;
}
Tracking page views in single-page applications
Watch out: GA4 strips query parameters by default when grouping pages. If you need to track query parameter values (like utm_medium), set them as custom dimensions in Data Streams > Web > Measurement Settings instead of relying on the URL.

Finding and Using Pages Per Session in GA4

Pages Per Session appears automatically in GA4 reports once your property receives data. You can view it in standard reports, custom explorations, or pull it programmatically via the Data API.

View the Metric in GA4 Reports

Navigate to Reports > Engagement and select Engagement Overview. Pages Per Session is displayed there alongside bounce rate and average session duration. For deeper analysis, go to Explore > Free Exploration and add Pages Per Session as a metric, then dimension it by Source/Medium, Device Category, or Landing Page to see where engagement differs.

javascript
// Fetch Pages Per Session via GA4 Data API
const response = await fetch(
  `https://analyticsdata.googleapis.com/v1beta/properties/YOUR_PROPERTY_ID:runReport`,
  {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${accessToken}`
    },
    body: JSON.stringify({
      dateRanges: [{ startDate: '2025-01-01', endDate: '2025-12-31' }],
      metrics: [{ name: 'screenPageViews' }, { name: 'sessions' }],
      dimensions: [{ name: 'sessionSource' }]
    })
  }
);
const data = await response.json();
// Calculate: pageViewsPerSession = screenPageViews / sessions
Retrieving page views and sessions via the GA4 Data API

Interpret the Metric Correctly

Higher Pages Per Session means users are exploring more. But always compare across segments: mobile might have lower pages-per-session due to navigation friction, while organic search might have higher engagement. Check Pages Per Session by landing page to identify which entry points lead to deeper exploration.

javascript
// Tag pages with custom dimensions for deeper segmentation
gtag('event', 'page_view', {
  'page_path': '/blog/growth-hacking',
  'page_title': 'Growth Hacking 101',
  'content_type': 'blog',
  'author': 'alice',
  'topic': 'marketing'
});

// Then filter in Explore: dimension = content_type, metric = Pages Per Session
// Compare blog posts vs product pages to see which engages users more
Using custom dimensions to segment Pages Per Session
Tip: Use Explore > Path Analysis to trace which pages users visit in sequence. If users typically view 3-4 pages on a successful path but overall Pages Per Session is 2, you've found a friction point where visitors aren't exploring as expected.

Common Pitfalls

  • Counting bounces tanks the metric: Sessions with only one page (bounces) drag down Pages Per Session. Always segment by bounce rate or engagement time to isolate truly engaged users.
  • Query parameter stripping: GA4 removes query parameters from page paths by default. If you track utm_source in the URL, create a custom dimension instead to preserve that segmentation.
  • Session timeout splits user journeys: A user who explores slowly across 10 pages over 45 minutes will be split into two sessions (30-minute timeout), lowering each session's pages-per-session count unfairly.
  • Forgetting SPA page tracking: Single-page apps require manual page_view events on route change. Without them, GA4 will show artificially low Pages Per Session because navigation won't register as new pages.

Wrapping Up

Pages Per Session in GA4 measures engagement by counting how many pages users see per visit. Unlike Universal Analytics, it's built on GA4's event model—every page view is a page_view event within a session. Use it to spot which traffic sources, devices, or pages drive deeper exploration, but always segment by bounce rate and traffic source to avoid misinterpreting the numbers. If you want to track this automatically across tools, Product Analyst can help.

Track these metrics automatically

Product Analyst connects to your stack and surfaces the insights that matter.

Try Product Analyst — Free