You published the article. The dashboard says 2,000 pageviews. So... did anyone actually read it?
A pageview count cannot answer that. Someone who closed the tab after three seconds and someone who read every word both count as "1". The number flatters you and tells you nothing.
That is the problem I built AnGo Scroll Analytics to solve. It is a free, open-source WordPress plugin: it measures how far visitors actually scroll through your posts and pages — not an engagement score, not a vanity metric — and shows the result on a "Readability" screen in wp-admin.
What the dashboard shows
Data for a period you pick (the last 30 days by default), grouped by day or by month:
- visits, average scroll depth, median;
- percentiles 5/10/25/50/75/90/100 — and this is the part that matters;
- a trend chart: average depth as a line, visits as bars;
- a table per item: title, type, visits, average depth, median, 90th percentile.
The phrasing is the point. Instead of an abstract "average scroll depth: 34%", you get a sentence:
25% of visitors scrolled at least to 78% of the article.
That is something you can act on. If a quarter of readers leave before 20% of the text, fix the introduction. If 90% reach the conclusion, your headlines are working.
I added the low percentiles 5/10/25 in the latest release. On a bounce-heavy audience the classic 50/75/90 lines read as zero and say nothing, while "25% of visitors scrolled at least to 62%" stays informative.
What is actually measured — the honest version
These caveats matter, or the numbers get misread:
- It measures depth through the scrollable height of the document, not the share of the article that was on screen. A short page that fits on one screen records 100%.
- A visit is registered as soon as the page loads. A visitor who scrolls nowhere still gets a row, at 0%. That is deliberate: the percentiles describe all arrivals, including bounces.
- It counts visits, not unique readers: a new tab or a new session is a new visit.
- The tracking script loads only on single posts and pages.
Details I cared about most
Bots are filtered, not counted. A visit whose only signal fired at page load — usually crawlers, scanners and link previews — is excluded by default. The Visits card shows how many were left out, and a checkbox in the filter bar brings the raw population back. A real reader who stayed on the page without scrolling always counts.
Your own views are skipped. Visits from logged-in users are not recorded, so the owner's and the editors' traffic does not pollute the statistics.
Nothing leaves your server. The admin screen makes no external requests: the chart library ships with the plugin, so the dashboard works offline and behind a filtering proxy.
The IP is never stored. Rate limiting keeps only a hash of it, and only for the duration of the window — 60 requests per minute per IP, changeable with a filter.
Ad-blocker resilience by design. The tracking script and the public endpoint deliberately carry neutral names, because "tracker" in a filename is a standard target for filter lists — and a blocked script loses data silently, without telling you.
Deleting the plugin removes everything: the table, the schema-version option and the throttle transients. Deactivating removes nothing, so an upgrade or a temporary switch-off costs nothing.
Who it is for
Anyone who decides what to write next and would rather do it from evidence than from a hunch. Editors reviewing a writer's work. Anyone whose archive lives on WordPress and who has ever looked at a pageview count and thought: "and then what?"
How to try it
Search "AnGo Scroll Analytics" in Plugins → Add New inside wp-admin, or take it from the WordPress.org directory: wordpress.org/plugins/ango-scroll-analytics. It needs WordPress 6.8+ and PHP 7.4+.
The plugin is young — no reviews and no meaningful install base yet — so I will not pretend it has been settled by other people. If it tells you something surprising about your readers, write in the support forum: I read every thread myself.