Docsbook
Overview

Analytics overview

A documentation dashboard is easy to make impressive and hard to make usable. The difference is whether each number states what it cannot see. This page goes through the panel tile by tile and tab by tab, and for each one says what it counts, where it comes from, and the reading it does not support. The definitions underneath all of it — who counts as a visitor, how bots and your own team are excluded, how long data is kept — are in how measurement works and are not repeated here.

What you get#

One page that answers the questions an owner actually has, from one source. Six of the seven headline tiles are properties of a visit, and all six are derived from the same reconstructed event stream rather than from six independent counters — so bounce rate here and bounce rate in the outcome split are the same computation, not two numbers with one name. Reading any of it costs nothing against your project's balance, and none of it is gated by plan.

How it is built#

The seven tiles#

Tile Definition Chartable
Visitors Distinct visitors with at least one human visit in the window, split new / returning yes
Revenue Conversions × your average product price no
Spend What left this project's balance — AI calls plus MCP calls yes
Conversion rate Conversions ÷ visitors yes
Revenue/visitor Revenue ÷ visitors yes
Bounce rate Visits classified as a bounce ÷ visits yes
Session time Mean visit duration yes

Revenue is a tile but never a chart. It is conversions multiplied by a constant, so its line would be the conversion line with a different axis label: one fact drawn twice. Its shape over time is read off Conversion rate.

A conversion is a click out of your documentation to the host of your Call To Action URL. Matched by host, with www. folded in and other subdomains deliberately not folded — your docs usually live on a subdomain, and folding would count "went back to the docs" as a sale. A visitor who clicks through five times is one conversion.

Both money tiles stay off until two settings exist: the Call To Action URL decides which click is a conversion, the Average Product Price decides what it is worth. Until both are set they report a dash and name the missing one — never $0. A missing price is not a price of zero, and revenue is the figure an owner acts on without checking how it was produced. Both live in Branding. A stored price of 0 is refused by the validator for the same reason.

Spend is the exception on every count. It is money leaving rather than a property of a visit, it comes from the billing ledger rather than the event stream, and it is the one figure here whose 0 is a real reading. Consequences worth knowing:

  • It is not netted. A top-up does not make it dip; Spend answers "what did this project cost me", and that question has one direction.
  • It ignores your filters. A filter cuts visits, and a translation run is not a visit — "United States" has nothing to say about an embedding job.
  • It survives an empty window. A translation run at 3am is a real bill with no reader behind it, and that is often the most useful thing this tile has to show. Every other tile prints "no visits to measure" over such a window.
  • Its arrow has no colour. Spend rising because readers are asking more is the product working; spend rising because a job is stuck is a fire. Every other delta is green for good news — bounce rate going down is green — and this one stays grey, because the panel has no evidence for which case it is.
  • An unreadable ledger disables the tile and says so, rather than showing $0. What it counts is in AI usage and cost.

Each tile also shows the change against the immediately preceding window of the same length. Growth from a previous value of zero draws no arrow at all: it is undefined, not +100%.

The four breakdown cards#

Each card is a scrolling strip of tabs; ten of the tabs are ranked dimensions cut from the same visit stream as the tiles, and four come from elsewhere.

Card Tabs One value per visit?
Pages Pages, Headings, Entry, Exit Entry and Exit yes; Pages and Headings no
Sources Referrers, Channels, UTM, Keyword Referrers and Channels yes
Audience Devices, Browsers, Countries, Languages yes
Conversions CTA Clicks, Feedback, Searches counted per event

Single-valued dimensions partition the window — their visitor counts sum to the total. Pages and Headings do not: a visit's conversion is credited to every page it touched, so those rows are assisted credit and deliberately add up to more than the headline. The card says so on screen.

Every row on a ranked tab carries both figures — how many visitors it brought and what they were worth — with two bars behind it: one for whatever the list is ranked by, one always for the money. Rows are ordered server-side by visitors and re-sorted in the browser, because a server returning "the top rows by revenue" would hand back a different set depending on a toggle, and rows would appear and disappear as you switched.

Pages and Headings offer two extra rankings, Views and Reading time. They mean something for a row that names a place in your documentation and nothing for a row that names a country, so they are offered there and nowhere else. A page with no read-time measurements shows a dash, never 0.

Filtering#

Filtering by a row narrows everything — the other cards and the tiles above the chart — so a country, a device or a referrer can be read end to end. Filters stack and are removed by clicking their chip. Cards and tiles apply the same predicate to the same reconstructed visits, which is what stops "United States" meaning one thing in a card and another in the chart above it.

Tabs counted per event rather than per visit — Headings, UTM, AI Views, CTA Clicks, Feedback and Searches — cannot be cut this way. They say so above their rows while a filter is on, instead of showing unfiltered numbers under a filtered heading.

The four tabs that do not come from your visitors#

  • Keyword comes from Google Search Console. An impression that never became a click is invisible to anything running on your site, so this is Google's data: queries, position, impressions, clicks and CTR. Connect Search Console first. Its revenue column is explicitly an estimate — clicks × your site-wide revenue per visitor — labelled and drawn as one, because a modelled figure sitting next to measured ones must not look like one.
  • CTA Clicks ranks every destination readers left your documentation for, and from which page.
  • Feedback ranks pages by the thumbs they were given, dislikes first: the page people voted down is the one to rewrite. Both vote widgets count together — the rating at the foot of a page and the thumbs on an AI answer given there — because the question is which page readers approve of, not which button they pressed. Zeros are always shown.
  • Searches ranks what readers typed into your on-page search box, with how often it found something and how often it came back empty — the same words can carry both counts. A query with no results is a reader telling you in their own words what the docs should cover. It has no metric menu: these rows are per search, not per visit, so there is no revenue to sort on.

Channels, and why a channel row is not enough#

The Channels tab groups visits by the kind of source — organic search, paid search, social, AI assistant, referral, direct, internal — classified when the event is written rather than when it is read. That matters twice: AI referrals arrive with an empty referrer, so grouping by referrer alone buries them in Direct; and a paid Google click and an organic Google result share the same referrer, so a paid utm_medium has to win over it. Hovering a channel names the three sites it actually consists of, with their shares — an organic-search row that is almost entirely Google and one spread across five engines are different situations.

AI Views#

Three tabs, one for each reason a crawler came, because the three support completely different decisions:

Tab What it is The decision it supports
Answers A live fetch made while someone was being answered Your page was quoted at a person. Worth a link and a current price on it
Indexing Building the corpus an assistant later retrieves from The precondition for ever being cited
Training Bulk collection for model training Only one: whether to allow it

Within each tab you can group by Pages (which pages assistants read) or by Crawlers (one line per bot, labelled with its provider). Classification is by User-Agent against a table of 23 named bots, first match wins — so Applebot-Extended is never swallowed by Applebot — and an unrecognised AI bot is treated as training, the claim that promises you the least.

Time ranges#

Range What it covers
Now A rolling hour, bucketed per minute, refreshing live
Today The current UTC calendar day so far
Yesterday The previous UTC calendar day, whole
Last 24 hours A rolling day back from now
Last 7 days A rolling week
Last 30 days A rolling month — the longest window there is

Today and Yesterday are calendar days in UTC, not in your local timezone, and not a rolling 24 hours: early in the UTC day, Today covers less than Last 24 hours does. Thirty days is where the data ends.

Now is its own window rather than a relabelled day — a live view is only readable at minute resolution, and a whole day bucketed by the minute is 1,440 points. In Now the tiles and chart refresh every 5 seconds and the cards every 30; switch to any other range and refreshing stops, so a historical range you are not watching is never silently refetched under you.

Online now — readers active in the last 5 minutes — is not one of the seven tiles. It is a right-now gauge rather than a total over the window you picked, so it sits as its own chip beside the panel title; putting it in the strip would invite comparing it against a period it does not belong to.

A report you have no data for yet#

A tab with none of your own rows renders over faded sample figures with "Enable Tab" over them, and pressing it runs a short guide over those same figures. It is per tab, not per card — Entry names one page per visit while Pages credits every page a visit touched, and each caveat belongs to the tab it is about. The switch gates nothing: every figure was collected the whole time, and the choice is remembered in your browser per workspace.

Why this is the right way#

Rule Why it works Source
Measure whether the visit succeeded, not how many pages it touched "if users can't accomplish their target task, all else is irrelevant. User success is the bottom line of usability" — Nielsen & Budiu, 2001, reviewed 2021 NN/g: Success Rate
Classify crawlers by purpose, not into one "bots" bucket The vendors themselves draw the line: GPTBot may "crawl content that may be used in training", OAI-SearchBot exists "to surface websites in search results", and "ChatGPT-User is not used for crawling the web in an automatic fashion" OpenAI bots
A User-Agent is a claim, not an identity Google publishes crawler verification because owners are "concerned that spammers or other troublemakers are accessing your site while claiming to be from Google" Google Search Central: verifying Googlebot
Search Console figures are Google's, and provisional Google states "The newest data can be preliminary, meaning it's still being collected and might change in the next few hours", and defines impressions as "How many times your site appeared in Search results" — a number no on-site tracker can see Google: Performance report
A modelled figure must not look like a measured one The Keyword tab's revenue is clicks × site-wide revenue per visitor; it is labelled (est.) and drawn with a dashed bar for exactly this reason Mechanism, this page

Limits and open questions#

  • Every visitor figure is an estimate and the product says so. A visitor is a hashed IP: one corporate network merges into a single reader, one commuter splits across several. Read them as a trend, never as a headcount.
  • Percentages over few visits are a direction, not a measurement. Below 30 visits the panel says so under the figures rather than quoting a confident rate.
  • A very large window is read from a sample and admits it. Session reconstruction reads at most 50,000 events; hitting that cap sets a truncated flag the card states in words, because rates computed off a truncated window are wrong.
  • Deltas vanish rather than lie. If the previous window's read failed, no deltas are shown at all. Pages and Headings rows over-attribute on purpose — they are assisted credit; do not add them up.
  • Bounce is a description, not a verdict. One page, under three seconds, nothing else — which is also what a reader who found their answer in one glance looks like.
  • Under question: "Session time" is not attention. What is verifiable is the mechanism — segments, a three-second floor, a 300-second clip per segment, averaged over visits. What is not verifiable from any web analytics data is whether a person was looking at the screen, and this panel does not imply it. See read time.
  • Thirty days is the whole history. No year-over-year, no seasonality, no cohort longer than four weeks.

How to open it#

Open any page of your documentation site and click the Analytics tab in the floating toolbar at the bottom. The overview loads with the range you picked last, which it remembers across visits.

Updated

Was this page helpful?