The Non-Human Majority: What Cloudflare's Bot-Traffic Crossover Means for How You Build
Bot traffic has quietly surpassed human traffic on the web, yet most infrastructure — rate limiting heuristics, analytics pipelines, CDN cache-fill assumptions

For most of the web’s history, the load model was simple: a human opens a tab, the browser fires a handful of requests, you serve them. Capacity planning, rate limiting, caching, and abuse detection all grew up around that assumption. The human was the unit of demand.
That assumption is now wrong. Automated traffic — crawlers, scrapers, AI training fetchers, residential-proxy networks, and outright botnets — has crossed over to become the majority of requests hitting the average origin. The uncomfortable part isn’t the headline. It’s that most of our infrastructure is still tuned for the minority user, and the gap between that tuning and reality has become measurable engineering debt.
The baseline inverted while nobody re-tuned
Consider how a typical rate limiter is configured. You pick a threshold that a real person browsing aggressively won’t hit — say 60 requests per minute per IP — and you reject above it. That heuristic encodes a belief: that an IP maps roughly to a human, and humans have human-shaped request patterns.
Residential proxy networks demolish that belief. The Dutch authorities’ recent takedown of a botnet spanning more than 17 million devices — tied to the proxy service ASOCKS — is the clearest illustration. The whole product being sold there is the ability to route traffic through millions of ordinary home devices so that it resembles legitimate regular traffic. The NCSC said as much: Dutch residential proxies make attacks hard to mitigate precisely because the requests look like a normal person on a normal connection.
When the attacker’s traffic is indistinguishable from your real users at the IP and TLS layer, per-IP rate limiting degrades into theater. You’re not separating humans from bots; you’re separating IPs that happen to send a lot of requests from IPs that don’t — and the sophisticated bot spreads itself thin across 17 million endpoints so each one stays under your threshold.
# The assumption baked into a million configs:
# "one IP ≈ one human, humans don't exceed this"
if requests_per_minute(ip) > 60:
block(ip)
# Reality: 17M residential IPs, each sending 3 req/min,
# every one of them sailing under the limit.
The fix isn’t a higher or lower number. It’s accepting that the IP is no longer a meaningful identity and moving cost-of-request signals — behavioral fingerprints, proof-of-work challenges, per-session budgets — to where the human-vs-automation distinction actually lives.
Analytics that quietly lie
The second place the inverted baseline bites is measurement. If bots are the majority of requests and your analytics pipeline counts requests, your dashboards are mostly describing machines while you make product decisions as if they describe people.
This is no longer abstract, because the bots now have economic intent you can name. Google’s AI Overviews are built on content fetched, summarized, and re-presented without the click that used to flow back to the publisher. The UK’s Competition and Markets Authority just forced Google to give publishers a toggle in Search Console to opt out of having their content used in AI Search and model fine-tuning — and, tellingly, to expose new metrics showing which pages appear in AI responses and in which countries.
Read that as an infrastructure signal: publishers are being handed instrumentation for a class of traffic their existing analytics never separated out. “Sessions” and “pageviews” silently blended human readers with the machine that scraped you to answer a query elsewhere. The CMA remedy is, underneath the competition-law framing, an admission that you can’t govern — or even price — traffic you can’t distinguish. The same logic applies inside your own stack. If your funnel metrics don’t segment automated fetches from human sessions, your conversion rates, bounce rates, and cache-hit ratios are all computed against a contaminated denominator.
Caches and CDNs fill for an audience that never converts
Cache strategy assumes locality of human interest: popular pages get hot, the long tail stays cold, and cache-fill cost is justified by repeat human reads. Scrapers and AI crawlers invert this too. They walk your entire URL space methodically, including the long tail no human visits, forcing cache-fills that will never be amortized by a second human request. You pay origin compute and egress to warm cache entries for an audience of one robot that won’t come back.
A bot-majority origin needs cache policy that treats systematic, breadth-first access as a distinct workload — not as “a really enthusiastic user.” That might mean serving crawlers from a separate, cheaper tier, or refusing to cache-fill on requests that match crawl patterns rather than human navigation graphs.
Designing for the majority you didn’t want
The through-line across the botnet takedown and the AI-Overviews ruling is the same: the cheap proxies for identity and intent — IP address, request volume, “a session is a person” — have stopped working, and the institutions noticing first are law enforcement and regulators, not platform teams.
The practical move is to stop treating bot traffic as an exception handled by a bolt-on WAF rule and start treating it as the default population your systems serve. Concretely:
- Classify at ingress, not in reporting. Tag every request as human-probable, known-good-bot, or unknown-automation before it touches your rate limiter, cache, or analytics — so each subsystem can make a policy decision instead of inheriting a human-shaped guess.
- Price requests by cost, not by count. Proof-of-work and per-session compute budgets survive the 17-million-IP spread that per-IP limits cannot.
- Segment every metric. A bounce rate that mixes a GPT crawler with a reader is not a number you can act on.
The web didn’t ask permission before its traffic went majority-machine. The debt is already on the books. The only choice left is whether you keep paying interest by optimizing for the user who’s now in the minority.


