Sharper Numbers: A Big Galytics Update
An analytics dashboard is only worth opening if you believe what it says. Over the past weeks we have gone through Galytics metric by metric, from the tiles at the top of the dashboard down to the individual queries behind them, and rebuilt the parts that could be sharper. The result is a dashboard that reports on your clock, answers more of the questions you actually have, and loads noticeably faster.
Here is what is new.
Which traffic is worth having
Traffic volume is the easy half of the question. The useful half is whether that traffic does anything once it arrives.
Top Sources now carries a conversion rate on every row. Referrers and all five UTM dimensions each show the share of their visitors who reached one of your goals, in a CR column beside the visitor count. A campaign that sends a thousand visitors and converts none of them no longer looks like your best channel.
The same column appears on landing pages, under the Entry tab in the Pages panel. You can now see which pages people arrive on and which of those arrivals turn into something. If your website has no goals configured yet, the column stays hidden, so the panels look exactly as they did.
Your day starts when your day starts
Every website in Galytics now has a reporting timezone, set in the website settings next to the domain name. Ranges are resolved on that clock: "today" begins at local midnight, and the hour buckets in "pageviews by hour of day" line up with the hours your visitors actually experienced.
If you run a European site, this is the difference between a daily traffic peak that is a couple of hours off and one you can plan around. New websites pick up the timezone from your browser automatically. Existing websites default to UTC, so nothing in your historical numbers shifts until you choose to change the setting.
Today compares against today
Every KPI tile shows a change against the previous period. For the "Today" range, that comparison now covers the same number of elapsed hours on both sides: nine hours of today against the first nine hours of yesterday. The chart stops at the current hour instead of drawing the rest of the day as zeroes.
It is a small change with a large effect on the view most people keep open, and custom ranges that end today are handled the same way.
Engagement you can actually read
Three improvements to how Galytics measures attention:
Scroll depth now measures reading, not page length. Depth is reported as a share of the distance available to scroll, so 0% is the top of the page and 100% is the bottom, on every page regardless of how long it is. Previously a short page could score high simply for being short. Now the numbers are comparable across your whole site, which is what makes ranking pages against each other worthwhile. Pages with nothing below the fold report no depth at all, because there was none to measure. Scroll depth also honours the dashboard filters now, so you can narrow to mobile visitors, or to one country, and see the panel narrow with you.
Session duration keeps counting while someone is reading. A visitor who lands on a long article, scrolls once and then reads for four minutes is recorded as four minutes. The tracker sends a lightweight heartbeat while the tab is in front and the reader is still active, and stops as soon as they go quiet, so a tab forgotten in the foreground times out normally rather than inflating your averages all afternoon.
Single-page apps count pageviews correctly. Modern frameworks call the browser history API for modals, tab switches and query string changes, not just for navigation. Galytics now records a pageview only when the path actually changes, and it handles the redirect patterns used by client-side routers. If you run a Vue, React or Svelte front end, your pageview counts just got more honest in both directions.
Numbers that reconcile
When two figures on the same screen describe the same thing, they should agree. Several places where they did not:
- Breakdown tables count visitors, matching the "Visitors" header above them, so each panel reconciles against the unique visitor tile at the top of the page. Where a panel genuinely counts something else, it now says so: exit pages are labelled Sessions, and the All tab of the Pages panel is labelled Pageviews.
- Goal conversion rate is measured per session, with the same population on both sides of the division. It can no longer read above 100% on a site with returning visitors.
- Average session duration is averaged per session, so it sits consistently alongside bounce rate and pageviews per session.
- Entry and exit page counts are exact the moment the data lands, rather than settling into place as the storage engine merges in the background.
- The Sessions list pages properly, all the way to the end, with a stable order between pages.
The KPI row was tidied up while we were there: visits now appear as a second line on the Unique visitors tile, shown when the two numbers differ, and six tiles fill two rows evenly.
Know which domain sent the traffic
Galytics now stores the hostname each session arrived on, alongside the domain you configured. That makes hostname filters work exactly as the settings page describes: keep a staging copy of your site out of your numbers, tell subdomains apart, and notice traffic arriving from a domain you do not recognise instead of quietly paying for it out of your quota.
Faster dashboards
Filtered panels now scope their lookups to your website up front, which lets ClickHouse read a narrow slice of data instead of scanning wide. On our own measurements across sixty websites and 1.5 million sessions, a filtered panel went from 37ms to 2ms, and the memory it needed dropped by more than a hundredfold. A dashboard fires around a dozen of those panels at once, so the saving compounds every time you apply a filter, and it no longer grows as the platform does.
Devices got a small honesty upgrade too: a visitor whose browser tells us nothing usable is now reported as Unknown rather than counted as a desktop.
Tested against a real database
Behind all of the above, we added a test suite that runs the analytics queries against a real ClickHouse instance and asserts what each one actually counts: that breakdowns count visitors, that exit pages net out the pages a visit moved off, that a conversion rate stays within a hundred percent, that a day starts at local midnight. Every fix described in this post is now pinned in place by a test, so it stays fixed.
That is the part you will never see, and it is the reason the rest of this post will keep being true.
Nothing to do
All of it is live, on every plan. The tracking script is served by us and updates itself, so there is nothing to reinstall and no configuration to migrate. The one setting worth a look is your reporting timezone, under website settings, if your audience is not in UTC.
Not using Galytics yet? Start a free trial. Setup takes a few minutes, no cookie banner required.
Privacy-friendly website analytics — no cookies, no banners.
Try Galytics free for 30 days