[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-pages":3},[4,259,398,637,777,1097,1258,1471,1664],{"id":5,"title":6,"body":7,"date":247,"description":248,"draft":249,"extension":250,"image":251,"meta":252,"navigation":254,"path":255,"seo":256,"stem":257,"__hash__":258},"blog\u002Fblog\u002Fa-fresh-new-cabin.md","A fresh new Cabin",{"type":8,"value":9,"toc":235},"minimark",[10,14,19,31,34,50,54,63,85,92,96,102,113,116,120,126,132,136,142,149,152,156,164,177,181,184,210,213,216,220,229,232],[11,12,13],"p",{},"Welcome to a fresh, new Cabin. Not just a lick of paint. Nearly every aspect of Cabin has been scrutinised, redesigned and rebuilt, while keeping the familiar feel and functionality that's made Cabin so popular over the last 6 years.",[15,16,18],"h2",{"id":17},"a-brand-new-design-with-dark-mode-too","A brand-new design — with dark mode too",[11,20,21],{},[22,23],"img",{"alt":24,"className":25,"src":30},"The new Cabin",[26,27,28,29],"shadow-sm","border","border-muted","rounded-md","\u002Fimg\u002Fblog\u002Fdark-mode.png",[11,32,33],{},"The dashboard interface has been redesigned and rebuilt, while retaining the same one-page scrolling experience. Modern, faster, and far nicer to spend time in. You'll notice extended detail through modals and panels.",[11,35,36,37,41,42,49],{},"And yes: ",[38,39,40],"strong",{},"dark mode, throughout."," Every page, every chart, every corner. Just tap ",[43,44],"u-color-mode-button",{"className":45,"color":47,"variant":48},[46],"align-middle","neutral","subtle"," next to the Cabin logo to toggle.",[15,51,53],{"id":52},"opening-the-doors-to-ai","Opening the doors to AI",[55,56],"color-mode-img",{"alt":57,"className":58,"dark":61,"light":62},"Cabin MCP in the dashboard",[26,27,28,29,59,60],"my-12","w-full","\u002Fimg\u002Fblog\u002Fmcp-dark.png","\u002Fimg\u002Fblog\u002Fmcp-light.png",[11,64,65,66,73,74,78,79,78,82],{},"A brand new ",[67,68,72],"a",{"href":69,"rel":70},"https:\u002F\u002Fwithcabin.com\u002Fblog\u002Fmcp-ai-chat-support",[71],"nofollow","MCP"," connector lets you connect Claude, ChatGPT, Gemini, Cursor and more to Cabin and ask it things like: ",[75,76,77],"em",{},"How many pageviews did I get last week?",", ",[75,80,81],{},"Which referral sources drive the most traffic to my blog?",[75,83,84],{},"What's the average time on page for my blog?",[11,86,87,88,91],{},"All admin features are available through the MCP so you can completely control Cabin with your AI agent. Setup domains, install the script, create dashboards and much more. It's available on ",[38,89,90],{},"every plan, including Free",".",[15,93,95],{"id":94},"brand-your-dashboards","Brand your dashboards",[55,97],{"alt":98,"className":99,"dark":100,"light":101},"A branded Cabin dashboard",[26,27,28,29,59],"\u002Fimg\u002Fblog\u002Fbranding-dark.png","\u002Fimg\u002Fblog\u002Fbranding-light.png",[11,103,104,105,108,109,112],{},"You can now upload a ",[38,106,107],{},"logo"," and pick an ",[38,110,111],{},"accent colour"," for each domain, and it carries through to your dashboards and the public dashboards you share.",[11,114,115],{},"This is an excellent feature for agencies and teams who want to provide a branded experience to their clients.",[15,117,119],{"id":118},"distinguish-ai-traffic-from-real-visitors","Distinguish AI traffic from real visitors",[55,121],{"alt":122,"className":123,"dark":124,"light":125},"AI agent traffic in the Cabin dashboard",[26,27,28,29],"\u002Fimg\u002Fblog\u002Fagents-dark.png","\u002Fimg\u002Fblog\u002Fagents-light.png",[11,127,128,129,91],{},"Cabin now separates AI traffic from real visitors. Agent traffic isn't counted as part of your pageviews. ",[38,130,131],{},"Now available on the Agency plan",[15,133,135],{"id":134},"email-reports-for-the-whole-team","Email reports for the whole team",[55,137],{"alt":138,"className":139,"dark":140,"light":141},"Weekly email reports with multiple recipients",[26,27,28,29],"\u002Fimg\u002Fblog\u002Freports-dark.png","\u002Fimg\u002Fblog\u002Freports-light.png",[11,143,144,145,148],{},"Weekly email reports can now go to ",[38,146,147],{},"multiple recipients",". Add your teammates, your stakeholders, or — if you're an agency — every client and the account manager who looks after them, and everyone gets the numbers in their inbox automatically.",[11,150,151],{},"This is a highly requested feature and it's now available on the Agency plan.",[15,153,155],{"id":154},"more-accurate-co2-reporting","More accurate CO2 reporting",[55,157],{"alt":158,"className":159,"dark":162,"light":163},"CO2 reporting in the Cabin dashboard",[26,27,28,29,160,161,60],"max-w-2xl","mx-auto","\u002Fimg\u002Fblog\u002Fenergy-dark.png","\u002Fimg\u002Fblog\u002Fenergy-light.png",[11,165,166,167,172,173,176],{},"Sustainability has been part of Cabin since day one. We've worked closely with ",[67,168,171],{"href":169,"rel":170},"https:\u002F\u002Fwww.thegreenwebfoundation.org\u002F",[71],"The Green Web Foundation"," to ensure our CO2 estimates are as accurate as possible. Our CO2 estimates now use the latest model from ",[67,174,171],{"href":169,"rel":175},[71],"'s CO2.js — so the emissions figures for your pages reflect the most current research.",[15,178,180],{"id":179},"new-plans-more-for-everyone","New plans: more for everyone",[11,182,183],{},"Ok, this is the big one. For six years, Cabin has only ever had ONE payment plan and the price has never changed. In order to make this more sustainable and fairer, we've now introduced three plans:",[185,186,187,198,204],"ul",{},[188,189,190,193,194,197],"li",{},[38,191,192],{},"Free — $0."," Now up to ",[38,195,196],{},"10 domains"," (it used to be one), public dashboards, MCP access and data export. 10,000 pageviews a month.",[188,199,200,203],{},[38,201,202],{},"Plus — $14\u002Fmo"," ($140\u002Fyr). Unlimited domains, 1M pageviews a month, a full year of data retention, custom events, carbon reporting, bypass ad-blockers.",[188,205,206,209],{},[38,207,208],{},"Agency — $59\u002Fmo"," ($590\u002Fyr). For agencies, studios and in-house teams. Everything in Plus, up to 5M pageviews a month, unlimited retention, password-protected dashboards, team email reports to multiple recipients, and monitor AI traffic.",[11,211,212],{},"The main thing that's changed is that we no longer offer unlimited pageviews on the free plan. Cabin is still the best value privacy-first, cookie-free analytics out there. More capable than ever, and priced to stay that way. All plans have 2 months free when paid annually.",[11,214,215],{},"If you are currently on the (legacy) Pro plan, you can keep it, with all it's features.",[15,217,219],{"id":218},"more-to-come","More to come...",[11,221,222,223,228],{},"The new Cabin is live now. If you're already a customer, everything you had is here and better. If you're not, ",[67,224,227],{"href":225,"rel":226},"https:\u002F\u002Fwithcabin.com\u002Fsignup",[71],"start for free"," — no cookie banners, no credit card — and see how good analytics can feel when they respect your visitors and the planet.",[11,230,231],{},"I can't wait to hear what you think.",[11,233,234],{},"— Nic Mulvaney, Founder of Cabin",{"title":236,"searchDepth":237,"depth":237,"links":238},"",2,[239,240,241,242,243,244,245,246],{"id":17,"depth":237,"text":18},{"id":52,"depth":237,"text":53},{"id":94,"depth":237,"text":95},{"id":118,"depth":237,"text":119},{"id":134,"depth":237,"text":135},{"id":154,"depth":237,"text":155},{"id":179,"depth":237,"text":180},{"id":218,"depth":237,"text":219},"2026-07-03","Updating Cabin for a new generation of users.",false,"md","\u002Fimg\u002Fblog\u002Fs-baker-zzvEeUlW4SI-unsplash.jpg",{"imageCredit":253},"Art by \u003Ca href=\"https:\u002F\u002Funsplash.com\u002F@sbakerprofile?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">S. Baker\u003C\u002Fa> on \u003Ca href=\"https:\u002F\u002Funsplash.com\u002Fphotos\u002Flogo-zzvEeUlW4SI?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Unsplash\u003C\u002Fa>",true,"\u002Fblog\u002Fa-fresh-new-cabin",{"title":6,"description":248},"blog\u002Fa-fresh-new-cabin","sAD7zZq-skO94y5XBz9SIT7wRw5WQWazlhA-m2Xcnq8",{"id":260,"title":261,"body":262,"date":390,"description":391,"draft":249,"extension":250,"image":392,"meta":393,"navigation":254,"path":394,"seo":395,"stem":396,"__hash__":397},"blog\u002Fblog\u002Fcabin-analytics-for-agencies.md","Analytics your clients will open",{"type":8,"value":263,"toc":380},[264,267,270,274,277,280,284,287,290,294,297,300,304,307,315,328,332,340,343,347,350,353,357,360,363,367,370,373],[11,265,266],{},"Analytics is one of those things every client expects but nobody enjoys setting up. A tangle of Google Analytics properties, a separate login for each, a reporting interface your clients can't make sense of, and a cookie banner you have to justify to their legal team.",[11,268,269],{},"Cabin makes all of that disappear. Here's why it works for agencies juggling lots of clients.",[15,271,273],{"id":272},"one-account-every-client-site","One account, every client site",[11,275,276],{},"Add every client site to a single account. There's no per-site fee. Free covers 10 sites, and both paid plans are unlimited: Plus at $14 a month, Agency at $59.",[11,278,279],{},"Each plan comes with a monthly pageview allowance for the whole account, not per site: 10,000 on Free, 1M on Plus, 5M on Agency. Forty small client sites will get through 10,000 in a fortnight, and I'd rather you saw that now than halfway through a month. The price never moves with your traffic, so you know what you're paying before the invoice arrives.",[15,281,283],{"id":282},"give-every-client-their-own-dashboard","Give every client their own dashboard",[11,285,286],{},"Every site can have a public dashboard. One link, no account, no invite. Your client opens it and sees their current numbers.",[11,288,289],{},"Set it once in your kickoff email and the monthly reporting ritual goes away.",[15,291,293],{"id":292},"lock-it-down-and-make-it-theirs","Lock it down, and make it theirs",[11,295,296],{},"On Agency you can password-protect any dashboard, so only you and your client can see it.",[11,298,299],{},"Agency also lets you brand each one. Upload the client's logo, pick an accent colour, and it stops looking like a third-party tool you bolted on.",[15,301,303],{"id":302},"no-cookie-banner-nothing-to-explain-to-legal","No cookie banner, nothing to explain to legal",[11,305,306],{},"Cabin doesn't set cookies, doesn't fingerprint, and doesn't collect personal data, so it needs no consent under GDPR, CCPA, PECR or the ePrivacy Directive. No banner on your client's site. No consent platform slowing the build down.",[11,308,309,310,314],{},"You can also switch on a public privacy page for any domain, at ",[311,312,313],"code",{},"withcabin.com\u002Fprivacy\u002Ftheirdomain.com",". It explains in plain English what their analytics does and doesn't do, carries a set of compliance badges, and prints cleanly. Free on every plan, one toggle in settings.",[11,316,317,318,322,323,327],{},"That's something you can send straight to a client's privacy officer. Analytics data is stored in AWS Ireland with a backup in London, and the small endpoints that receive hits run in several regions, some outside the EU. They write nothing to disk: a visitor's IP is held in memory just long enough to work out a country, then discarded. Transfers between regions are covered by Standard Contractual Clauses. ",[67,319,321],{"href":320},"\u002Fblog\u002Fgdpr-compliant-analytics-without-consent-banners","The GDPR write-up"," has the detail, ",[67,324,326],{"href":325},"\u002Fprivacy","our privacy policy"," the rest.",[15,329,331],{"id":330},"show-them-how-much-of-their-traffic-is-human","Show them how much of their traffic is human",[11,333,334,335,339],{},"AI assistants visit websites constantly now, and ",[67,336,338],{"href":337},"\u002Fblog\u002Fai-bots-are-inflating-your-analytics","most analytics tools count every hit as a visitor",". One site in my own Cabin account, plugins.audio, runs at 46.62% agent traffic. That's one site and I wouldn't generalise from it, but it shows how far a report can drift, and always in the flattering direction.",[11,341,342],{},"Agency splits the two apart. You get AI agents and humans as percentages side by side, plus a breakdown of which assistants are visiting and how often. Your client sees it on their shared dashboard too.",[15,344,346],{"id":345},"simple-enough-that-your-client-actually-uses-it","Simple enough that your client actually uses it",[11,348,349],{},"Google Analytics is complex enough that most clients never log in. They wait for you to interpret it.",[11,351,352],{},"Cabin is one readable screen. Visitors, top pages, where they came from, what they clicked. When a tool is this easy, clients engage with it, and they associate that clarity with you.",[15,354,356],{"id":355},"the-rest-of-it","The rest of it",[11,358,359],{},"From Plus up you can serve the tracking script from your client's own domain, which gets you past ad blockers and closes the gap in their numbers. Plus also adds carbon reporting and weekly email reports. On Agency those reports can go to as many recipients as you like, so every client and their account manager gets the numbers on Monday morning.",[11,361,362],{},"Cabin's MCP works on every plan including Free, so you can point Claude or ChatGPT at your account and ask about any client's traffic. The REST API is available from Plus. And the script is 1.2KB, so it won't undo your page speed work.",[15,364,366],{"id":365},"a-better-offering-for-your-clients","A better offering for your clients",[11,368,369],{},"Every client gets a shareable, cookie-free dashboard that's accurate and easy to use, plus a privacy page you can hand to their legal team without a meeting. It costs very little and takes minutes to set up.",[11,371,372],{},"Privacy-first analytics used to be a compromise. Now it's the better product.",[11,374,375,379],{},[67,376,378],{"href":377},"\u002Fauth\u002Fsignup","Try Cabin free",". Add your client sites, share a dashboard for each, and be done before lunch.",{"title":236,"searchDepth":237,"depth":237,"links":381},[382,383,384,385,386,387,388,389],{"id":272,"depth":237,"text":273},{"id":282,"depth":237,"text":283},{"id":292,"depth":237,"text":293},{"id":302,"depth":237,"text":303},{"id":330,"depth":237,"text":331},{"id":345,"depth":237,"text":346},{"id":355,"depth":237,"text":356},{"id":365,"depth":237,"text":366},"2026-06-25","Analytics for agencies. Every client site on one account, a shareable cookie-free dashboard for each, and a privacy page for their legal team.","\u002Fimg\u002Fblog\u002Fmountains.webp",{},"\u002Fblog\u002Fcabin-analytics-for-agencies",{"title":261,"description":391},"blog\u002Fcabin-analytics-for-agencies","er4EcUY6Ea9pQHCIPCzCas9Acp4D84zMgZSZTUYIobg",{"id":399,"title":400,"body":401,"date":629,"description":630,"draft":249,"extension":250,"image":631,"meta":632,"navigation":254,"path":633,"seo":634,"stem":635,"__hash__":636},"blog\u002Fblog\u002F7-best-google-analytics-alternatives.md","Life after Google Analytics",{"type":8,"value":402,"toc":617},[403,406,409,413,416,425,434,437,441,448,451,454,461,465,472,475,482,486,493,496,499,503,510,517,520,524,531,538,541,545,551,554,557,561,568,575,578,582,585,588,598,602,605,608,611],[11,404,405],{},"GA4 has a way of turning a simple question into an afternoon. You want to know which posts people read last week. Forty minutes later you're halfway through building an exploration, and the number at the end has a little icon beside it warning you it's an estimate.",[11,407,408],{},"There are seven services below that answer that question in about four seconds. Where something couldn't be verified, it's been left out rather than guessed at.",[15,410,412],{"id":411},"why-people-leave-ga4","Why people leave GA4",[11,414,415],{},"Start with the banner - it's the one that actually bites. GA4 sets cookies by default, and cookies that identify a returning visitor need consent in the EU and UK. Every person who declines is a person your analytics can't see, and getting that consent is its own project now, not a checkbox.",[11,417,418,419,424],{},"Google's current answer is Consent Mode: a signal wired into every tag, telling Google what each visitor agreed to. Get it right and Google fills the gap left by visitors who said no with ",[67,420,423],{"href":421,"rel":422},"https:\u002F\u002Fsupport.google.com\u002Fanalytics\u002Fanswer\u002F9976101",[71],"modelled data"," - a statistical guess, not a real number. Get it wrong and you lose that modelling too, plus ad personalisation. \"Just add GA4\" hasn't been a five-minute job for a while.",[11,426,427,428,433],{},"The good news: Google Analytics itself is not illegal in Europe. The 2022 rulings people still quote were about US data transfers, since replaced by ",[67,429,432],{"href":430,"rel":431},"https:\u002F\u002Fwww.cnil.fr\u002Fen\u002Fgoogle-analytics-and-data-transfers-how-make-your-analytics-tool-compliant-gdpr",[71],"a new adequacy decision on 10 July 2023",". What's still live is the consent problem above, not the service's legality.",[11,435,436],{},"And the interface. Google runs training courses for a product that reports how many people visited your website.",[15,438,440],{"id":439},"cabin","Cabin",[11,442,443],{},[22,444],{"alt":445,"className":446,"src":447},"The Cabin dashboard",[26,27,28,29],"\u002Fimg\u002Fblog\u002Falt-cabin.webp",[11,449,450],{},"Cabin generates no unique identifier for a visitor - not a cookie, not a fingerprint, not a server-side hash of IP and user agent. Several services on this page do compute a hash and just throw it away nightly, which is a reasonable design too. Cabin has nothing to discard, because nothing was derived in the first place.",[11,452,453],{},"A few things worth knowing that most of this list doesn't have. Every plan, including Free, comes with MCP access, so you can point Claude or ChatGPT at your own dashboard and just ask it questions. Paid plans add carbon reporting, an estimate of the CO2 your pages generate; Agency separates AI-agent traffic from real visitors, so a crawler binge doesn't quietly inflate your numbers. Free also covers ten sites forever, more generous than most free tiers here.",[11,455,456,457,460],{},"What Cabin ",[75,458,459],{},"doesn't"," have: funnels, session replay, heatmaps, A\u002FB testing, or a GA importer. On your list? Skip ahead to Matomo.",[15,462,464],{"id":463},"plausible","Plausible",[11,466,467],{},[22,468],{"alt":469,"className":470,"src":471},"The Plausible dashboard",[26,27,28,29],"\u002Fimg\u002Fblog\u002Falt-plausible.webp",[11,473,474],{},"Plausible is the service most people mean when they say \"privacy-first analytics\". Funnels, saved segments, ecommerce revenue attribution and a Stats API, all cookieless, all held in Falkenstein, Germany. It's AGPLv3 and self-hostable.",[11,476,477,478,481],{},"Check the quota before you sign up: their docs count custom events ",[75,479,480],{},"and"," pageviews together, and outbound clicks, downloads and form submissions all count as custom events. If you've enabled those, the quota goes faster than the headline number suggests.",[15,483,485],{"id":484},"fathom","Fathom",[11,487,488],{},[22,489],{"alt":490,"className":491,"src":492},"The Fathom dashboard",[26,27,28,29],"\u002Fimg\u002Fblog\u002Falt-fathom.webp",[11,494,495],{},"Fathom looks expensive until you count your domains - 50 sites are included at entry, and nothing else here comes close on a per-site basis.",[11,497,498],{},"EU visitor data is processed in the EU automatically, no configuration needed, and personal data from EU visitors never touches US infrastructure. Non-EU traffic runs through AWS.",[15,500,502],{"id":501},"matomo","Matomo",[11,504,505],{},[22,506],{"alt":507,"className":508,"src":509},"The Matomo dashboard",[26,27,28,29],"\u002Fimg\u002Fblog\u002Falt-matomo.webp",[11,511,512,513,516],{},"Two things about Matomo get repeated wrongly everywhere. First: it sets first-party cookies ",[75,514,515],{},"by default"," - cookieless is something you configure, not the out-of-the-box behaviour. Second: Matomo Cloud bills in hits, not pageviews, and a hit includes downloads, site searches, bot traffic and AI-assistant requests too, so 50,000 hits is considerably less real traffic than it sounds.",[11,518,519],{},"Now the generous part. Matomo's feature depth isn't close to anything else here: heatmaps, session recording, A\u002FB testing, cohorts, a GA importer, server logs with no JavaScript at all. On-Premise Community is GPLv3 and free forever. Want Google-Analytics-class capability without Google? I'd rather point you at Matomo now than have you discover in month three that Cabin has no funnels.",[15,521,523],{"id":522},"simple-analytics","Simple Analytics",[11,525,526],{},[22,527],{"alt":528,"className":529,"src":530},"The Simple Analytics dashboard",[26,27,28,29],"\u002Fimg\u002Fblog\u002Falt-simple-analytics.webp",[11,532,533,534,537],{},"Simple Analytics has quietly become one of the more interesting services here. It's stopped pitching itself purely as a GA4 replacement and started pitching itself as a layer you run ",[75,535,536],{},"alongside"," GA4 or Adobe, exporting into your own warehouse or Looker Studio. They've done the SOC 2 work too, which matters once procurement gets involved.",[11,539,540],{},"Pricing is per user rather than per site, which is the number to check if a whole marketing team needs logins. Data stays in the Netherlands, and there are no cookies.",[15,542,544],{"id":543},"cloudflare-web-analytics","Cloudflare Web Analytics",[11,546,547],{},[22,548],{"alt":544,"className":549,"src":550},[26,27,28,29],"\u002Fimg\u002Fblog\u002Falt-cloudflare.webp",[11,552,553],{},"Cloudflare Web Analytics is free, with no cookies and no paid tier. If you already proxy traffic through Cloudflare, collection needs no JavaScript at all - nobody else here offers that.",[11,555,556],{},"The catch: unsampled data is kept for seven days, then aggregated down to roughly a tenth. Fine for a hobby project, not fine if you're reporting quarter-on-quarter growth to anyone.",[15,558,560],{"id":559},"umami","Umami",[11,562,563],{},[22,564],{"alt":565,"className":566,"src":567},"The Umami dashboard",[26,27,28,29],"\u002Fimg\u002Fblog\u002Falt-umami.webp",[11,569,570,571,574],{},"Umami bills in events, and the arithmetic catches people out - one pageview is one event, and every saved property on it is ",[75,572,573],{},"also"," an event, so a pageview carrying five properties costs six.",[11,576,577],{},"The licence is why developers pick it. MIT is the most permissive here by a distance, so you can fork it and use it commercially with almost no obligation. Self-hosting is free.",[15,579,581],{"id":580},"side-by-side","Side by side",[11,583,584],{},"Prices are as each vendor lists them, so the currencies are theirs, not a conversion. The bar is script size, drawn to scale against the largest one here.",[586,587],"analytics-compare",{},[11,589,590,591,594,595,91],{},"Cabin's script is the smallest, only a little ahead of Plausible - not a real advantage, the bars are almost the same length. The gap that matters is further along: Matomo runs over 20 times heavier, Google's ",[311,592,593],{},"gtag.js"," well over 100 times. Check it yourself rather than trust a blog post, since it moves: ",[311,596,597],{},"curl -s -H \"Accept-Encoding: gzip\" \u003Cscript-url> | wc -c",[15,599,601],{"id":600},"picking-one","Picking one",[11,603,604],{},"Start with the unit, not the price. Pageviews, hits and events are three different products wearing the same number, and it's the most common way people end up on the wrong plan - work out roughly what your site generates in the vendor's own unit, then compare.",[11,606,607],{},"After that it's three questions: depth, data location, site count. Funnels and session replay point at Matomo. \"The EU and nowhere else\" points at Plausible, Simple Analytics or Matomo Cloud. A lot of small sites points at Fathom or Cabin, since per-site pricing is where the money goes if you're managing sites for clients.",[11,609,610],{},"Whatever you pick, run it next to GA4 for a fortnight before you pull the old tag. The numbers won't match, and knowing by how much beforehand saves an awkward conversation later.",[11,612,613,614,91],{},"Cabin's free plan covers 10 sites and 10,000 pageviews a month, no card required. ",[67,615,616],{"href":377},"Start there",{"title":236,"searchDepth":237,"depth":237,"links":618},[619,620,621,622,623,624,625,626,627,628],{"id":411,"depth":237,"text":412},{"id":439,"depth":237,"text":440},{"id":463,"depth":237,"text":464},{"id":484,"depth":237,"text":485},{"id":501,"depth":237,"text":502},{"id":522,"depth":237,"text":523},{"id":543,"depth":237,"text":544},{"id":559,"depth":237,"text":560},{"id":580,"depth":237,"text":581},{"id":600,"depth":237,"text":601},"2026-02-26","Seven privacy-first Google Analytics alternatives, compared on price, cookies and script size.","\u002Fimg\u002Fblog\u002Fga-alternatives-hero.webp",{},"\u002Fblog\u002F7-best-google-analytics-alternatives",{"title":400,"description":630},"blog\u002F7-best-google-analytics-alternatives","aDVZYvxUMBWKtucqXcw0OhdUYfPSfXjIVEYfMI5ogL4",{"id":638,"title":639,"body":640,"date":770,"description":771,"draft":249,"extension":250,"image":772,"meta":773,"navigation":254,"path":337,"seo":774,"stem":775,"__hash__":776},"blog\u002Fblog\u002Fai-bots-are-inflating-your-analytics.md","The robots are reading",{"type":8,"value":641,"toc":763},[642,645,648,652,655,658,661,664,668,671,674,682,686,700,703,717,721,728,737,740,743,746,750,753],[11,643,644],{},"Traffic is up. Nobody bought anything, nobody replied to the newsletter, and support is as quiet as it was in December. The graph looks like a win and the month doesn't feel like one.",[11,646,647],{},"Before you go hunting for the channel that's underperforming, check who was actually on the site. A decent share of what most analytics tools happily call a visitor is now software.",[15,649,651],{"id":650},"two-different-things-one-name","Two different things, one name",[11,653,654],{},"\"AI traffic\" gets used for two populations that behave nothing alike, and mixing them produces a number that means nothing at all.",[11,656,657],{},"The first is training crawlers. GPTBot, ClaudeBot, CCBot, Bytespider, PerplexityBot. They arrive in volume, work through your sitemap methodically, and they do not run JavaScript. That last part is the important one. If your analytics is a script inside the page, those crawlers are invisible to it. They exist in your server logs and nowhere else.",[11,659,660],{},"The second is assistant fetches. ChatGPT-User, Claude-User, Perplexity-User. Somebody asked an assistant a question and the assistant went off and read your page in order to answer it. The volume is much lower. The intent behind it is much higher, because there is a real person waiting at the other end, and they might well click through afterwards. These do run JavaScript, so a client-side script can see them.",[11,662,663],{},"One is a machine copying you. The other is a person reading you at one remove. Averaging them together tells you nothing useful about either.",[15,665,667],{"id":666},"what-it-does-to-your-numbers","What it does to your numbers",[11,669,670],{},"Bot requests almost never carry a referrer, so they land in your Direct bucket. Direct traffic climbing steadily with no campaign, no press mention and no launch behind it is the most common early symptom of bot inflation, and it's the one people most often mistake for organic brand growth.",[11,672,673],{},"Crawlers also request a page and leave, which is indistinguishable from a human bouncing. Your bounce rate goes up. Your time on page goes down. Neither number changed because of anything a person did.",[11,675,676,677,681],{},"Then there's the awkward one. If your analytics runs entirely in the browser and reports no bot traffic whatsoever, that is not evidence that you have no bot traffic. It's evidence that your script never ran. A client-side tool cannot see something that never executed JavaScript, so the absence in the dashboard is an absence of measurement, not an absence of crawlers. Server logs are the only place they show up. This is the same reason ",[67,678,680],{"href":679},"\u002Fblog\u002Fhow-cabin-measures-unique-visitors-without-cookies","our cookieless visitor counting"," has to be explicit about what it can and can't observe.",[15,683,685],{"id":684},"what-cabin-shows-you-and-what-it-misses","What Cabin shows you, and what it misses",[11,687,688,689,692,693,696,697,91],{},"Cabin has an ",[38,690,691],{},"AI Agents"," section in the dashboard that splits agent hits out from human ones and breaks them down by operator. It's on the ",[38,694,695],{},"Agency"," plan, which is $59\u002Fmo, alongside the other things ",[67,698,699],{"href":394},"agencies tend to need",[11,701,702],{},"Two things are true on every plan, including Free. Agent traffic is never counted in your pageviews, and it is never billed. Your allowance is human visits only, so nobody pays for a crawler.",[11,704,705,706,78,709,712,713,716],{},"Now the part a competitor won't tell you. Cabin's tracking script drops any user agent containing ",[311,707,708],{},"bot",[311,710,711],{},"spider"," or ",[311,714,715],{},"crawl"," in the browser, before the request is ever sent. That was written to keep junk out of human counts, and it does that job well. It also means the high-volume training crawlers never reach our servers to be classified in the first place. So what the AI Agents view mostly shows you today is the assistant traffic, not the crawler flood. The classifier on the server recognises all the big crawler user agents already. They just never arrive.",[15,718,720],{"id":719},"robotstxt-and-what-blocking-actually-costs","robots.txt, and what blocking actually costs",[11,722,723,724,727],{},"If you want crawlers to stop, ",[311,725,726],{},"robots.txt"," is still the lever:",[729,730,735],"pre",{"className":731,"code":733,"language":734},[732],"language-text","User-agent: GPTBot\nDisallow: \u002F\n\nUser-agent: ClaudeBot\nDisallow: \u002F\n\nUser-agent: CCBot\nDisallow: \u002F\n","text",[311,736,733],{"__ignoreMap":236},[11,738,739],{},"Two caveats, and the second one is the expensive one.",[11,741,742],{},"Not every crawler respects the file. It's a request, not a firewall, and the ones with the worst manners are precisely the ones ignoring it.",[11,744,745],{},"More importantly, blocking training crawlers means your content stops appearing in AI-generated answers. If somebody asks an assistant a question your documentation answers perfectly, and you've locked the door, the assistant recommends whoever left theirs open. For a lot of sites that referral path is growing faster than search. Blocking is a real option, it just isn't a free one, and it's worth deciding deliberately rather than pasting the block in because bots feel like something you should stop.",[15,747,749],{"id":748},"which-half-is-it","Which half is it",[11,751,752],{},"The interesting question was never how much of your traffic is bots. It's which of the two kinds you're looking at. Crawler volume is a hosting bill and a licensing argument. Assistant fetches are people, arriving through a door that didn't exist three years ago, and they deserve to be measured properly rather than filtered away as noise.",[11,754,755,756,759,760,91],{},"Cabin gives you human numbers you can trust on every plan, ",[67,757,758],{"href":320},"no cookie banner needed",". If you want the agent breakdown on top of that, it's on ",[67,761,695],{"href":762},"\u002Fpricing",{"title":236,"searchDepth":237,"depth":237,"links":764},[765,766,767,768,769],{"id":650,"depth":237,"text":651},{"id":666,"depth":237,"text":667},{"id":684,"depth":237,"text":685},{"id":719,"depth":237,"text":720},{"id":748,"depth":237,"text":749},"2026-02-20","AI bot traffic comes in two kinds, training crawlers and assistant fetches. What bot traffic analytics can see, what it can't, and why it matters.","\u002Fimg\u002Fblog\u002Fwasher.jpg",{},{"title":639,"description":771},"blog\u002Fai-bots-are-inflating-your-analytics","J42wUUyIjbLO2IyrXoiN59kFiewxLp2IFjUb4wg-Jnc",{"id":778,"title":779,"body":780,"date":1089,"description":1090,"draft":249,"extension":250,"image":1091,"meta":1092,"navigation":254,"path":1093,"seo":1094,"stem":1095,"__hash__":1096},"blog\u002Fblog\u002Fhow-to-measure-your-websites-carbon-footprint.md","What your website burns",{"type":8,"value":781,"toc":1081},[782,785,788,792,795,824,828,835,838,841,845,884,895,899,908,915,926,930,939,952,967,970,982,989,993,996,1002],[11,783,784],{},"Every page load spends electricity. Some of it on the server answering the request, some on the networks carrying the response, and most of it on the phone or laptop doing the rendering. Nobody sends you an itemised bill, so it's easy to treat the cost as zero.",[11,786,787],{},"Your website's carbon footprint is measurable, though. Methods are public, and many fixes are within your control.",[15,789,791],{"id":790},"where-the-energy-goes","Where the energy goes",[11,793,794],{},"Three things decide the number.",[796,797,798,808,816],"ol",{},[188,799,800,803,804,807],{},[38,801,802],{},"How much data you send"," ",[805,806],"br",{},"Bytes have to be moved, and moving them costs energy at every hop. A page carrying a 5MB hero image is not in the same category as one weighing 200KB.",[188,809,810,803,813,815],{},[38,811,812],{},"Electricity behind your host",[805,814],{},"A server on a grid running mostly on wind and hydro carries a different carbon cost than one sitting on coal, for exactly the same work.",[188,817,818,803,821,823],{},[38,819,820],{},"The visitor's device",[805,822],{},"This is the part people forget. Rendering your page drains someone's battery, and heavy JavaScript, large media and expensive layout work all cost more of it. Device is usually the largest of the three.",[15,825,827],{"id":826},"what-about-those-ai-models","What about those AI models?",[11,829,830,831,834],{},"It's an obvious objection. Data centres used around ",[38,832,833],{},"415 TWh"," of electricity in 2024, about 1.5% of the world's supply, and the IEA expects that to more than double by 2030 as AI builds out - to roughly what Japan gets through in a year.",[11,836,837],{},"Set that against compressing a hero image, it can feel like sorting your yoghurt pots for recycling while a huge refinery runs next door.",[11,839,840],{},"But you don't control the refinery, and you do control your own pages. Fixes cost nothing, they make your site faster at the same time, and they're the part you can act on. Not being able to fix all of it doesn't mean you should stop looking.",[15,842,844],{"id":843},"what-makes-a-page-heavy","What makes a page heavy",[796,846,847,855,863,871],{},[188,848,849,803,852,854],{},[38,850,851],{},"Images, almost always",[805,853],{},"An uncompressed photo straight off a camera can run to several megabytes. The same picture as a well-tuned WebP or AVIF is usually a couple of hundred kilobytes. Nothing else gives you that much return for that little work.",[188,856,857,803,860,862],{},[38,858,859],{},"Video",[805,861],{},"Autoplaying background video is the most expensive thing you can casually add to a page.",[188,864,865,803,868,870],{},[38,866,867],{},"Fonts",[805,869],{},"Quietly bad, because it's so easy to load four weights when the design only uses two.",[188,872,873,803,876,878,879,883],{},[38,874,875],{},"Other people's JavaScript",[805,877],{},"Third-party scripts grow without anyone deciding to grow them - a tag here, a chat widget there, a consent manager on top, all arriving on every page load. ",[67,880,882],{"href":881},"\u002Fblog\u002Fcookie-banners-are-killing-your-conversion-rate","Consent banners"," usually cost you bytes and accurate numbers at the same time.",[11,885,886,887,890,891,894],{},"Open your network tab, sort by transfer size, and ask it of every third-party file: does this earn its bytes? Analytics included, ours as much as anyone's. Cabin's script is about ",[38,888,889],{},"1.2KB"," and Google's gtag.js is about ",[38,892,893],{},"145KB",", though both are worth measuring yourself rather than trusting a number in a blog post, because sizes drift.",[15,896,898],{"id":897},"how-to-measure-your-site","How to measure your site",[11,900,901,902,907],{},"For a quick read on a single page, Cabin's free ",[67,903,906],{"href":904,"rel":905},"https:\u002F\u002Fwithcabin.com\u002Fhow-green-is-your-website",[71],"How Green Is Your Website?"," tool will analyse any URL.",[11,909,910,911,914],{},"It measures ",[75,912,913],{},"one"," load of one URL. That's a benchmark, not a footprint. What you actually emit depends on which pages people visit, and how many of them arrive with a warm cache.",[11,916,917,918,921,922,925],{},"Cabin's Energy & Carbon section works from what your real visitors loaded instead. It shows total data transferred, CO2 per unique visitor (which Cabin ",[67,919,920],{"href":679},"counts without cookies","), and a per-page list so you can see which URL is doing the damage. Carbon reporting is a ",[38,923,924],{},"Plus"," feature and above.",[15,927,929],{"id":928},"how-to-improve-your-websites-footprint","How to improve your website's footprint",[11,931,932,933,938],{},"Start with images, since that's where most of the weight is. ",[67,934,937],{"href":935,"rel":936},"https:\u002F\u002Fsquoosh.app",[71],"Squoosh",", Google's free browser-based compressor, will turn a camera photo into a WebP a fraction of the size, and the image never leaves your device while it does it.",[11,940,941,942,947,948,951],{},"If you're building on a modern framework, this is often already handled for you: ",[67,943,946],{"href":944,"rel":945},"https:\u002F\u002Fimage.nuxt.com\u002F",[71],"Nuxt Image"," (which this site runs on) converts and resizes images automatically, and Next.js's ",[311,949,950],{},"next\u002Fimage"," does the same, serving WebP by default with AVIF available too. Worth checking whether yours already does this before reaching for a separate tool.",[11,953,954,955,958,959,962,963,966],{},"Two more things are worth doing. ",[311,956,957],{},"srcset"," tells the browser to send a phone the phone-sized version of an image instead of the one built for a desktop monitor, so nobody downloads pixels they can't see. Lazy-loading defers anything below the fold, images included, until the visitor actually scrolls to it - a ",[311,960,961],{},"loading=\"lazy\""," attribute on an ",[311,964,965],{},"\u003Cimg>"," tag is often all it takes.",[11,968,969],{},"Your CDN matters too, not just your host. A good one compresses images and video on the way out and serves them from whichever edge is closest to the visitor, so check whether yours already does it before you do it by hand.",[11,971,972,973,975,976,981],{},"After that: turn on Brotli or Gzip, and set cache headers so returning visitors skip the download entirely. Subset your fonts to the characters you use, or drop to system fonts. Look your host ",[75,974,480],{}," your CDN up in the Green Web Foundation's ",[67,977,980],{"href":978,"rel":979},"https:\u002F\u002Fwww.thegreenwebfoundation.org\u002Fdirectory\u002F",[71],"directory",", and if either isn't listed, ask them why.",[11,983,984,985,988],{},"None of that is exotic. It's the same list a performance audit hands you, which is rather the point: the fast version of your site and the low-carbon version of your site are the ",[75,986,987],{},"same"," site.",[15,990,992],{"id":991},"start-with-one-number","Start with one number",[11,994,995],{},"Measure one page today and write the number down. Fix the heaviest image on it, then measure again. That's the whole loop, and you can run it this afternoon without buying anything.",[11,997,998,999,91],{},"Cabin provides this loop, automatically for your real traffic, ",[67,1000,1001],{"href":377},"start with Cabin for free",[1003,1004,1005],"footnotes",{},[185,1006,1007,1018,1037,1044,1047,1059],{},[188,1008,1009,1010,1017],{},"Data centre electricity: IEA, ",[67,1011,1014],{"href":1012,"rel":1013},"https:\u002F\u002Fwww.iea.org\u002Freports\u002Fenergy-and-ai\u002Fexecutive-summary",[71],[75,1015,1016],{},"Energy and AI",", April 2025. \"Data centres accounted for around 1.5% of the world's electricity consumption in 2024, or 415 terawatt-hours (TWh)\", and consumption is \"set to more than double to around 945 TWh by 2030\", which the report compares to Japan's total electricity use.",[188,1019,1020,1021,1026,1027,1030,1031,1036],{},"Cabin's CO2 model: the Green Web Foundation's ",[67,1022,1025],{"href":1023,"rel":1024},"https:\u002F\u002Fdevelopers.thegreenwebfoundation.org\u002Fco2js\u002Foverview\u002F",[71],"co2.js"," 0.17.0 with the ",[311,1028,1029],{},"swd"," model, which resolves to ",[67,1032,1035],{"href":1033,"rel":1034},"https:\u002F\u002Fsustainablewebdesign.org\u002Festimating-digital-emissions\u002F",[71],"Sustainable Web Design version 3",". Version 4 exists and gives very different answers: 1MB of transfer comes out at 0.383g under v3 and 0.148g under v4. Cabin hasn't switched, so that every month of your history comes from one model rather than having March and April quietly disagree. When it does switch, there'll be a note.",[188,1038,1039,1040,1043],{},"Script sizes, measured 16 August 2026. ",[311,1041,1042],{},"curl -s -H \"Accept-Encoding: gzip\" https:\u002F\u002Fscripts.withcabin.com\u002Fhello.js | wc -c"," returns 1,212 bytes. The same command against Google's gtag.js returns 148,838 bytes, give or take a little depending on the measurement ID.",[188,1045,1046],{},"Car equivalence in the dashboard uses DEFRA\u002FDESNZ 2024 factors for the UK, EEA 2024 for the EU and EPA 2024 for the US, in both tank-to-wheel and well-to-wheel form, because \"the same as driving X km\" means nothing if nobody says whose car.",[188,1048,1049,1050,1055,1056,91],{},"Checked 17 August 2026, via the ",[67,1051,1054],{"href":1052,"rel":1053},"https:\u002F\u002Fdevelopers.thegreenwebfoundation.org\u002Fapi\u002Fgreencheck\u002Fv3\u002Fgreencheck\u002F",[71],"Green Web Foundation's public API",": Cabin's own CDN endpoint currently reports green, attributed to Hetzner. That's a snapshot of one hostname on one day, not a claim about the CDN network as a whole, which runs many points of presence on different providers. Check your own with ",[311,1057,1058],{},"curl https:\u002F\u002Fapi.thegreenwebfoundation.org\u002Fgreencheck\u002Fyourdomain.com",[188,1060,1061,1062,1071,1072,1080],{},"The line about the internet producing 2 to 4% of global emissions, \"about the same as aviation\", isn't in the literature. ",[67,1063,1066,1067,1070],{"href":1064,"rel":1065},"https:\u002F\u002Fpmc.ncbi.nlm.nih.gov\u002Farticles\u002FPMC8441580\u002F",[71],"Freitag et al., ",[75,1068,1069],{},"Patterns",", 2021"," put the whole ICT sector at 1.8 to 2.8% of global greenhouse gas emissions in 2020, or 2.1 to 3.9% adjusted for supply chain truncation. ",[67,1073,1076,1077],{"href":1074,"rel":1075},"https:\u002F\u002Fdoi.org\u002F10.1016\u002Fj.telpol.2023.102701",[71],"Malmodin et al., ",[75,1078,1079],{},"Telecommunications Policy"," put the same sector in the same year at about 1.4%. Both measure ICT, which is mostly phones, laptops and televisions rather than web pages, and neither mentions aircraft.",{"title":236,"searchDepth":237,"depth":237,"links":1082},[1083,1084,1085,1086,1087,1088],{"id":790,"depth":237,"text":791},{"id":826,"depth":237,"text":827},{"id":843,"depth":237,"text":844},{"id":897,"depth":237,"text":898},{"id":928,"depth":237,"text":929},{"id":991,"depth":237,"text":992},"2026-02-18","How to measure your website's carbon footprint, where the CO2 numbers come from, and which fixes actually move them.","\u002Fimg\u002Fblog\u002Fmesh.jpg",{},"\u002Fblog\u002Fhow-to-measure-your-websites-carbon-footprint",{"title":779,"description":1090},"blog\u002Fhow-to-measure-your-websites-carbon-footprint","oWGxREjSet08rPTWb6lOdmnGqrQQXCGqhnI15gqvPX8",{"id":1098,"title":1099,"body":1100,"date":1251,"description":1252,"draft":249,"extension":250,"image":1253,"meta":1254,"navigation":254,"path":881,"seo":1255,"stem":1256,"__hash__":1257},"blog\u002Fblog\u002Fcookie-banners-are-killing-your-conversion-rate.md","What the banner costs",{"type":8,"value":1101,"toc":1244},[1102,1105,1108,1115,1119,1122,1129,1132,1136,1147,1150,1154,1164,1167,1171,1174,1177,1187,1190,1194,1201],[11,1103,1104],{},"Accepting a cookie usually takes one click. Refusing often takes a second screen, a list of switches for things like \"legitimate interest\", a scroll to the bottom to find the ones already turned on, and then a Confirm button.",[11,1106,1107],{},"Most people don't bother. They accept to make it disappear, or they hit the X, or just leave it visible while they browse.",[11,1109,1110,1111,1114],{},"In one US study, ",[38,1112,1113],{},"61%"," of people believed that closing a banner rejects cookies. On many sites it does the opposite. So a good share of your visitors have no idea if they agreed or not, and neither do you.",[15,1116,1118],{"id":1117},"what-cookies-do-to-your-analytics","What cookies do to your analytics",[11,1120,1121],{},"Analytics that needs consent should only record the visitors who explicitly said yes. Everyone else is invisible to it: the ones who dismissed the banner, the ones who ignored it, the ones who genuinely refused.",[11,1123,1124,1125,1128],{},"After the GDPR deadline, a study of 1,084 companies using Adobe Analytics counted ",[38,1126,1127],{},"12%"," fewer European pageviews. The visitors still came, but they just weren't recorded.",[11,1130,1131],{},"Move the reject button off the first screen, and ask later - consent climbs by more than a fifth of all visitors. Same site, same visitors, one layout change.",[15,1133,1135],{"id":1134},"do-banners-even-work","Do banners even work?",[11,1137,1138,1139,1142,1143,1146],{},"A team at ETH Zurich scanned 29,398 websites and found ",[38,1140,1141],{},"94.7%"," had at least one potential privacy violation. Two thirds assumed consent before anyone had given it. One in five set cookies ",[75,1144,1145],{},"after"," the visitor had actively refused.",[11,1148,1149],{},"So the banner may be confusing your visitors and thinning your data while still setting the cookies it promised not to. What is it actually buying you?",[15,1151,1153],{"id":1152},"cabin-doesnt-use-cookies","Cabin doesn't use cookies",[11,1155,1156,1157,1160,1161,91],{},"Cabin sets no cookies, builds no fingerprint and creates no identifier of any kind. There's nothing to ask permission ",[75,1158,1159],{},"for",", so it needs no consent under GDPR, CCPA, ePrivacy or PECR. Every visitor gets counted, whatever they click or don't click. There's a ",[67,1162,1163],{"href":320},"longer explanation of how that works",[11,1165,1166],{},"Remember, if you run other ad pixels or embed video that set their own cookies, you may still want a short notice for those. But your analytics stops depending on it.",[15,1168,1170],{"id":1169},"ad-blockers-take-another-bite","Ad blockers take another bite",[11,1172,1173],{},"Consent isn't the only thing between you and your own numbers. Ad blockers block analytics scripts by domain, so some visitors go uncounted even with no banner in sight.",[11,1175,1176],{},"These block lists rightly draw a very hard line on anything even resembling tracking. Cabin is on most block lists, and that's fine by us. Everyone has the right to block any browser request they like.",[11,1178,1179,1180,1182,1183,1186],{},"Cabin has a feature (on ",[38,1181,924],{}," and above) where you can easily serve the script and visitor ingestion from your own domain, using a single CNAME record, so it reads as ",[311,1184,1185],{},"analytics.yoursite.com"," rather than a domain on a blocklist. The request goes through and those visits get counted.",[11,1188,1189],{},"Nothing changes for the visitor. Cabin still sets no cookies and still cannot identify anyone, whichever domain the script came from. You just get to see a little more of the traffic you already had.",[15,1191,1193],{"id":1192},"compare-cabin-with-your-current-analytics","Compare Cabin with your current analytics",[11,1195,1196,1197,1200],{},"Cabin's free plan covers 10,000 pageviews a month across 10 sites. ",[67,1198,1199],{"href":377},"Try it"," and run it alongside your current analytics for a fortnight. The two numbers probably won't match exactly. The difference is the visitors you weren't seeing.",[1003,1202,1203],{},[185,1204,1205,1214,1226,1235],{},[188,1206,1207,1208,1213],{},"The 61% figure: Farronato, Fradkin & Lin, ",[67,1209,1212],{"href":1210,"rel":1211},"https:\u002F\u002Fwww.nber.org\u002Fpapers\u002Fw34025",[71],"\"Designing Consent\", NBER 34025",". A field experiment with 563 US participants, so treat it as US rather than European behaviour. The same study found 22% of people close the banner without choosing anything, on top of the 14% who actively reject.",[188,1215,1216,1217,1225],{},"The 12% figure: Goldberg, Johnson & Shriver, \"Regulating Privacy Online\", ",[67,1218,1221,1224],{"href":1219,"rel":1220},"https:\u002F\u002Fwww.aeaweb.org\u002Farticles?id=10.1257\u002Fpol.20210309",[71],[75,1222,1223],{},"American Economic Journal: Economic Policy"," 16(1), 2024",". 1,084 firms, Adobe Analytics data, European pageviews \"recorded by the platform\".",[188,1227,1228,1229,1234],{},"The 20-point swing: Nouwens et al., ",[67,1230,1233],{"href":1231,"rel":1232},"https:\u002F\u002Farxiv.org\u002Fabs\u002F2001.02479",[71],"\"Dark Patterns after the GDPR\", CHI 2020",". 680 popular UK websites, plus an experiment with 40 people. The same paper found only 11.8% of sites met the minimum requirements it drew from European law.",[188,1236,1237,1238,1243],{},"The 94.7% figure: Bollinger, Kubicek, Cotrini & Basin (ETH Zurich), ",[67,1239,1242],{"href":1240,"rel":1241},"https:\u002F\u002Fwww.usenix.org\u002Fsystem\u002Ffiles\u002Fsec22-bollinger.pdf",[71],"USENIX Security 2022",". 29,398 sites; 69.7% assumed consent before it was given, 21.3% set cookies despite explicit refusal.",{"title":236,"searchDepth":237,"depth":237,"links":1245},[1246,1247,1248,1249,1250],{"id":1117,"depth":237,"text":1118},{"id":1134,"depth":237,"text":1135},{"id":1152,"depth":237,"text":1153},{"id":1169,"depth":237,"text":1170},{"id":1192,"depth":237,"text":1193},"2026-02-14","Cookie banners are increasingly hard to refuse, so visitors dismiss them and your website analytics never counts them. Cabin doesn't need one.","\u002Fimg\u002Fblog\u002Ffence.jpg",{},{"title":1099,"description":1252},"blog\u002Fcookie-banners-are-killing-your-conversion-rate","Oi4BESl7JvIzoN5Gjnblg7KK_d5A78PGxcVoWRC8hos",{"id":1259,"title":1260,"body":1261,"date":1464,"description":1465,"draft":249,"extension":250,"image":1466,"meta":1467,"navigation":254,"path":320,"seo":1468,"stem":1469,"__hash__":1470},"blog\u002Fblog\u002Fgdpr-compliant-analytics-without-consent-banners.md","The banner you don't need",{"type":8,"value":1262,"toc":1450},[1263,1266,1270,1273,1276,1283,1287,1290,1297,1301,1304,1307,1312,1315,1322,1326,1336,1340,1343,1347,1350,1353,1360,1363,1367,1393,1397,1400,1404,1411,1421],[11,1264,1265],{},"GDPR never mentions a cookie banner. It regulates personal data, and a banner is only one way of asking permission to process some of it. Plenty of sites are collecting consent for tracking they could simply stop doing instead.",[15,1267,1269],{"id":1268},"what-gdpr-actually-says-about-analytics","What GDPR actually says about analytics",[11,1271,1272],{},"GDPR applies to the processing of personal data, so the question for any analytics tool is whether it processes any. That covers more than names and emails: IP addresses, cookie identifiers, device fingerprints, precise location, anything that tells one visitor apart from another.",[11,1274,1275],{},"If your tool touches any of that, you need a lawful basis. Most sites reach for one of two: consent under Article 6(1)(a), which is what a banner implements, or legitimate interest under Article 6(1)(f), which needs a business reason that outweighs the individual's rights and a documented balancing test to show it.",[11,1277,1278,1279,1282],{},"There's a third route, and it gets overlooked because nobody makes money selling it. If the tool ",[75,1280,1281],{},"doesn't process personal data at all",", the consent question never arises.",[15,1284,1286],{"id":1285},"the-eprivacy-directive-matters-too","The ePrivacy Directive matters too",[11,1288,1289],{},"GDPR isn't the only rule in play. The ePrivacy Directive, the one everyone calls the Cookie Law, governs storing information on a visitor's device and reading it back. Under Article 5(3), doing either needs consent regardless of whether the information is personal data, and analytics doesn't fall under the narrow carve-out for what's strictly necessary. That's why Google Analytics needs a banner even where legitimate interest might otherwise cover it.",[11,1291,1292,1293,1296],{},"Be precise about the trigger, because vendors are sloppy with it: it's ",[75,1294,1295],{},"storage and access",", not the word \"cookie\". The rule bites the moment information on a device, or anything derived from it, leaves the device. Moving an identifier from a cookie into local storage gets you out of nothing.",[15,1298,1300],{"id":1299},"how-cabin-does-it","How Cabin does it",[11,1302,1303],{},"The principle is boring, which is rather the point. Don't set cookies, and the ePrivacy trigger doesn't fire. Don't process personal data, and GDPR's consent question doesn't arise. Don't fingerprint either - hashing an IP with a user agent to make a \"pseudonymous\" identifier is still building an identifier out of personal data.",[11,1305,1306],{},"Cabin does none of the three, from the start, and none of it is a setting you can leave switched off by accident. No cookies, first-party or third-party, session or persistent. No unique identifier for a visitor: no UID in a database, no hash of IP and user agent, no fingerprint of any kind.",[1308,1309,1311],"h3",{"id":1310},"ip-addresses-are-never-stored","IP addresses are never stored",[11,1313,1314],{},"This is the one worth stating carefully, because a lot of vendors state it carelessly. A visitor's IP arrives with the request, the way it does with every request to every server on the internet. Cabin holds it in memory just long enough to look up a country, then discards it: never written to disk, never logged, never attached to a visit record.",[11,1316,1317,1318,1321],{},"Holding an address in memory at all is ",[75,1319,1320],{},"processing"," under GDPR, so Cabin doesn't claim it never processes IP addresses, however well that would read on a pricing page. I'd rather write the version that survives a question: nothing outlives the request, and there's no stored value for it to be matched back to.",[1308,1323,1325],{"id":1324},"the-last-modified-method","The Last-Modified method",[11,1327,1328,1329,1332,1333,91],{},"Instead of cookies or fingerprinting, Cabin uses the browser's own HTTP caching to count return visits: a ",[311,1330,1331],{},"Last-Modified"," header encodes a visit count inside a timestamp, living only in the browser's cache and gone the moment it's cleared. Nothing in it identifies anyone. Full write-up: ",[67,1334,1335],{"href":679},"how Cabin measures unique visitors without cookies",[1308,1337,1339],{"id":1338},"eu-data-storage","EU data storage",[11,1341,1342],{},"All Cabin analytics data is stored and processed in the EU, with a backup in London. A handful of collection endpoints outside the EU exist purely to receive a request quickly and pass it to Ireland, nothing written to disk, same IP rule as above. Cross-region transfers run under Standard Contractual Clauses.",[15,1344,1346],{"id":1345},"what-regulators-have-said","What regulators have said",[11,1348,1349],{},"France's CNIL has the most concrete version of this: audience measurement is exempt from consent, strictly on conditions - limited to your own site, no cross-site following, no cross-referencing, truncated IPs, a 13-month tracker expiry, visitors told and able to object. Most large audience-measurement products fall outside this however you configure them.",[11,1351,1352],{},"Read that as a boundary, not a permission slip. Cabin sits well inside it - no tracker to expire, no IP to truncate, nothing to cross-reference.",[11,1354,1355,1356,1359],{},"The Dutch DPA draws a similar line: no consent needed for \"limited analytics cookies\" with no or little privacy impact, though a lawful basis still applies wherever they ",[75,1357,1358],{},"do"," process personal data. The exemption is for counting, not profiling.",[11,1361,1362],{},"Neither is a blanket right to skip consent, and anyone who tells you it is hasn't read them. Both describe the same shape: first-party, narrow, nothing joined to anything else.",[15,1364,1366],{"id":1365},"four-excuses-that-dont-hold-up","Four excuses that don't hold up",[185,1368,1369,1375,1381,1387],{},[188,1370,1371,1374],{},[38,1372,1373],{},"\"We anonymise IP addresses.\""," Truncating or hashing beats keeping it in full, but it doesn't undo the processing that happened before truncation, which is where the personal data was.",[188,1376,1377,1380],{},[38,1378,1379],{},"\"We delete the data after 24 hours.\""," Temporary processing is still processing.",[188,1382,1383,1386],{},[38,1384,1385],{},"\"We do it server-side.\""," Changes where the code runs, not the legal analysis - an identifier built from an IP and a user agent is still an identifier.",[188,1388,1389,1392],{},[38,1390,1391],{},"\"Our privacy policy covers it.\""," A policy tells people what you do. It isn't a lawful basis for doing it.",[15,1394,1396],{"id":1395},"checking-your-own-setup","Checking your own setup",[11,1398,1399],{},"Most of this you can check in a few minutes. Open dev tools and see what your analytics tool writes to the cookie jar and local storage. Then ask the vendor, in writing. Are IP addresses stored? Is an identifier generated per visitor? Is data combined with anywhere else? If they can't answer plainly, that's the answer.",[15,1401,1403],{"id":1402},"what-you-get-back","What you get back",[11,1405,1406,1407,1410],{},"Dropping the banner isn't only a legal tidy-up. You measure everyone rather than the subset who clicked accept, so the numbers stop having a ",[67,1408,1409],{"href":881},"gap shaped like whoever finds banners irritating",". You lose the consent-management script and the standing job of testing it. And the first thing a visitor sees is your actual site.",[11,1412,1413,1414,1417,1418,91],{},"Cabin is ",[67,1415,1416],{"href":377},"free to start",": one line of script, no credit card, nothing for a visitor to dismiss before the page loads. Free covers 10,000 pageviews a month across 10 domains, plenty to see whether the numbers look right. If you look after sites for other people, there's more on how this works for ",[67,1419,1420],{"href":394},"agencies and studios",[1003,1422,1423],{},[185,1424,1425,1433,1441],{},[188,1426,1427,1428,91],{},"Article 5(3) technical scope: EDPB, ",[67,1429,1432],{"href":1430,"rel":1431},"https:\u002F\u002Fwww.edpb.europa.eu\u002Four-work-tools\u002Four-documents\u002Fguidelines\u002Fguidelines-22023-technical-scope-art-53-eprivacy-directive_en",[71],"\"Guidelines 2\u002F2023 on the technical scope of Article 5(3) ePrivacy Directive\"",[188,1434,1435,1436,91],{},"CNIL's audience-measurement exemption: ",[67,1437,1440],{"href":1438,"rel":1439},"https:\u002F\u002Fwww.cnil.fr\u002Fen\u002Fsheet-ndeg16-use-analytics-your-websites-and-applications",[71],"CNIL, \"Use of analytics on your websites and applications\"",[188,1442,1443,1444,1449],{},"The Dutch DPA's position on limited analytics cookies: ",[67,1445,1448],{"href":1446,"rel":1447},"https:\u002F\u002Fwww.autoriteitpersoonsgegevens.nl\u002Fen\u002Fthemes\u002Finternet-and-smart-devices\u002Fcookies",[71],"Autoriteit Persoonsgegevens, guidance on cookies",", under Article 11.7a of the Dutch Telecommunications Act.",{"title":236,"searchDepth":237,"depth":237,"links":1451},[1452,1453,1454,1460,1461,1462,1463],{"id":1268,"depth":237,"text":1269},{"id":1285,"depth":237,"text":1286},{"id":1299,"depth":237,"text":1300,"children":1455},[1456,1458,1459],{"id":1310,"depth":1457,"text":1311},3,{"id":1324,"depth":1457,"text":1325},{"id":1338,"depth":1457,"text":1339},{"id":1345,"depth":237,"text":1346},{"id":1365,"depth":237,"text":1366},{"id":1395,"depth":237,"text":1396},{"id":1402,"depth":237,"text":1403},"2026-02-10","GDPR never mentions a cookie banner. What the law actually requires, what regulators have said, and how Cabin works without one.","\u002Fimg\u002Fblog\u002Fsphere-2.jpg",{},{"title":1260,"description":1465},"blog\u002Fgdpr-compliant-analytics-without-consent-banners","-YJICqz2p7YktwKKKAeK3K0eTNXrvHm3JQfYwvkA2pA",{"id":1472,"title":1473,"body":1474,"date":1656,"description":1657,"draft":249,"extension":250,"image":1658,"meta":1659,"navigation":254,"path":679,"seo":1661,"stem":1662,"__hash__":1663},"blog\u002Fblog\u002Fhow-cabin-measures-unique-visitors-without-cookies.md","How Cabin measures unique visitors without cookies",{"type":8,"value":1475,"toc":1646},[1476,1480,1483,1489,1493,1496,1507,1514,1518,1521,1525,1561,1568,1572,1575,1586,1592,1596,1599,1631,1635,1638],[15,1477,1479],{"id":1478},"the-challenge-of-privacy-first-web-analytics","The challenge of privacy-first web analytics",[11,1481,1482],{},"When Google announced the eventual phasing out of third-party cookies, many website owners started searching for alternatives. Cabin had already taken a different path - we built our analytics platform without using cookies, fingerprinting, or unique identifiers from the very beginning.",[11,1484,1485,1486],{},"This raised an important technical challenge: ",[38,1487,1488],{},"How do you accurately count unique visitors without using any tracking technologies that compromise user privacy?",[15,1490,1492],{"id":1491},"why-traditional-analytics-platforms-fall-short","Why traditional analytics platforms fall short",[11,1494,1495],{},"Most analytics services, including Google Analytics, rely on cookies to track visitors. They store a unique identifier (UID) in a cookie on your computer, allowing them to recognize you when you return. Even many \"privacy-focused\" alternatives simply move this tracking server-side:",[796,1497,1498,1501,1504],{},[188,1499,1500],{},"They generate a fingerprint based on your User Agent, IP, location, and other data points",[188,1502,1503],{},"This fingerprint is stored in a database and checked on each visit",[188,1505,1506],{},"Some services wash this data periodically to improve privacy",[11,1508,1509,1510,1513],{},"However, research at Cabin revealed a significant privacy concern: ",[38,1511,1512],{},"linking multiple data points together, even with anonymized UIDs, could potentially reveal someone's identity",". Connecting just a few elements like city, time, and visited pages could lead to identifying a specific individual.",[15,1515,1517],{"id":1516},"cabins-cookieless-innovation-the-last-modified-method","Cabin's cookieless innovation: the Last-Modified method",[11,1519,1520],{},"We developed a completely different approach that requires no cookies, no database of visitor identifiers, and even works in the oldest browsers. Here's how our clever solution works:",[1308,1522,1524],{"id":1523},"the-technical-breakdown","The technical breakdown",[796,1526,1527,1544,1558],{},[188,1528,1529,1530],{},"When a browser first visits a Cabin-enabled website, our server responds with:",[185,1531,1532,1538],{},[188,1533,1534,1537],{},[311,1535,1536],{},"Cache-Control: no-cache"," header (telling the browser to store the request but revalidate it)",[188,1539,1540,1543],{},[311,1541,1542],{},"last-modified: [Current Date] 00:00:00 GMT"," (set to the beginning of the current day)",[188,1545,1546,1547],{},"For each subsequent visit from the same browser on the same day:",[185,1548,1549,1552,1555],{},[188,1550,1551],{},"The server receives the last-modified date",[188,1553,1554],{},"Increments it by one second",[188,1556,1557],{},"Returns the updated timestamp to the browser",[188,1559,1560],{},"The server calculates the difference in seconds since midnight to determine unique visits",[11,1562,1563,1564,1567],{},"This elegant solution encodes the visit count ",[38,1565,1566],{},"within the date itself",", stored in the browser's cache, without using any cookies or fingerprinting techniques.",[1308,1569,1571],{"id":1570},"accurate-bounce-rate-tracking","Accurate bounce rate tracking",[11,1573,1574],{},"This system can also measure bounce rates - a critical metric for understanding user engagement:",[185,1576,1577,1580,1583],{},[188,1578,1579],{},"First visit: Counts as unique visit AND potential bounce",[188,1581,1582],{},"Second visit: Counts as a visit but removes the bounce count",[188,1584,1585],{},"Subsequent visits: Only counts as additional visits",[729,1587,1590],{"className":1588,"code":1589,"language":734},[732],"First visit:\nvisits +1 | uniques +1 | bounces +1\n\nSecond visit: \nvisits +1 | uniques 0 | bounces -1\n\nSubsequent visits:\nvisits +1 | uniques 0 | bounces 0\n",[311,1591,1589],{"__ignoreMap":236},[15,1593,1595],{"id":1594},"why-choose-cabin-as-a-google-analytics-alternative","Why choose Cabin as a Google Analytics alternative",[11,1597,1598],{},"Cabin's innovative approach offers several advantages over traditional analytics platforms:",[185,1600,1601,1607,1613,1619,1625],{},[188,1602,1603,1606],{},[38,1604,1605],{},"Truly cookieless analytics",": No cookies, no UIDs, no fingerprinting",[188,1608,1609,1612],{},[38,1610,1611],{},"Privacy law compliant",": No consent banners needed",[188,1614,1615,1618],{},[38,1616,1617],{},"Lightweight implementation",": Minimal impact on site performance",[188,1620,1621,1624],{},[38,1622,1623],{},"Carbon-conscious",": Track and reduce your website's carbon footprint",[188,1626,1627,1630],{},[38,1628,1629],{},"Simple dashboard",": Just the metrics that matter",[15,1632,1634],{"id":1633},"a-personal-note","A personal note",[11,1636,1637],{},"At Cabin, we believe you don't need to sacrifice user privacy for valuable insights. We started this project because we wanted analytics that respected users while still providing the data website owners need. The technical solution described here emerged from countless hours of experimentation to find a way to count visitors without compromising privacy.",[11,1639,1640,1641,1645],{},"If you're curious about how our unique visitor tracking works in your own environment, you can ",[67,1642,1644],{"href":225,"rel":1643},[71],"try Cabin"," and see for yourself how privacy-first analytics can work for your site.",{"title":236,"searchDepth":237,"depth":237,"links":1647},[1648,1649,1650,1654,1655],{"id":1478,"depth":237,"text":1479},{"id":1491,"depth":237,"text":1492},{"id":1516,"depth":237,"text":1517,"children":1651},[1652,1653],{"id":1523,"depth":1457,"text":1524},{"id":1570,"depth":1457,"text":1571},{"id":1594,"depth":237,"text":1595},{"id":1633,"depth":237,"text":1634},"2025-02-27","How does Cabin accurately count unique visitors without using any tracking technologies like cookies, UIDs or fingerprinting? We invented our own technique.","\u002Fimg\u002Fblog\u002Fsphere.webp",{"imageCredit":1660},"Art by \u003Ca href=\"https:\u002F\u002Funsplash.com\u002F@and_machines?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">and machines\u003C\u002Fa> on \u003Ca href=\"https:\u002F\u002Funsplash.com\u002Fphotos\u002Fa-blue-and-pink-background-with-a-circular-object-in-the-middle-vqTWfa4DjEk?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Unsplash\u003C\u002Fa>",{"title":1473,"description":1657},"blog\u002Fhow-cabin-measures-unique-visitors-without-cookies","1kQ0kCAs41DuBST31dARrBcUuifzoJjlSdRR9VnNOTE",{"id":1665,"title":1666,"body":1667,"date":1703,"description":1704,"draft":249,"extension":250,"image":1705,"meta":1706,"navigation":254,"path":1707,"seo":1708,"stem":1709,"__hash__":1710},"blog\u002Fblog\u002Fcabin-the-next-episode.md","Cabin - The next episode",{"type":8,"value":1668,"toc":1701},[1669,1684,1687,1692,1695,1698],[11,1670,1671,1672,1677,1678,1683],{},"Cabin analytics was born and incubated at ",[67,1673,1676],{"href":1674,"rel":1675},"https:\u002F\u002Fnormally.com\u002F",[71],"Normally"," studio back in 2020. As the creator and lead developer, I (",[67,1679,1682],{"href":1680,"rel":1681},"https:\u002F\u002Fnicmulvaney.com\u002F",[71],"Nic Mulvaney",") have been nurturing Cabin alongside a talented team of service designers who specialize in AI, data privacy and energy efficiency. While Cabin allowed us to flex our skills on a live product without worrying about growth and profitability, our bread and butter was our client work for the likes of IKEA, Spotify, Logitech and BBC.",[11,1685,1686],{},"In January 2025, Normally closed its doors. Moving forward, Cabin is now wholly owned and operated by me—which, truth be told, has already been the operational reality behind the scenes for the past few years.",[1688,1689,1691],"h4",{"id":1690},"what-does-this-mean-for-you","What does this mean for you?",[11,1693,1694],{},"Development time is no longer competing with client projects, which means I can now dedicate myself fully to expanding and enhancing the platform. You may have already noticed some visual refreshes and new features appearing week by week—this is just the beginning.",[11,1696,1697],{},"Cabin has been my passion project for nearly five years, and I'm thrilled to finally have the opportunity to focus on making it even better. My commitment is to build something that's not just powerful and privacy-focused but genuinely joyful to use.",[11,1699,1700],{},"I'm excited to take this journey with you and can't wait to share all the improvements you'll see in the months ahead.",{"title":236,"searchDepth":237,"depth":237,"links":1702},[],"2025-02-26","Cabin analytics, created by Nic Mulvaney at Normally, is now fully independant after the studio's closure. An exciting journey awaits...","https:\u002F\u002Fimages.ctfassets.net\u002F5osn6w754vy7\u002F4SQ9cBSmyxNIzrNxaCvU85\u002F4d8bb180f8f6278e9f4b2a841b56e254\u002Fmountains.webp",{},"\u002Fblog\u002Fcabin-the-next-episode",{"title":1666,"description":1704},"blog\u002Fcabin-the-next-episode","9xCWHJJIHCL52vxGDFbCu5RFcGHfI8GhirxonNSsuXs"]