Carthagos AnalyticsdocsDashboard
Documentation menu

The dashboard

Reading your numbers: intervals, comparisons, timezones, and every breakdown explained.

How the overview reads

A site's overview reads top to bottom. The headline totals come first (visitors, pageviews, bounce rate, average visit), then the traffic chart, then the breakdowns: pages, sources, geography, devices and custom events. Every number answers the range picked in the header, and every breakdown is that same range cut a different way, so nothing on the page is measuring a different window than anything else.

The headline numbers

MetricWhat it counts
VisitorsUnique people in the range, counted with the daily-rotating identifier. Never summed from days, so a 30-day count is not the sum of 30 daily counts.
PageviewsEvery page load and client-side route change.
Bounce rateThe share of sessions with a single interaction, rebuilt server-side from the 30-minute session rule.
Average visitMean session duration, from engagement time rather than raw tab-open time.

The breakdowns

Pages

Top paths by pageviews, with entries and exits, so you can see where people land and where they leave. The column you rank by is a question put to the server, not a re-sort of the rows on screen: a top-100-by-views page re-sorted by exits would present that page's biggest exits as the site's biggest.

Sources

Where visits come from, canonicalised: your own domain is dropped as a referrer, and hosts are folded to a channel name with a favicon, so Google's many subdomains read as one Google. Visits that arrive with no referrer at all read as Direct — tagging your links (just below) is how you give those a name. See troubleshootingif a number looks lower than another tool's.

AI referrals

The visits AI assistants sent: ChatGPT, Claude, Perplexity, Gemini and the rest, one row each, with the total and its share of all visitors on top. A visit counts when the assistant is its referrer, or, when it arrived with no referrer at all, when the utm tag the assistant added names it: ChatGPT writes utm_source=chatgpt.com and Claude writes utm_source=Claude AI, and a click from their apps carries the tag with no referrer, so it is counted here rather than filed under Direct. Each visit counts once. A referral is a click; being cited inside an answer without a click leaves no trace here, so a small number does not mean you are absent from AI answers. Clicks out of Google AI Overviews arrive as google.com and cannot be separated from search.

Geography and technology

Country-level geography from a privacy-preserving lookup, and one technology card that cuts the same visits by browser, operating system or device type, picked in its header, each over the same range.

Custom events

The events you defined, with counts, when they last fired and a sample of their properties. See custom events to add them.

Filtering by a row

Clicking a row in Sources, Locations or the device cards keeps only the sessions that match it, and the rest of the overview re-reads with that filter applied. There is no separate filter picker: the row is the door, which is why its name underlines under the pointer. What you have picked appears as marks on the bar at the bottom of the screen — a favicon, a flag, a device glyph — and each mark clears on its own.

  • A filter selects sessions, and the report then describes everything those sessions did. Keeping the visits from Google shows every page they went on to read, not only the page they landed on.
  • Two picks in one breakdown mean either (Google or GitHub); picks in two breakdowns mean both (Google and mobile).
  • The four things you can filter by are all about the visit rather than the page: source, country, city and device. Pages are deliberately not one of them, because “filter by page” would have to choose between the sessions that touched a page and the pageviews of it, and those are different questions.
  • Custom events and performance answer the range but not the filter, and leave the marks alone rather than pretending to narrow.
A filtered view is rebuilt from raw events rather than read off a rollup, so it covers at most 92 days where the unfiltered report answers a year. Past that the cards say so and offer the two ways out: shorten the range, or drop the filters and keep it.

Tag your own links

Browsers send less and less referrer information every year, and some places send none at all — a link in a newsletter, a PDF, a chat app or an app's in-built browser usually arrives with nothing attached, which is why so much traffic reads as Direct. Adding a ref to the link fixes that, and there is nothing to turn on: if a visit arrives with no referrer of its own, the tag names the source.

Any link you control
https://example.com/?ref=twitter
https://example.com/pricing?ref=newsletter
  • Known names are folded onto the site they mean, so ?ref=twitter lands in the same row as the visits X reports itself. A domain works too: ?ref=selfh.st.
  • Anything else is kept exactly as you wrote it, so ?ref=newsletter is its own row in Sources — useful for the places that have no domain at all.
  • A referrer the browser did send always wins. The tag only fills in what would otherwise be Direct, so a leftover ?ref on your own internal links cannot invent a visit.
Many sites already do this for you: Product Hunt appends ?ref=producthuntto every outbound link, and so do most launch boards, directories and newsletters — those visits stop reading as Direct on their own. ref and UTM tags answer different questions and do not compete: utm_source and its companions are their own cuts of the Sources card, for campaigns you are running and measuring, while refis a light way to name where a single link lives. A link may carry both. Tagging is only read going forward — it cannot relabel visits that already happened.

Ranges and comparisons

  • The interval picker covers today, yesterday, the last 7 and 30 days, month and year views, 6 and 12 months, and All time (anchored at your site's first event).
  • Comparisons show the preceding equal-length period beside the current one, so a delta is always against something concrete.
  • The chart picks its own grain honestly: hours for a day, days for a month, ISO weeks for 6 and 12 months. Weekly unique visitors are merged server-side, never summed from days, so uniques stay true.

Whose clock cuts the day

Charts follow the site's reporting timezone, so Today means the same day for everyone on the team. To read the numbers on your own clock, switch the timezone from the dashboard header; it changes your view only. The timezones page has the details.

Sessions and engagement

A session is rebuilt server-side with a 30-minute inactivity rule; bounce rate and average visit duration come from it. Engagement time is measured with two clocks (visible time, and active time near a real interaction), so a tab parked in the background does not inflate anything.

Freshness

Events typically land in charts within seconds. When the chip beside a card's title says Catching up, the pipeline is behind and the charts are honest about it; a site with no traffic simply shows its last visit's age. For the current moment, the realtime view is the faster surface.