Articles
Writing about measuring a site honestly: what the numbers mean, which ones are lying to you, and what to do about it.
- Analytics without a cookie banner
When website analytics needs consent, when it does not, and why an id in localStorage counts as a cookie under ePrivacy.
- Is Google Analytics legal in the EU?
What the data protection rulings actually said, what the Data Privacy Framework changed, and what a defensible GA4 setup needs.
- When analytics revenue does not match your orders
Why analytics revenue and your order database disagree: the causes ranked by how often each is real, and how to tell them apart.
- Measuring an app and a site in one place
What goes wrong when an app and a site are measured by two different tools, and what has to be true for one tool to cover both.
- Self-hosted or hosted analytics
What running your own analytics costs once the install is done, when it is clearly right, and when the hosted option wins.
- How long to keep analytics data
How to choose a retention period from the reports you actually run, what the GDPR requires, and why most defaults are shorter.
- What bounce rate actually measures
Why a high bounce rate is not automatically bad, why GA4 changed the definition, and how to tell satisfaction from disappointment.
- Direct traffic is not a traffic source
Direct is where analytics puts visits it could not attribute. What is actually in that bucket, and how to get some of it back.
- When your analytics is showing you an estimate
Sampling, modelling and thresholding all replace counts with estimates. How to tell which your tool does, and when it matters.
- Why paid clicks show up as organic traffic
An untagged ad click looks identical to an organic one. Why, what it does to your reported cost per acquisition, and the fix.
- Why your heatmap and your analytics disagree
A heatmap counting fewer visits than your page views is not broken. Four reasons the two differ, and which number to trust when.
- When you need session recordings, and when you do not
Recordings answer what counting cannot, and cost more than anything else you collect. Turning them on for a reason, and off again.
- Collecting visitor feedback without a survey tool
What a feedback widget answers that a survey does not, why anchoring a comment to a page matters, and where it stops being right.
- Spotting a bad release in your app numbers
Why an app's version has to be on every screen and every error, what a crash-free rate does not tell you, and how to date it.
- Do you need three analytics tools?
Most teams end up with one tool for traffic, one for behaviour and one for feedback. What that costs, and when it is still right.
- Switching analytics without losing your history
You cannot import years of traffic into a new tool and get the same numbers. What to export, how long to run both, what survives.
- Why your traffic dropped overnight
A sudden fall is almost never a sudden fall in visitors. Nine causes in the order worth checking, starting with your own doing.
- Why two analytics tools never agree
Two tools side by side always produce two answers. Seven reasons they differ by design, and how to spot a broken install instead.
- Why Search Console and analytics disagree
One counts clicks in a results page, the other arrivals on your site. Six reasons the gap is expected, and what each is good for.
- How long before analytics tells you anything
A new site produces numbers at once and answers almost nothing for weeks. What is readable on day one, in a month, in a year.
- Do heatmaps and session recordings need consent?
Session replay raises two separate legal questions and most tools answer one. What storage, masking and a lawful basis each do.
- App analytics without Firebase
What you give up and gain by taking Google Analytics for Firebase out of an app, including the piece you should keep regardless.
- Three ways ClickHouse gave us the wrong number
Aggregate states that are not numbers, an average of nothing that is not null, and a table that needs FINAL. Three wrong answers.
- Designing MCP tools a model will not misread
Six decisions in an analytics MCP server and what each defends against, including why an outage returns an error not zeroes.