Web Analytics
Privacy-focused analytics covering traffic sources, audience, engagement, journeys, and ecommerce, with a default mode that stores nothing on device.
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:
| Metric | Description |
|---|---|
| Total views | Total pages viewed |
| Unique visitors | Unique visitors in the period |
| Total sessions | Number of sessions |
| Views per session | Average pages viewed per session |
| Bounce rate | Single-page sessions |
| Session duration | Mean 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:
| Tab | What's inside |
|---|---|
| Traffic Sources | Channel breakdown, individual sources, referring domains, and UTM campaigns |
| Pages | All pages, entry pages, and exit pages |
| Geography | Countries, continents, and language preferences |
| Devices | Device type, browsers (with versions), operating systems (with versions), and screen sizes |
| Events | Custom 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:
| Source | Description |
|---|---|
| Direct | Typed URL or bookmark |
| Search | Organic search engine results |
| Social | Social media platforms |
| Referral | Links from other sites |
| Email marketing | |
| Newsletter | Newsletter links |
| Paid | Advertising campaigns |
| Paid Search | Paid search ads |
| Paid Social | Paid social ads |
| AI Search | AI assistants and tools (ChatGPT, Perplexity, etc.) |
| Internal | Navigation 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:
| Parameter | Purpose |
|---|---|
| utm_source | Traffic source (google, newsletter) |
| utm_medium | Marketing medium (cpc, email) |
| utm_campaign | Campaign name |
| utm_term | Paid keywords |
| utm_content | Ad variation |
Example URL:
https://example.com?utm_source=google&utm_medium=cpc&utm_campaign=spring_saleUser 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.
Site Search
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
| Section | What it shows |
|---|---|
| Recent Activity | Feed of the latest pageviews – device icon, country name, path, time-ago |
| Active Pages | Paths currently being viewed, with visitor counts and proportional bars |
| Active Events | Events firing right now (clicks, scrolls, and custom events) |
| Traffic Sources | Channels driving live traffic |
| Top Referrers | Domains sending visitors right now |
| Devices | Live device type breakdown |
| Countries | Where 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:
| Tile | What it shows |
|---|---|
| Most read | The author with the most reads in the period, and their read count |
| Authors | How many authors were credited in the period |
| Counted twice over | How 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:
| Column | What it shows |
|---|---|
| Reads | Page views of articles this author is credited on |
| Share | This author's share of all reads that carry a byline |
| Readers | How many different people did the reading |
| Articles | How many of this author's articles were read at all in the period |
| Reads / article | Reads divided by articles |
| Avg time | Average active time on the page, measured while the tab is focused |
| Avg scroll | Average scroll depth, as a percentage of the full page height |
| Read rate | The 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
| Metric | Description |
|---|---|
| Revenue | Total revenue in the workspace's display currency |
| Orders | Number of completed purchases |
| Average order value | Revenue / orders |
| Conversion rate | Purchases / visitors, expressed as a % |
| Items sold | Total 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:
- Product Views
- Add to Cart
- Checkout
- 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:
| Event | Description |
|---|---|
| Product View | Visitor views a product |
| Add to Cart | Item added to cart |
| Remove from Cart | Item removed from cart |
| View Cart | Cart page viewed |
| Begin Checkout | Checkout started |
| Purchase | Order 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.
Trends & Anomalies
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.
Consent Levels
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
Monitor Trends
Look for:
- Traffic changes over time
- Seasonal patterns
- Campaign effectiveness
- Content performance
Related Features
Indexing Monitoring
Track which pages Google has indexed, review URL status categories, submit URLs, and fix the crawling issues keeping pages out of search results.
Google Search Console
Connect Google Search Console to track keywords, impressions, clicks, and indexing status alongside your performance and uptime monitoring.