Home · Journal · Cloudflare and privacy
Cloudflare and privacy12 min read18/08/2026

Cloudflare adds its own analytics to your site by default

One line: curl -s https://yoursite.com/ | grep -c cloudflareinsights. If it returns anything but zero, Cloudflare has injected a tracking script you never wrote — the default on every free-plan domain since 15 October 2025. It is cookieless, but it is opt-out, and it loads before your consent banner. Here is how it gets there and how to switch it off.

A surveillance camera on a pole in front of a brick building, blue sky behind it, lens angled down toward the street
Nobody asked whether you wanted to be watched. The same is true of a script that appears in your pages the day you move your nameservers to Cloudflare.
In brief

The short answer. If your domain is on a free Cloudflare plan and its traffic is proxied (the «orange cloud»), Cloudflare has, since 15 October 2025, injected a performance-analytics script by default — static.cloudflareinsights.com/beacon.min.js, about 31 KB — into pages that previously carried none. It rewrites the page at the edge, before it reaches the browser. No cookies, and per Cloudflare no personal data; EU visitors excluded by default. But it never asked you.

Who can close the tab. If you turned the performance monitoring on yourself and you use that data, nothing here is a problem — leave it. This is about people who don't know what their own site loads.

Why the rest should read on. Because the script runs before your cookie banner, never passes through your tag manager, and on a site you'd kept clean it is the first line of JavaScript you didn't write. There is a trap inside the trap: the obvious check — searching the page source for the script — can say «clean» while the beacon loads anyway. That happened on our own site. Below is the check that actually catches it.

  • The exact one-line command that tells you whether it is on your site.
  • How Cloudflare gets a script into a file it never touches on your server.
  • What changed on 15 October 2025, and the three ways to turn it off.
  • Why searching the page source is not enough — and the check that catches the beacon every time.

Start with the fast check, because it takes ten seconds. Open a terminal and run curl -s https://yoursite.com/ | grep -c cloudflareinsights. Anything above zero means Cloudflare has written its analytics beacon into your page source — a script you did not add. But zero is not the all-clear it looks like, and that is the trap this article is really about.

We ran it on our own domain first, so we would not be writing about someone else's site. cittago.com is behind Cloudflare — the server: cloudflare header and the cf-ray ID say so on every request. Across six pages — home, the blog index, the Cloudflare service page in English and Italian, and the Italian and Romanian homepages — curl came back zero every time: no beacon in the source. Then we opened the home page in a real browser, with Lighthouse, and there it was — a request to static.cloudflareinsights.com/beacon.min.js. It was not in the source because Cloudflare injects it at runtime, for verified browsers only. Web Analytics was active on our own site all along — and the check we would have recommended first, curl, was exactly the one hiding it. Pulled directly, the script weighs 31,612 bytes, about 31 KB.

This is not an obscure edge case. It is the default, decided by Cloudflare and announced months ahead. On 17 September 2025 Cloudflare published «The RUM Diaries: enabling Web Analytics by default», which states plainly: «The journey starts on October 15, 2025, when Cloudflare will enable Web Analytics for all free domains by default». The story resurfaced on 16 August 2026 through a Hacker News thread — over 600 votes in a day — from a developer who had switched nameservers to use R2 storage and found the beacon on a site with no JavaScript of its own.

A laptop screen showing web page source code: HTML tags and JavaScript fragments in focus, keyboard in the foreground
You don't write this script. It appears between your HTML and the reader's browser, at a layer your editor never shows you.

The definition

What it is, and what it is not

Cloudflare Web Analytics is a Real User Monitoring (RUM) tool: it records how fast your pages load for actual visitors, without cookies and — Cloudflare says — without collecting personal data or tracking people over time. It is not Google Analytics. It counts no conversions, builds no profile, and cannot tell you which campaign a customer came from. It measures Core Web Vitals and little else.

On privacy Cloudflare is blunt, and fairly so: the official post says it uses no «client-side state (like cookies or localStorage) for analytics purposes» and does not track users «over time by IP address, User Agent, or any other fingerprinting». The default version also «excludes data from EU visitors». So this is not a data leak. It is something narrower and stranger: a script added to your pages without your yes.

The mechanism

How the script gets into your page

The part that surprises people is the same thing that makes Cloudflare convenient. When a record is proxied — the orange cloud — the TLS certificate the browser validates is Cloudflare's, not yours. Traffic terminates on its servers, which open a second connection to yours. In the middle, Cloudflare sees the page in the clear and can rewrite it on the way out, before it reaches the visitor.

That is where the beacon goes in. It never touches the file on your server; it edits the copy leaving the edge. The injected script looks close to this:

<script defer src="https://static.cloudflareinsights.com/beacon.min.js" data-cf-beacon='{"token":"..."}'></script>

Two practical consequences. First, if you look at the file on your hosting you won't find it — it isn't there; it is injected afterwards. Second, there is a documented way out: if you serve the page with Cache-Control: public, no-transform, Cloudflare cannot rewrite the payload and the beacon is not injected. That header is the one technical condition that stops it on its own, without opening any dashboard.

  • You need: your domain, a terminal (or the browser dev tools), and thirty seconds.
  • Where to look: the source of your home page and one inner page — injection is per page, not per site.
  • What to search for: the string cloudflareinsights or the file beacon.min.js. The Network tab in dev tools, filtered to cloudflareinsights, is the check that matters: it shows the request even when the page source is clean, because Cloudflare can inject the beacon at runtime for real browsers only.

The date

What changed on 15 October 2025

Until that date Web Analytics existed, but you switched it on: opt-in. From 15 October 2025 the direction reversed. Here is the difference, line by line.

Before 15 October 2025From 15 October 2025
Free (proxied) domainsanalytics off until you enabled itanalytics on by default
Who decidesyou, by opting inCloudflare, until you opt out
Script in the pagenone, unless you added itbeacon injected at the edge
EU visitorsexcluded by default
Pro / Business / Enterprisemanualmanual (no change)

Right-hand column: Cloudflare, «The RUM Diaries: enabling Web Analytics by default», 17 September 2025. The change affects free-plan domains with proxied traffic only.

The consent question

This needs honesty in two directions. On one side, Cloudflare is right that its analytics differs from an ad pixel: no cookies, no profiling, EU visitors excluded by default. On the other, the beacon fires at the edge, before your consent banner or tag manager has had a chance to run. It doesn't pass through your tools, so you don't govern it with them.

The consequence isn't «you're breaking the law» — that would be a convenient line, and it isn't what Cloudflare says of its own measurement. The consequence is simpler and more irritating: there is a tile in your site's mosaic that you didn't lay and that doesn't appear in your own register of scripts. For anyone who keeps a serious inventory of what runs on their pages, «I didn't add it and I don't control it» is already an unsatisfying answer — not because it is illegal, but because your site no longer decides.

A tangle of coloured wires and a small circuit board on a white background, connectors pointing in every direction
Between you and your visitor sits a layer you can configure but not see. That is where a line gets added — or removed.

The fix

How to switch it off, three ways

None of the three means leaving Cloudflare. In order, from most direct to most technical:

  1. From the dashboard. Go to Web Analytics, open Manage RUM Settings, and choose Disable. This is the method Cloudflare itself points to in the announcement. It applies to the whole zone — your entire domain.
  2. With a cache header. Serve your pages with Cache-Control: public, no-transform and Cloudflare cannot rewrite the payload, so the beacon is never injected. Useful if you want to block any on-the-fly change on principle, not just analytics.
  3. Manual install. If you do want the performance data, but on your terms, disable automatic injection and paste the snippet yourself — then it behaves like any other tag, loading after consent.

Whatever you choose, choose it knowingly. If a panel you never opened can add a line to your pages, it is worth knowing what the rest of the configuration does — which is exactly the work of a hand-configured Cloudflare setup, where every setting is one you decided rather than a default. For the ground floor, we've explained what Cloudflare actually is, and measured which bots our firewall let through and which it blocked on our own domain.

The limits

What this article does not claim

  • It is not a GDPR-breach accusation. Cloudflare describes its analytics as cookieless and free of personal data, with EU visitors excluded by default. The issue is consent to the act — a script added without asking — not unlawful data processing.
  • It does not affect every site. It changes only free-plan domains with proxied traffic. Paid plans stay manual, and anyone serving with no-transform is untouched.
  • We did not measure the whole web. Our figures are cittago.com, six pages, 18 August 2026. Only your own site tells you your answer — with the command above.
  • We are not telling you to leave Cloudflare. We use it, configure it for clients, and recommend it. The criticism is of a default, not of the tool.

Where you stand

Three thresholds, not a conclusion

Run the ten-second check and place yourself:

  • Free Cloudflare domain, settings never touched → the beacon is almost certainly on. Check it tonight; it's thirty seconds.
  • You have a cookie banner and felt covered → the beacon fires before the banner. Verify what the page actually loads, not what the banner promises.
  • You enabled RUM yourself and use the data → leave it. Nothing to fix: this is the one half of the story where the default matches your choice.

Questions nobody has actually asked us

How do I tell whether it is on my site?

Two checks, not one. The fast one: curl -s https://yoursite.com/ | grep -c cloudflareinsights — anything above zero means the beacon is in your source. But zero is not the all-clear: Cloudflare can inject it at runtime, for real browsers only, and then curl never sees it. The check that does not miss is the browser: dev tools, Network tab, reload, and search for beacon.min.js. If the request appears, it is active even when the source looked clean.

Is Cloudflare collecting my visitors' data behind my back?

It collects performance metrics, not personal data: Cloudflare states it uses no cookies or localStorage and does not track users by IP, User Agent or any fingerprinting, and it excludes EU visitors by default. The point of this article is not covert data collection — it is that the script is added to your pages without asking.

Since when has this happened?

Since 15 October 2025. Cloudflare announced it on 17 September 2025 in the post «The RUM Diaries», saying it would enable Web Analytics by default on all free domains from that date. Paid plans did not change: there, enabling it stays a manual choice.

How do I turn it off without leaving Cloudflare?

In the dashboard: Web Analytics → Manage RUM Settings → Disable. It applies to the whole domain. Alternatively, serve your pages with the header Cache-Control: public, no-transform, which prevents Cloudflare from rewriting the payload and therefore from injecting the beacon.

How much does the script weigh?

We downloaded it on 18 August 2026: 31,612 bytes, about 31 KB. It won't sink a site, but on a page you'd kept light it is added weight for a feature you didn't ask for, and every script occupies the main thread — the thing the mobile speed score penalises most.

Won't ad blockers block it anyway?

Partly: Cloudflare documents that the beacon is blocked by Brave, the DuckDuckGo extension and others. That means two things — for a slice of your visitors the data never arrives anyway, and you can't rely on someone else's blocker to decide what runs on your pages. The choice stays yours.

Did you find it on Cittago's own site?

Yes — and it surprised us while we were writing this. With curl, six pages of cittago.com returned zero: no beacon in the source. Then Lighthouse, in a real browser, showed a request to static.cloudflareinsights.com/beacon.min.js on the home page. Cloudflare injects it at runtime, for verified browsers, so the source stays clean. It is the best example we could give: the obvious check told us no, reality said yes.

If I leave it on, what do I actually get?

Real Core Web Vitals from your visitors — how quickly the page becomes usable, how much it shifts while loading — with no conversions and no profiles. It is honest, useful data if you want it. The question isn't whether it is good; it is whether you chose to have it.

Does switching nameservers turn on anything else by default?

In the case that reignited the discussion, the user noticed the proxy itself was on by default too, not just analytics. The practical rule is the same: after moving a domain to Cloudflare, open the settings and look at what is on, instead of assuming everything is off until you switch it on.

My site is on a paid plan — am I affected?

The default-on change is for free-plan domains. On Pro, Business and Enterprise, Web Analytics stays manual. Still worth running the one-line check, because a setting enabled long ago, or on another zone, can surprise you — the command costs nothing and answers it for certain.

Last updated: 18 August 2026. The 15 October 2025 date and the quotations come from Cloudflare's post «The RUM Diaries: enabling Web Analytics by default» (17 September 2025), re-read on this date. The cittago.com measurements are from 18 August 2026: curl returned zero on 6 pages, but Lighthouse in a real browser showed a request to static.cloudflareinsights.com/beacon.min.js (the file is 31,612 bytes). Cloudflare injects the beacon at runtime for verified browsers, so it does not appear in the page source. The news hook is the Hacker News thread of 16 August 2026. We update this page if Cloudflare changes the default behaviour.

What clients say

Trusted by the people who signed the checks.

5.0★★★★★21 reviews on Google
★★★★★
We have been collaborating for over 11 years on both presentation web sites and complex projects. We have always returned to the services offered by Cittago, thanks to the professionalism, courtesy and innovative solutions offered. Thanks for your partnership!
Aurelia Campean2 years ago
★★★★★
I am very satisfied with the collaboration with Cittago. Everything went in a professional manner, the deadlines were met, and the result was as expected. I highly recommend!
Cristea Christian4 days ago
★★★★★
5* for the quality of service, promptness and seriousness. Thank you, Paul!
Budurlean Crina5 days ago
★★★★★
We had the cabins and the view, but Cittago gave us the perfect digital “reception”. They created a premium, ultra-fast website for us that handles everything on its own: live calendar, automatic invoicing and card payments (only 1% commission instead of 15–20% on platforms). The best part? We edit it ourselves in a few minutes, without depending on anyone. And Paul is simply unreal for this world! The warmth, respect and attention to detail with which he explains absolutely everything make you understand the services offered perfectly. Not to be missed is the availability that Paul shows when you have a question. Honestly, I have rarely dealt with such a professional and dedicated company.
Viorica Pop5 days ago
★★★★★
Serious and fast team. They built our BarBox website from scratch, with a cinematic look that represents us perfectly, plus local SEO so people in Cluj can find us. Simple communication, zero hassle. 5 well-deserved stars.
tudor j6 days ago
★★★★★
I had the pleasure of working with Cittago for the creation of a website for a project that I develope together with some friends, and I couldn't be happier with the results. From start to finish, they demonstrated exceptional professionalism, creativity, and technical expertise. First and foremost, the communication throughout the project was outstanding. They took the time to listen to our ideas and goals, and they translated them into a visually stunning and highly functional website that perfectly represents our product. We were kept in the loop at every stage of development, and they was always quick to address any questions or concerns I had. What sets Cittago apart is their dedication to delivering results. They went above and beyond to ensure that our website met all our requirements and objectives. They even provided valuable suggestions and insights that improved the overall project. I wholeheartedly recommend Cittago to anyone looking for a digital agency that combines creativity, technical expertise, and exceptional customer service. Thank you Paul for a job well done!
Bochiş Răzvan2 years ago
★★★★★
Thank you Paul for all the professionalism you show, for all the patience and all the help you give me. I highly recommend!
Daniela Pasc2 years ago
★★★★★
The collaboration I have had since the beginning, that is, for several years, with Cittago is a real pleasure! I turned to Paul to rebuild the website of a small dental clinic and I am extremely satisfied with the collaboration. Paul is still taking care of the website. The promptness with which he responds to me, the patience with which he explains everything I don't understand (and there are many, believe me 😂🙈), his maximum involvement and desire to give his best have always helped me and given me a lot of confidence in him. He is always there when I need him. Very professional! And the quality-price ratio is unbeatable. I recommend Paul with confidence, if you want someone who really puts his heart into what he does and gives his best!
Daniela Chis2 years ago
★★★★★
I have had the pleasure of working with Paul and Cittago on several websites. From the initial discussion to the launch of the website, I was impressed by their professionalism, expertise, and dedication to creating an exceptional product to launch online that we can all be proud of. Paul took the time to truly understand what I wanted, what my brand meant, what my target audience was, and what my goals were. Using his knowledge, he was able to create a user-friendly, visually beautiful, responsive (on both mobile and desktop) website that communicates the services and products we offer very well. The website not only looks great, but it works just as well. Throughout the process, Paul was receptive to feedback, and patiently answered all the requests I had. We appreciated his vast knowledge (about website creation, SEO, social media connection, visual experience), his expertise in applying it, his patience, transparency, and his ability to successfully complete such a project, which was very important to us. For these reasons, I highly recommend this company and the services it offers.
Aissa Suciu2 years ago
·First paint — when something appeared·Server response — before anything could load·Page ready — when you could interact
Page loaded in ·