← Back to blog

What Is a "Pageview," Really? A Technical Breakdown

What Is a "Pageview," Really? A Technical Breakdown

Meta Description: SPA routes, hash changes, prefetch, bots, iframes — when does each count? Demystify the core metric behind every analytics tool.

Pageviews. It's the number one metric in analytics. Every dashboard shows it. Every marketer quotes it. And almost nobody actually knows what counts as one.

"We got 10,000 pageviews this month" sounds impressive. But what actually triggered those 10,000 counts? Did someone navigate to a new page? Refresh the page? Click the back button? Use an SPA to load new content without a full page reload? Some analytics tools count these differently, and the ambiguity creates confusion.

This guide cuts through the noise. By the end, you'll understand what a pageview really is, where the gray areas are, and why different tools sometimes report different numbers.

The Simple Definition

A pageview is a user's request for a page and a corresponding change in URL.

Breaking that down:

  1. A user loads a page (either by navigating to it or refreshing it)
  2. The URL changes (or first loads)

That's it. One URL change = one pageview.

On traditional websites (built with server-rendered HTML), this is straightforward. Each click links to a new URL, the server sends back a new HTML file, and the browser counts one pageview.

On modern web apps, it gets trickier.

How Traditional Sites Count Pageviews

In the old-school HTTP model, every navigation is clear:

  • User types mysite.com/blog into the browser
  • Server returns an HTML file for /blog
  • Browser renders it
  • One pageview counted

User clicks a link to /blog/post-1:

  • Server returns a new HTML file for /blog/post-1
  • Browser renders it
  • Another pageview counted

Each HTTP request was a pageview. Analytics tools (like Google Analytics 1.0) just counted HTTP requests.

Simple. Predictable. But it didn't handle the modern web.

How Single-Page Apps (SPAs) Count Pageviews

Today's web apps (React, Vue, Next.js, etc.) work differently.

When you navigate within a SPA, no new HTTP request happens. The app loads JavaScript once, then uses that JavaScript to swap out the content on the page dynamically.

Example: A Slack-like chat app.

  • User loads myapp.com (one HTTP request)
  • User clicks "Team A" and the app swaps the UI to show Team A's chat (no new HTTP request)
  • User clicks "Team B" and the UI swaps again (still no new HTTP request)

If we only counted HTTP requests, this would be one pageview. But really, it's three conceptually distinct page views.

That's why modern analytics tools use URL tracking. They watch for changes in the URL (via the browser's history API) even when no new HTTP request happens.

When you click "Team A," the app calls window.history.pushState() to change the URL from /chat to /chat/team-a. The analytics tool detects this URL change and counts a new pageview.

This is how SPAs like Next.js, Remix, and Nuxt apps work with analytics: they trigger URL changes, and the tracking script watches for those changes.

The Gray Areas

Real-world browsing isn't always clear-cut. Here are the edge cases:

Hash Changes (#)

Old SPAs used hash navigation: myapp.com#/team-a, myapp.com#/team-b.

Do these count as pageviews?

It depends on the tool. Modern analytics typically don't count hash-only changes as pageviews, because hashes don't trigger server navigation and are historically used for in-page anchors, not full page changes.

Best practice: Use proper URL paths (/team-a, /team-b) with history.pushState(), not hashes. This is clearer for both users and analytics.

Prefetch and Preload

Some sites preload content before you click a link. Your browser might load the HTML for the next page in the background.

Does the preload count as a pageview?

No. Analytics tools are smart enough to distinguish between user-initiated navigation and background requests. Prefetch happens on the network level; analytics see the user's actual navigation intent.

The Back Button

User navigates to /page-a, then clicks back to /page-b.

Is this a new pageview?

Yes. Clicking back changes the URL, which is detected, so it counts as a pageview.

Refresh / Reload

User loads /page-a, then hits Ctrl+R to refresh.

Is this a new pageview?

Yes. The URL is loaded again, which counts.

Opening in a New Tab

User right-clicks a link and selects "Open in New Tab."

Is this a pageview in the original tab?

No. It's a pageview in the new tab only.

Are Bots Counted?

Good question. Most pageviews include bot traffic—Google's crawler, social media bots checking links, malicious bots, etc.

Do they inflate your numbers?

Yes, if you don't filter them.

Good analytics tools (including Statalog) filter out known bots automatically. They use the official IAB list of bot user agents to identify and exclude common crawlers.

Check your analytics dashboard for a "Bot Traffic" filter or setting. You can usually toggle bot filtering on/off to see the difference. Most sites see 10-40% bot traffic.

If your numbers seem unusually high, this might be why.

iframes and Embedded Content

An iframe is a "window" to another page embedded inside your page.

Example: Your site has an embedded Typeform survey or a YouTube video player.

Do iframes count as separate pageviews?

Only if the iframe contains its own analytics tracker. The parent page counts as one pageview. Content within the iframe only counts if Statalog or another tracker is running inside it.

This is usually not a concern for standard embeds (YouTube, Typeform, Twitter embeds, etc.), since they don't affect your site's pageview count.

The Nuance: Pageview vs Session

Pageviews and sessions are related but different.

  • Pageview: A single page load or URL change
  • Session: A group of pageviews from the same user within a time window (usually 30 minutes)

You might have 100 pageviews, but if they're all from 1 user in one session, that's 1 session with 100 pageviews.

A session ends when:

  • The user is inactive for 30 minutes (configurable)
  • The user closes the browser
  • The date changes (midnight)

This distinction matters because some metrics are per-pageview (like bounce rate) and others are per-session (like engagement time).

Tools Measure Differently

Here's where it gets real: different analytics tools sometimes report different pageview counts.

Why?

  1. Bot filtering: One tool might filter more bots than another.
  2. Session timing: Different idle timeouts change where sessions begin/end.
  3. SPA tracking: Older tools might miss SPA route changes if the site doesn't explicitly emit events.
  4. Duplicate prevention: Tools disagree on what's a duplicate vs. a legitimate revisit.

If you compare Google Analytics to Statalog, you might see slight differences. This is normal.

Pro tip: Pick one analytics tool and stick with it for internal benchmarking. Don't try to reconcile counts across different tools; just compare trends over time within one tool.

Why Pageview Count Matters

Pageviews are used to calculate:

  • Traffic volume: How much traffic your site gets
  • Traffic sources: Which channels drive the most pageviews
  • Conversion rate: Conversions ÷ pageviews = conversion rate
  • Pricing tiers: Some analytics plans charge based on pageviews
  • Benchmark comparisons: Is your traffic up or down month-over-month?

Understanding what a pageview actually is helps you trust these metrics.

Frequently Asked Questions

Does refreshing count as a new pageview? Yes. Hitting F5 or Ctrl+R on a page counts as another pageview for that URL.

What about the back button? Yes. Clicking back changes the URL and counts as a new pageview.

Do mobile apps count pageviews? Not by default. Mobile apps don't have URLs in the same way websites do. Mobile analytics are typically event-based instead of pageview-based.

Can I track SPA route changes without modifying my app? Most modern SPA frameworks (Next.js, Nuxt, React Router) emit URL change events automatically. If your app uses history.pushState() properly, an analytics script can detect these without code changes. Check your framework's docs.

Why does Google Analytics show different numbers than my server logs? Server logs count HTTP requests. Analytics scripts count pageviews, which is different. Analytics also filter bots, require JavaScript, and handle SPAs differently. These factors cause discrepancies.

How do I reduce inflated pageview counts? Enable bot filtering in your analytics settings. Check for accidental repeated tracking code. Monitor for suspicious traffic patterns that might indicate bots or crawlers.


The bottom line: A pageview is a URL load or URL change. On traditional sites, it's one request per page. On SPAs, it's one URL change per page. Some edge cases (bots, prefetch, hashes) can complicate counting. Different tools filter and count slightly differently. Pick one tool, understand its methodology, and use it consistently.

Ready to see your real pageview data? Check your Statalog dashboard and explore your traffic with confidence.