Pageviews, Sessions and Visitors Explained 2026

Two analytics tools can both be right and still disagree. Here is what each core term counts, how GhostMetrics defines it, and how to reconcile the gap.

By Null Agency · Updated November 4, 2026 · Written for anyone comparing two dashboards or moving between tools

TL;DR — the same five words mean different things in different tools

"Visitors" is the word that causes the most arguments. Two analytics tools can both be working correctly and still show different numbers, because a pageview, a session and a visitor are definitions, not facts. This page pins each term down, shows exactly how GhostMetrics counts it, and ends with a procedure for reconciling two tools.

If you only read one section, read "Why two tools never agree" and the numbered reconciliation steps near the end.

The five terms side by side

Most analytics confusion comes from assuming a word means the same thing everywhere. The table below gives the plain-language meaning, how GhostMetrics counts it, and where the other side of the argument usually sits. The GhostMetrics column was read from the tracker and the server code, not from marketing copy.

TermPlain meaningHow GhostMetrics counts itWhere tools tend to differ
PageviewOne page was viewedOne stored row per page load, plus one per client-side route changeBot filtering, ad blockers, consent denial, whether route changes count
SessionOne continuous visitOne browser tab: a counter in sessionStorage that resets when the tab closesTime-window sessions, midnight splits, campaign changes
VisitorOne person or browserThe Visitors card sums entry pageviews, so it counts tab sessions that started in the periodCookie IDs, daily hashes, logged-in user IDs
EventA named actionA separate record with a name and an optional section, carrying the page path and any session UTMAutomatic events, parameters, how many a tool collects by default
BounceLeft after one pageA session with exactly one pageview; bounce rate is bounces divided by entry pageviewsEngagement-based definitions that look at time or interaction

Pageviews: the most honest number on the dashboard

A pageview is the simplest thing an analytics script can record. The page loads, the script runs, and it sends one beacon to the collection endpoint. In GhostMetrics each beacon becomes one row in the events table with the type set to pageview, and the dashboard's pageview total is a count of those rows for the selected period.

Two behaviours are worth knowing. First, the tracker is single-page-app aware: it wraps history.pushState and listens for popstate, so a route change that does not reload the browser still sends a new pageview. If your site is a React, Vue or Svelte app, the number of pageviews therefore tracks navigation, not full page loads. Second, the tracker collects nothing at all when the browser sends Global Privacy Control or Do Not Track. Those visits are absent from the count by design, so GhostMetrics will read lower than any tool that ignores those signals.

The server also drops traffic whose user agent identifies it as headless browsers, automation frameworks, crawlers and common HTTP libraries. A request that spoofs a normal browser user agent still gets through, which is why odd spikes deserve a look at the Organizations view. Our guide to reading your analytics dashboard weekly shows what a healthy week looks like before you start comparing tools.

Because pageviews depend on fewer judgement calls than sessions or visitors, they are the right first number to compare across tools. If two tools disagree on pageviews by a large margin, the cause is almost always collection (blockers, consent, bot filtering), not definitions.

Sessions: a tab in GhostMetrics, a time window elsewhere

A session groups pageviews into a visit. The classic definition is a window of activity that ends after a period of inactivity, and many tools also start a new session at midnight or when the campaign source changes. Check the current Google Analytics documentation for the rules GA4 applies today, because they are specific and Google adjusts them.

GhostMetrics takes a cookie-free route. The tracker keeps one counter in the tab's sessionStorage under the key gm_depth. The first pageview in a fresh tab sets it to 1 and flags the pageview as an entry. Every later pageview in that tab increments it. Close the tab and the storage is cleared. Nothing is written to cookies or localStorage, and the counter never leaves the browser except as a number attached to the beacon.

That design has consequences you should expect:

None of this is wrong, but it is a different unit from a 30-minute-window session. Comparing session counts between a tab-based and a time-window tool without that in mind is how people end up chasing a discrepancy that is just two valid definitions.

Visitors: the card most people misread

GhostMetrics computes a daily hash for each request. The hash is SHA-256 over a secret daily salt, the site ID, the connecting IP address and the user agent, truncated to 16 hex characters. The salt is random, rotates every UTC day and is deleted after 48 hours, so yesterday's hashes cannot be recomputed. The IP address and user agent are used in memory and not stored. This is the same cookieless family of design described in our guide to counting unique visitors without cookies.

Here is the part that matters for this page. The hash powers the Live Visitors count (distinct hashes in the last five minutes), the funnel counts and some server-side housekeeping. The Visitors card on the main dashboard is not a count of distinct hashes. It is the sum of the entry flag over the selected period: the number of pageviews that were the first in their tab. So the card reads as "tab sessions that started in this period".

Pages per session and bounce rate use that same figure as their denominator, which keeps the three cards consistent with each other. The trade-off is that the label says Visitors while the unit is a tab session. One person who opens your site on Monday and again on Thursday counts as two. Two people behind the same office IP and browser version are still counted separately, because each has their own tab.

When you compare this number with a cookie-based tool's user count, expect differences in both directions. The cookie tool merges a person's repeat visits into one user; the tab-based count splits them. The cookie tool also loses anyone who declined consent; the cookieless count does not.

Events and bounces

Events

An event is an action you name. In GhostMetrics you add data-gm-event="signup-click" to an element, or call window.ghostmetrics.track('name', { section: 'pricing' }). The server stores events in a separate table from pageviews, with the event name, the optional section, the page path and any session UTM values. Because they live apart, a click event never inflates your pageview count, and a page with ten tracked clicks is still one pageview. There is no numeric value or revenue field. The Custom Events panel lists the event name, a count and when it last triggered.

Bounce

In GhostMetrics a bounce is a session that had exactly one pageview. The leave beacon, sent when the tab is hidden or unloaded, reports the session depth; if it is 1, the landing pageview is flagged a bounce. Because the leave beacon can arrive before the next page's pageview, the server clears the flag if a later pageview with depth above 1 appears from the same visitor hash within 30 minutes. Bounce rate on the dashboard is bounces divided by entry pageviews.

That is the classic definition, and it differs from engagement-based definitions that count a visit as engaged after some time or an interaction. Our explainer on bounce rate versus engagement rate walks through the difference. One date matters if you compare long ranges: bounce flags on rows recorded before 2026-10-16 over-count bounces, because of a server fix shipped that day.

Why two tools never agree

Even with identical definitions, two tools disagree because they do not see the same traffic. The causes fall into collection and definition. Work through collection first, since it moves the biggest numbers.

CauseTypeEffect on the comparison
Ad blockers and tracking-protection listsCollectionWell-known third-party analytics domains are blocked more often than a script served from a tool's own host; each tool loses a different share
Consent banner declinesCollectionA cookie-based tool may record nothing for visitors who decline; a cookieless tool is unaffected
Global Privacy Control and Do Not TrackCollectionGhostMetrics records nothing for these visitors; other tools may not honor the signal
Bot and crawler filteringCollectionEach vendor maintains its own list, so automated traffic is removed differently
Session windowDefinitionTab-based and time-window sessions are different units
Visitor identityDefinitionCookie IDs follow a browser across days; tab sessions and daily hashes do not
Time zone and date boundariesDefinitionGhostMetrics buckets by UTC date; a property set to another time zone shifts evening traffic into a different day
Bounce and engagement rulesDefinitionSingle-page-session bounce versus engagement-based rates will not match

The practical lesson is to expect a gap and to decide in advance which tool is your system of record for which question. Treat any gap as something to explain, not a number to average away.

How to reconcile two tools' numbers

Run this once when you move tools or when a stakeholder asks why the numbers differ. It takes about an hour and ends with a written note you can reuse.

  1. Fix the window. Pick a full set of complete days, such as the last seven. Export both tools for exactly those dates and note each tool's time zone. GhostMetrics uses UTC date boundaries.
  2. Compare pageviews first. Put the two totals side by side and compute the gap as a percentage of the larger one. If the gap is small, your collection is comparable and the definitions below are the story.
  3. Test collection if the gap is large. Load your site in a clean browser profile with no extensions, then again with a content blocker, and watch the Network tab for each tool's request. Confirm each tool fires on every page type, including your single-page-app routes and checkout or login pages.
  4. Account for consent and privacy signals. If one tool depends on a consent banner, compare its numbers before and after consent was introduced. If you test with Global Privacy Control enabled, expect GhostMetrics to record nothing.
  5. Translate sessions. Write down each tool's session rule. If one is tab-based and the other is time-window, do not compare the absolute counts; compare week-over-week direction instead.
  6. Translate visitors. Label the GhostMetrics Visitors card as tab sessions in your own reports. Do not set it against another tool's users figure as if both counted people.
  7. Compare ratios and trends, not totals. Top pages ranking, top referrers, the share of mobile traffic and the week-on-week change are stable across tools even when totals are not. If those agree, both tools are telling the same story.
  8. Pick a system of record. Decide which tool answers which question, record the definitions in one paragraph, and stop reconciling once the paragraph exists.

For a one-off check that a new tool is installed correctly before you compare, our guide on testing your analytics install covers the network requests to look for. For the full migration picture, see migrating from Google Analytics to GhostMetrics, which recommends running both in parallel for a couple of weeks.

Want numbers whose definitions you can read? Try GhostMetrics

Cookieless$0 forever1 site free$9.99/mo flat Pro

GhostMetrics is cookieless web analytics: no cookies, no localStorage, no stored IP addresses, and it honors Global Privacy Control and Do Not Track. Install one script tag and the definitions on this page apply. The free plan is free forever: one site, unlimited pageviews, a real-time dashboard, every view and full history.

Need several sites or a public shareable dashboard? Pro is $9.99/mo flat with unlimited pageviews and unlimited websites (fair-use ceiling of 250), with a 30-day free trial. A card starts the trial, nothing is charged for 30 days, and you can cancel anytime. Raw event export as CSV or JSON is available on every plan, including free, so you can recompute any figure with your own definition.

Start free — no card See the live demo

FAQ

What is the difference between a pageview and a session?
A pageview is one page load, or one route change in a single-page app. A session is a group of pageviews from the same visit. In GhostMetrics a session is one browser tab, tracked with a counter in sessionStorage that resets when the tab closes.
Does the GhostMetrics Visitors card count people?
No. The Visitors card sums entry pageviews, which are the first pageview in each browser tab, so it counts tab sessions that began in the period. One person returning on two days, or opening two tabs, is counted more than once.
How does GhostMetrics define a bounce?
A bounce is a session with exactly one pageview. The leave beacon reports the session depth, and the flag is cleared if a later pageview from the same visitor hash arrives within 30 minutes. Bounce rate is bounces divided by entry pageviews.
Do custom events count as pageviews?
No. Custom events are stored in a separate table with the event name, an optional section, the page path and any session UTM values. A tracked click never adds to the pageview total.
Why do my numbers differ from Google Analytics?
Tools differ on collection and definition. Ad blockers, consent declines, Global Privacy Control, bot filtering, session rules, visitor identity and time zones all move the totals. Compare pageviews first, then ratios and trends, and check Google's current documentation for GA4 definitions.

Keep reading

Unique Visitors Without Cookies

How daily hashes replace cookie IDs

Bounce Rate vs Engagement Rate

Two definitions, one dashboard

All Analytics Guides

Every cookieless analytics guide in one place

GhostMetrics Live Demo

The real dashboard, live data

Disclosure: GhostMetrics is built by Null Agency and we use it on this site, so we are not a neutral party about our own product. The GhostMetrics definitions above describe how it counts today; third-party tools change their definitions, so check the vendor's current documentation before relying on a comparison.