Features

Web Analytics

Privacy-focused analytics covering traffic sources, audience, engagement, journeys, and ecommerce, with a default mode that stores nothing on device.

View as Markdown

VitalSentinel Web Analytics gives you privacy-focused insights into your website traffic. In its default storage mode the script stores nothing on the visitor's device, so it needs no consent banner for storage.

Getting Started

Web Analytics requires the Web Analytics script installed on your website:

<script
  src="https://analytics.vitalsentinel.com/analytics.js"
  data-key="YOUR_TRACKING_ID"
  async
></script>

See Web Analytics Script Installation for full details.

Dashboard Overview

Web Analytics is organized into several views inside the domain dashboard (Domain → Analytics):

  • Overview - Aggregated traffic, sources, behavior, and device data for any time range.
  • Realtime - A live view of active visitors, current pages, recent activity, and where visitors are coming from right now.
  • Audience - Visitor segments, geo/language checks, and visitor anomalies.
  • Acquisition - Referrer quality, campaign efficiency, and the search-to-visit bridge.
  • Engagement - Scroll depth, rage clicks, bounce diagnosis, and the engagement quadrant.
  • Authors - Which writers earned the reads, with reading depth per author and a drill-down into their articles.
  • Journeys & Goals - User journeys, custom funnels, site-search insights, and outbound-click hubs.
  • Ecommerce - Revenue, orders, conversion funnel, and per-product performance (only populated when the analytics script detects a supported store).
  • Ecommerce funnel - A per-product breakdown of the shopping funnel.
  • Performance & Reliability - How Core Web Vitals relate to conversion.
  • Trends & Anomalies - Page decay, traffic anomalies, and search clusters.
  • Experiments - Statistical before/after tests for site changes.

Every view can be filtered by date range, and most support period-over-period comparison.

Key Metrics

The Overview's headline cards:

MetricDescription
Total viewsTotal pages viewed
Unique visitorsUnique visitors in the period
Total sessionsNumber of sessions
Views per sessionAverage pages viewed per session
Bounce rateSingle-page sessions
Session durationMean session length

Visitors whose browser sends a Do Not Track or Global Privacy Control signal are counted in Total views but get no session record, because without an identity a session cannot be measured. Total sessions, Views per session, Bounce rate, and Session duration therefore exclude that cohort. The RUM Engagement page counts sessions from a different pipeline and does include them.

A visit that recorded no page view at all is not counted. It does not reach Total sessions or Unique visitors, and it is not treated as a bounce.

Session duration averages only the sessions that could be measured. A session holding a single event has no second timestamp to measure it against, so it is left out of the average rather than counted as zero seconds. Those sessions still count toward Total views, Total sessions, Views per session and Bounce rate. The same rule applies everywhere an average session duration is shown, including the per-campaign figures under Traffic Sources.

Main Chart

Pick up to two metrics from the headline list to plot on a dual-axis chart. Toggle comparison mode to overlay the previous period.

Markers for Known Data Changes

When something we know about changes what the numbers mean, the chart says so instead of leaving you to guess. Two kinds of annotation can appear:

  • A single marker on a day when the definition of a recorded visit changed. Figures before and after it are not measuring the same thing, so a comparison spanning that day is not comparing like with like.
  • A pair of markers, at the start and end of a period whose stored figures are known to be wrong and cannot be repaired. The most common cause is a staging or development copy of a site carrying the production tracking code, which recorded its own page loads as real visits. Comparing that period with a later one will overstate any decline.

The explanation rides the chart's normal tooltip. For a period, every point between the two markers carries it, not just the two days they sit on, so hovering the middle of an unexplained peak tells you what it is. These are annotations, not data: if we have nothing to flag for your date range, nothing is drawn.

Tabs

Below the chart, the Overview surfaces five drill-down tabs:

TabWhat's inside
Traffic SourcesChannel breakdown, individual sources, referring domains, and UTM campaigns
PagesAll pages, entry pages, and exit pages
GeographyCountries, continents, and language preferences
DevicesDevice type, browsers (with versions), operating systems (with versions), and screen sizes
EventsCustom events, outbound link clicks, file downloads, and site search queries

Click any row in the tables to apply it as a filter – for example, click "Mobile" in the Devices tab to scope the entire dashboard to mobile traffic.

Traffic Sources

Source Types

Visitors are categorized by how they arrived:

SourceDescription
DirectTyped URL or bookmark
SearchOrganic search engine results
SocialSocial media platforms
ReferralLinks from other sites
EmailEmail marketing
NewsletterNewsletter links
PaidAdvertising campaigns
Paid SearchPaid search ads
Paid SocialPaid social ads
AI SearchAI assistants and tools (ChatGPT, Perplexity, etc.)
InternalNavigation from within your own site

Referrer Details

For each source, see:

  • Specific referring domains
  • Landing pages
  • Conversion rates

UTM Tracking

Track campaign effectiveness with UTM parameters:

ParameterPurpose
utm_sourceTraffic source (google, newsletter)
utm_mediumMarketing medium (cpc, email)
utm_campaignCampaign name
utm_termPaid keywords
utm_contentAd variation

Example URL:

https://example.com?utm_source=google&utm_medium=cpc&utm_campaign=spring_sale

User Behavior

Top Pages

See which pages get the most traffic:

  • Page views per page
  • Average time on page
  • Bounce rate per page
  • Entry and exit rates

Engagement Metrics

  • Scroll Depth - How far visitors scroll (25%, 50%, 75%, 90%, 100%)
  • Time on Page - Active engagement time
  • Pages per Session - Average pages viewed

Scroll depth and time on page are averaged over measured visits only. Not every visit produces an engagement reading: a page left open in a background tab, or a visitor whose network address changes between the page load and the moment they leave, sends nothing to measure. Those visits are left out of the average rather than counted as a reading of zero, so both figures describe the visits we actually observed.

If your site has search functionality, track:

  • Search queries used
  • Search result clicks
  • No-result searches

Site search is automatically detected from common query parameters (q, s, search, query, keyword, term, k). You can stop search terms being stored at all, per domain - see Page Titles, Search Terms and Article Authors.

Device & Location

Device Breakdown

  • Desktop vs Mobile vs Tablet
  • Operating systems
  • Browsers and versions
  • Screen sizes - collected only from visitors under Persistent storage, so the Screen Sizes tab covers a subset of your traffic

Geographic Data

  • Country-level breakdown
  • Continent-level breakdown
  • Browser language breakdown
  • Performance by location

Realtime View

The Realtime page (Domain → Analytics → Realtime) is a live snapshot of what's happening on your site right now. It's useful for confirming that a campaign launch, deploy, or marketing push is landing.

Active Visitors

A live Active visitors count in the page header shows visitors active in the last 5 minutes.

Sections

SectionWhat it shows
Recent ActivityFeed of the latest pageviews – device icon, country name, path, time-ago
Active PagesPaths currently being viewed, with visitor counts and proportional bars
Active EventsEvents firing right now (clicks, scrolls, and custom events)
Traffic SourcesChannels driving live traffic
Top ReferrersDomains sending visitors right now
DevicesLive device type breakdown
CountriesWhere active visitors are located

The page polls every 10 seconds. A Live / Paused toggle lets you freeze the view if you want to read a snapshot without it shifting under you.

Audience

The Audience view (Domain → Analytics → Audience) groups your visitors and flags unusual patterns.

  • Visitor segments - Compare cohorts such as new vs returning, mobile vs desktop, and by traffic source.
  • Geo/language mismatch - Surfaces visitors whose country and browser language don't line up, which is useful for spotting localization gaps.
  • Visitor anomalies - Highlights unexpected spikes or drops in visitor counts.

Cards support period-over-period comparison.

Acquisition

The Acquisition view (Domain → Analytics → Acquisition) focuses on where traffic comes from and how well it performs.

  • Referrer quality - Ranks referring domains by engagement and conversion, not just volume.
  • Campaign efficiency - Compares UTM campaigns on engagement and conversion signals.
  • Search bridge - Connects search-driven visits to on-site behavior.

Engagement

The Engagement view (Domain → Analytics → Engagement) shows how deeply visitors interact with your pages.

  • Scroll-depth map - How far visitors scroll on each page.
  • Rage-click hotspots - Pages and elements where visitors click repeatedly in frustration.
  • Bounce diagnosis - Explains why specific pages bounce. A bounce with no engagement reading behind it is reported separately as unmeasured rather than counted as a true bounce, and each page carries the share of its bounces that were actually measured, so you can tell a page that genuinely loses readers from one that could not be observed.
  • Engagement quadrant - Plots pages by traffic vs engagement to find high-traffic, low-engagement pages.

Authors

The Authors view (Domain → Analytics → Authors) ranks the writers credited on your pages by the reading they earned.

The byline is read from the page's own structured data: a JSON-LD article node, or a <meta name="author"> tag on a page that also declares itself an article through og:type=article, an article:published_time, or an article-typed JSON-LD node. Nothing is taken from CSS class names, so a related-post byline in a sidebar is never mistaken for the author of the page. A page that does not declare itself an article credits nobody, which is why a homepage, a category listing or a checkout never appears here. The byline is stored as the page writes it, so an author can be an organization or a desk name rather than a person, and a page crediting several people keeps them together as one byline that the report splits back into a row each.

Three tiles head the view:

TileWhat it shows
Most readThe author with the most reads in the period, and their read count
AuthorsHow many authors were credited in the period
Counted twice overHow far co-authorship lifts the per-author totals above your bylined page views, or None when nothing in the period has more than one author

The Per-author reading table lists each author with:

ColumnWhat it shows
ReadsPage views of articles this author is credited on
ShareThis author's share of all reads that carry a byline
ReadersHow many different people did the reading
ArticlesHow many of this author's articles were read at all in the period
Reads / articleReads divided by articles
Avg timeAverage active time on the page, measured while the tab is focused
Avg scrollAverage scroll depth, as a percentage of the full page height
Read rateThe share of measured reads that reached at least halfway down the page

The date picker and comparison mode sit on this view, so you can set the window and read each author's movement against the previous period.

Click any row to drill into that author: their articles, most read first, each with its reads, readers and the same three reading-depth columns, plus the co-authors the piece is shared with. Tiles above that table give the author's article count, total reads, and reads per article. The drill-down keeps the window you were already looking at and All authors takes you back, but it has no date picker and no comparison of its own.

A co-authored article credits its full reads to each of its authors. Two names on one article means both are credited with the whole read count, so the Reads column adds up to more than your site's page views. That is shared credit, not double counting. Share is calculated against reads that carry a byline rather than against your whole site, so every author's share stays comparable. The shares of all your authors add up to 100%; when the table is showing only your most read authors, a line under it says so and the visible rows add up to less.

Bylines are collected from the moment the feature reaches your site, and are never backfilled. Traffic from before that point carries no author, so a date range reaching further back is mostly unattributed. A period with plenty of traffic and no authors in it is the normal picture at first.

Avg time, Avg scroll and Read rate are blank when nothing was measured. A visitor who closes the tab straight away sends no engagement reading, and a blank cell says so rather than reporting a zero that would read as "nobody scrolled".

If you would rather not store bylines at all, see Page Titles, Search Terms and Article Authors.

Journeys & Goals

The Journeys & Goals view (Domain → Analytics → Journeys & Goals) maps the paths visitors take and the goals they reach.

  • User journeys - Common page-to-page paths through your site.
  • Custom funnel builder - Define your own multi-step funnels and measure drop-off.
  • Site-search insights - What visitors search for on your site, including no-result queries.
  • Outbound-click hubs - Pages that send the most traffic to external destinations.

Ecommerce View

If your site has the analytics script installed and the script detects a supported store, the Ecommerce page (Domain → Analytics → Ecommerce) fills with revenue and conversion data.

Headline Metrics

MetricDescription
RevenueTotal revenue in the workspace's display currency
OrdersNumber of completed purchases
Average order valueRevenue / orders
Conversion ratePurchases / visitors, expressed as a %
Items soldTotal units sold across all orders

Each metric supports comparison mode for period-over-period change.

An order is counted only when an order ID can be read from your store. Without one it cannot be deduplicated, so it is dropped rather than risk being counted more than once. Revenue is reported in the currency your store itself reports; where the script cannot determine one, set a fallback under Domain Settings → Analytics → Report settings → Currency.

Main Chart

Pick which of the four headline metrics to plot. Comparison overlay is available.

Conversion Funnel

A four-stage funnel showing how many users reach each step:

  1. Product Views
  2. Add to Cart
  3. Checkout
  4. Purchase

Each stage shows the count and its share as a percentage of Product Views (the first stage), so you can spot the biggest drop-off.

All Products Table

Per-product breakdown with views, add-to-carts, purchases, revenue, and per-product conversion rate.

Tracked Events

The script automatically detects the following events on supported platforms:

EventDescription
Product ViewVisitor views a product
Add to CartItem added to cart
Remove from CartItem removed from cart
View CartCart page viewed
Begin CheckoutCheckout started
PurchaseOrder completed

Supported Platforms

  • Shopify
  • WooCommerce
  • Magento
  • Squarespace

See Web Analytics Script Installation for setup details.

Ecommerce funnel

The Ecommerce funnel view (Domain → Analytics → Ecommerce funnel) breaks the standard shopping funnel (product view to add to cart to checkout to purchase) down per product, so you can see which products lose the most visitors at each step.

Performance & Reliability

The Performance & Reliability view (Domain → Analytics → Performance & Reliability) connects site speed to business outcomes.

  • Core Web Vitals vs conversion - Whether faster pages convert better.

The Trends & Anomalies view (Domain → Analytics → Trends & Anomalies) watches your metrics over time and calls out what changed.

  • Page decay - Pages steadily losing traffic.
  • Traffic anomalies - Statistically unusual spikes or drops.
  • Search clusters - Groups of related on-site search queries.

Experiments

The Experiments view (Domain → Analytics → Experiments) runs statistical before/after tests so you can tell whether a change (a redesign, a new campaign, a content update) actually moved a metric. It supports difference-in-differences, Bayesian structural time series, and Mann-Whitney tests.

Custom Events

Track custom actions using the JavaScript API:

// Track a button click
window.VitalSentinelAnalytics.track('button_click', {
  button_id: 'signup-cta',
  location: 'homepage'
});

// Track a form submission
window.VitalSentinelAnalytics.track('form_submit', {
  form_name: 'contact',
  success: true
});

Data Attribute Tracking

Track events without JavaScript:

<button data-vs-event="signup_click" data-vs-plan="free">
  Sign Up Free
</button>

Filtering & Segmentation

Filter by:

  • Date range
  • Traffic source
  • Device type
  • Country
  • Page URL

Segment Analysis

Compare performance across segments:

  • Mobile vs Desktop
  • New vs Returning
  • By traffic source

Privacy Features

No Cookies by Default

In its default storage mode (data-storage="none") the Web Analytics script works without cookies:

  • Nothing is stored on the visitor's device, so no consent banner is required for storage
  • No cross-site tracking

If you switch to data-storage="session" or data-storage="persistent", the script stores an identifier on the visitor's device, so you must obtain your visitors' consent before you enable either.

Data Collection

What we collect:

  • Pseudonymous session and visitor identifiers
  • Page views and events
  • Device type, browser, and operating system, derived on our servers from the User-Agent header the browser already sends
  • Country (no region and no city-level data)

What we don't collect:

  • Cross-site tracking data
  • City-level location

IP addresses are not stored in your analytics data. They are used in memory to look up the country and as one input to the server-side key that stitches a visit together, then discarded.

Web Analytics does not count visits from the VitalSentinel crawler. Site Health Monitoring and Page Monitoring use this crawler.

This is not the same as "no personal data". Page paths, query strings, page titles, UTM values, and custom event properties are your own content - we store what your site sends us. Automatic redaction catches structured identifiers such as emails and card numbers, not names or free text. Design your URLs, titles, and events so they do not carry personal data.

Page Titles, Search Terms and Article Authors

Page titles and site-search terms are free text your own pages produce, so they can carry details that pattern-based redaction cannot catch. You can switch both off for a whole domain.

Go to Domain Settings → Web Analytics → Advanced settings → Page titles, search terms and article authors, then tick Do not store page titles or site-search terms. Both are stored by default.

  • Enforced on our servers at ingestion, not in the browser, so there is no snippet change and no redeploy. It applies to all traffic on that domain, including visitors already on a page.
  • It takes effect within about a minute, not on the click. Events arriving inside that window are still handled under the previous setting.
  • It covers both pipelines. Page titles stop being stored for Web Analytics and for RUM, and the search term is stripped from the site-search event and from the results-page URL, in Web Analytics and in RUM.
  • It is not retroactive. Rows already stored keep the values they were stored with, and stay in your reports for the full ten-year Web Analytics window.
  • Owners and admins only. Members do not have access to domain settings.

With it switched on, your reports identify pages by URL only and you lose site-search reporting: searches aggregate under a single results-page path.

Article authors have their own checkbox in the same panel. Tick Do not store article authors and the byline stops being stored, and the Authors report stops filling in. It is a separate control on purpose: page titles and search terms are text your visitors produced, while the byline names your own writers and is already printed on the page, so switching one off should not silently cost you the other. Authors are stored by default, the switch is enforced the same way and reaches all traffic within about a minute, and it covers Web Analytics only, because RUM collects no byline. Names already collected stay in your reports until they age out.

If you want enhanced tracking (returning visitors), use consent. Wire both calls into your banner - the first when a visitor accepts, the second when they refuse or later change their mind:

// Visitor accepted
window.VitalSentinelAnalytics.grantConsent('persistent');

// Visitor rejected, or withdrew a previous acceptance
window.VitalSentinelAnalytics.revokeConsent();

No page reload is needed. The next event carries the new basis.

A browser privacy signal outranks your banner. The grant call is ignored for a visitor sending Do Not Track or Global Privacy Control: they are still counted, but without any storage.

See Privacy & Consent for details.

Best Practices

Focus on Key Metrics

  • Traffic - Are you attracting visitors?
  • Engagement - Are they interested?
  • Conversion - Are they taking action?

Set Up Custom Events

Track actions that matter to your business:

  • Sign-ups
  • Downloads
  • Video plays
  • Feature usage

Look for:

  • Traffic changes over time
  • Seasonal patterns
  • Campaign effectiveness
  • Content performance

On this page

VitalSentinel

Catch issues before they cost you

Track SEO, performance, and uptime in one place and get alerted the moment something breaks – hours before it hits your traffic.

  • Free plan for 1 domain
  • Set up in minutes
  • No credit card required