Blog analytics
Free blog analytics without cookies
Totallytics is free blog analytics: one 4 KB script shows top posts, referrers, countries and devices for up to 50 blogs, pulls 16 months of Google search queries and emails a daily, weekly or monthly report. No cookies, no credit card.
What you learn about your readers
Which posts get read, where readers come from, which countries and devices they use and how many come back. The dashboard breaks pageviews down by page, referrer, country, device, browser, operating system and UTM campaign, for any range up to 400 days. A reader who arrives from ChatGPT shows up as chatgpt.com, because OpenAI tags its links; readers from Google, Bing, Hacker News, Reddit or a newsletter show up under those domains.
Returning readers are counted with weekly retention cohorts over 12 weeks, without cookies: the only state is a small response the browser keeps in its own cache.
The search queries behind your posts
Connect Google Search Console in the site settings and the queries, pages, countries and devices from Google search appear next to your pageviews, with clicks, impressions, CTR and position. Totallytics backfills 16 months on connect, refreshes every 6 hours and keeps the rows after Google's own 16-month window has passed, so a two-year-old post keeps its search history.
Compare posts over time
Ranges up to 4 days are drawn per hour, longer ranges per day, with the same span before it shown for comparison. Click any row to filter the whole dashboard by it: readers of one post by source, or posts opened by readers from Hacker News; up to 12 filters stack. The overview series exports as CSV, and the stats API returns every table as JSON for any range up to 400 days.
A report in your inbox
Pick daily, weekly (Mondays, covering the previous Monday to Sunday) or monthly (the 1st, covering the previous month), an hour in your time zone, and up to 25 recipients per blog. The mail covers visitors and pageviews, top posts, referrers, countries and events, and flags unusual days once 14 days of history exist. One-click unsubscribe in every mail.
Works on any blog that takes a script tag
WordPress (through a theme header or a plugin that inserts scripts), Ghost (code injection), Hugo, Jekyll, Eleventy, Astro, Gatsby, Docusaurus and any static site on GitHub Pages, Netlify, Vercel or Cloudflare Pages. A noscript pixel counts readers with JavaScript off. Hosted platforms that do not let you add a script tag, such as Substack and Medium, cannot be tracked.
Limits
| Limit | Value |
|---|---|
| Blogs per account | 50 |
| Stats query range | Up to 400 days |
| Search Console backfill | 16 months, refreshed every 6 hours |
| Email report recipients per blog | 25 |
| Report frequencies | Daily, weekly, monthly |
| Retention cohorts | 12 weekly cohorts |
| Goals and funnels per blog | 20 |
| Price | Free, no credit card |
Not included: comments or subscriber counts, RSS reader counts, heatmaps and session replay.
Set it up
Sign in with Google, add your blog's domain and paste the script into your template:
<script
async
src="https://totallytics.com/latest.js"
data-hostname="example.com"
data-verify="YOUR_SITE_VERIFY_TOKEN"
></script>
The first pageview verifies the blog. To count newsletter signups or downloads, call window.tt_event("subscribe") where it happens.
FAQ
Does it count RSS readers?
No. Only pageviews in a browser that loads the script, or the noscript pixel, are counted. Feed readers never run it.
Can I show my stats publicly?
Yes. Make the site public in its settings and share the link; readers of the link see the overview, breakdowns and retention, but not goals or Search Console data.
Does it work on a single-page blog?
Yes. Navigation through pushState and popstate is tracked as pageviews; a hash router needs data-mode="hash" on the script tag. A replaceState call or a query-string-only change does not count as a new pageview.
Will it slow my blog down?
The script is one async tag of about 4 KB compressed and sends a small request per pageview.
Where is the data stored?
In Frankfurt, Germany, collected on Cloudflare's network. No cookies, no local storage, and IP addresses are never stored.
Updated October 7, 2026