writing/blog/2026/08
BlogAug 2, 2026·6 min read

Bots Are 57% of Web Traffic: Engineering for AI Agents

Automated requests now outnumber human ones on the web. Here is how to identify, verify and serve AI agent traffic using Web Bot Auth and RFC 9421 signatures.

For the entire history of the web, the person on the other end of a request was a person. That assumption is now wrong more often than it is right.

Cloudflare's 2026 measurements put automated requests at roughly 57.5% of HTML web traffic, against 42.5% from humans — the first crossover the company has recorded. CEO Matthew Prince noted the milestone arrived about eighteen months ahead of their own projections. The driver is not the old story of scrapers and spam bots. It is agentic AI: autonomous programs browsing on behalf of assistants, where a single user question can fan out into hundreds of page fetches.

Most engineering teams have not adjusted. Their analytics still assume a human funnel, their rate limits still assume human pacing, their bot policy is still a binary allow-or-block based on user-agent strings that anyone can forge. This article covers what actually changes at the infrastructure layer.

The Traffic Is Not All The Same

The first mistake is treating "bot traffic" as one category. Cloudflare's May 2026 breakdown of AI crawler requests is instructive:

  • 51.8% are for model training — bulk corpus collection, low value to you, high bandwidth cost
  • 9.3% are for search indexing — the traditional crawl-and-rank relationship
  • The remainder is user-triggered agent activity — someone asked an assistant a question, and it is fetching your page right now to answer it

These three deserve completely different treatment. Training crawls are a pure cost centre unless you have a licensing arrangement. Search crawls are the old bargain: you give content, you get referrals. User-triggered agent fetches are the interesting one — that is a live customer intent arriving through a new channel, and blocking it is equivalent to blocking a browser.

If your bot policy cannot distinguish these three, it is not a policy. It is a coin flip.

Identity: Why User-Agent Strings Are Finished

The historical way to identify a crawler was the user-agent header plus a reverse DNS check against published IP ranges. Both mechanisms are breaking down. User-agent strings are trivially spoofed — a scraper claiming to be GPTBot costs nothing. IP allowlists do not survive an era where agents run from residential proxies, edge functions and user devices.

The replacement is cryptographic, and it is standardising fast.

Web Bot Auth is a Cloudflare-led IETF proposal that builds on RFC 9421 (HTTP Message Signatures), a ratified Proposed Standard from February 2024. The idea is simple: an agent operator generates an Ed25519 keypair, publishes the public key at a discoverable directory, and signs every outbound request with the private key. Your origin verifies the signature. Spoofing becomes cryptographically impossible rather than merely discouraged.

A signed request carries three headers:

Signature-Input: sig=("@authority" "signature-agent");
                 created=1700000000;
                 expires=1700011111;
                 keyid="ba3e64==";
                 tag="web-bot-auth"
Signature: sig=abc==
Signature-Agent: signer.example.com

Signature-Agent tells you where to fetch the public keys. Signature-Input declares which components were signed — here the target authority and the Signature-Agent header itself — plus a validity window and the key thumbprint (RFC 7638). Signature carries the value.

The backing is serious: Cloudflare, Amazon, Akamai and OpenAI, with an IETF working group chartered in 2026. Major operators publish directories at paths such as https://anthropic.com/.well-known/http-message-signatures-directory.

Cloudflare open-sourced the verification stack at cloudflare/web-bot-auth. It ships:

  • web-bot-auth — npm package and Rust crate implementing the draft protocol
  • http-message-sig — RFC 9421 signing and verification
  • jsonwebkey-thumbprint — RFC 7638 key thumbprints
  • Reference implementations as a Cloudflare Worker and a Caddy plugin

There is also a live test endpoint at http-message-signatures-example.research.cloudflare.com for validating your implementation against the RFC 9421 Ed25519 test key before you ship.

For most teams the practical move is not writing a verifier from scratch. It is enabling signature verification at your existing edge — Cloudflare has folded Message Signatures into its Verified Bots programme — and then making a deliberate decision per verified operator.

What A Real Agent Policy Looks Like

Once you can tell signed agents apart from anonymous traffic, tiering becomes possible:

Traffic classTreatment
Verified user-triggered agentsServe fully, generous rate limit, track as a channel
Verified search crawlersServe, standard crawl budget
Verified training crawlersBusiness decision — allow, meter, or require a licence
Unsigned, self-declared botsAggressive rate limit, robots.txt enforcement
Unsigned, spoofing a known UABlock

Note that the useful lever here is rarely "block everything." Blocking user-triggered agent traffic in 2026 has the same effect as blocking mobile browsers in 2010: you disappear from an emerging channel while your competitors do not. The lever is selectivity, which is exactly what cryptographic identity buys you.

Serving Pages An Agent Can Actually Use

Verification solves who. The other half is whether the response is usable.

Agents interact with pages roughly the way a screen reader does — through the DOM, not through pixels. That has concrete implications:

Server-render the content. An agent that receives an empty shell and a JavaScript bundle may or may not execute it. Many will not, and those that do burn budget doing so. If your content only exists after hydration, treat it as invisible.

Use native form semantics. A real form element with labelled inputs and a submit button is navigable. A div with a click handler is not. This is the same discipline that passes a Lighthouse accessibility audit — the two goals converge almost perfectly.

Ship structured data. JSON-LD and schema.org markup give an agent unambiguous facts instead of inferences drawn from layout. For anything with a price, an availability, an address or a date, this is the difference between being quoted correctly and being quoted wrong.

Consider content negotiation. Serving markdown rather than HTML to identified crawlers cuts response size substantially, which lowers your egress bill and raises the odds the agent parses you correctly. Once you can cryptographically identify the requester, this becomes safe to do.

Remove the friction that only exists for humans. CAPTCHAs, infinite scroll without pagination, unlabelled buttons and modal interstitials are all hard stops for an agent. If you want the traffic, clear the path.

Much of this overlaps with what we covered in our guide to AI search optimisation and AEO — but that piece is about being found. This one is about being served correctly once the agent arrives.

Beyond Reading: Letting Agents Transact

Reading a page is the shallow end. The deeper shift is agents that need to do something — book, buy, submit, query.

Three approaches are converging:

  1. Expose transactional APIs rather than forcing UI simulation. An agent driving your checkout through DOM clicks is fragile for both of you.
  2. Adopt an emerging commerce protocol — the Agentic Commerce Protocol for ChatGPT purchases, or the Universal Commerce Protocol for a vendor-neutral path.
  3. Expose functions directly to in-page agents via WebMCP, which lets a site declare callable tools to a browser-resident agent instead of hoping it infers them from markup.

All three require an authorisation story. OAuth 2.1 with scoped credentials, plus resource-level access control, is the pattern that has settled: an agent acting for a user gets a narrow, revocable, auditable token — not the user's session cookie. Anything looser and you have built a prompt injection amplifier with your database behind it.

Instrument Before You Decide

The step almost everyone skips: measure your own split first.

Add agent classification to your analytics before you change a single policy. Segment by signature verification status, by declared operator, and by request purpose. Most teams who do this discover two things at once — that their bot share is far higher than they assumed, and that a meaningful slice of it is genuine user intent they had been quietly throttling.

You cannot make a sensible decision about traffic you have never separated. Cloudflare's 57.5% is an internet-wide average, not your number. Find yours.

The Short Version

The web is no longer a human-only medium, and the tooling to handle that honestly now exists. RFC 9421 is ratified. Web Bot Auth has an IETF working group and implementations in TypeScript and Rust. Structured data and accessible markup — the things good engineers already do — turn out to be exactly what agents need.

The teams that treat agent traffic as an engineering surface rather than an abuse problem will spend the next two years being reachable through a channel their competitors have blocked by default.


Building for the agentic web? Noqta helps teams across Tunisia and Saudi Arabia design agent-ready infrastructure — from bot identity and edge policy to MCP integration and structured content. Talk to us.