Why agent access breaks silently
Every way an agent fails on your site produces a normal-looking response. No errors, no alerts, no spike on a dashboard. Why your existing monitoring cannot see it, and what to watch instead.
Max Kruger
When your payment provider goes down, you find out in minutes. Error rates spike, alerts fire, someone messages you. The system is built to notice.
When an AI agent cannot use your site, nothing happens at all. No error, no alert, no anomaly. Your monitoring is watching for failures, and from your infrastructure's point of view there was no failure. Someone just left.
Accurate as of July 2026.
Every failure looks like a success
Work through the ways an agent fails, and notice what each one looks like in your logs.
| What happened | What your server recorded |
|---|---|
| Bot rules blocked the agent | A 403, exactly as configured |
| Profile behind a redirect | A 301, which you set up on purpose |
| Rate limit caught a burst | A 429, working as intended |
| Agent misread the page | A 200 with correct HTML |
| Checkout needed a dismissed modal | A 200, then nothing |
| Challenge page served to the agent | A 200, containing a challenge |
Not one of those is an error. Four of them are your configuration doing precisely what you asked. The 200s are the worst of the set, because they are indistinguishable from success at every layer you have instrumented.
This is the whole problem in one table. Conventional monitoring detects deviation from normal. None of this deviates from normal.
The counterfactual you cannot measure
The deeper issue is that the thing you want to count is a non-event.
You cannot measure the agent that decided your site was unusable and recommended a competitor. There is no row for it. In the best case there is a single 403 among thousands of legitimate ones, with nothing distinguishing it from the scraper you were actually trying to block.
Compare it to cart abandonment, which is at least visible: a session started, progressed, and stopped. You can count it and chart it. An agent turned away at the edge never gets far enough to register as anything.
So the honest position is that you cannot monitor this the way you monitor uptime. You have to go and check, deliberately, because the absence of a signal is not evidence of health.
Three specific silences
The redirect that only you can follow
Your apex redirects to www. The UCP profile answers on one host. You open it in a browser, your browser follows the redirect without mentioning it, you see valid JSON and conclude it works.
An agent gets a 301 and stops, because the specification tells it not to follow redirects there. To that agent you have no integration.
Nothing is broken. Your redirect is correct, your profile is correct, your browser is behaving normally. The failure lives entirely in the gap between how you tested and how it is consumed.
The header nobody looks at
Cache-Control is required on a profile response. Every Shopify-served profile we checked in July 2026 was missing it.
The body is perfect. The status is 200. Anyone eyeballing the JSON concludes it is fine, because the defect is in a header, and nobody reads headers unless they are already suspicious.
The rename that fails quietly
WebMCP renamed the entry point that tool registration hangs off. Code written against the old one does not throw. It registers nothing.
Your page loads. Your console is clean. Your tests pass, if your tests check that the page renders. And to an agent your site simply has no tools, exactly like a site that never implemented WebMCP at all.
A failure that throws is a good failure. It tells you. This class of failure is defined by not telling you.
Why it gets worse over time
A working integration does not stay working, and the forces acting on it are all invisible from inside your codebase.
The specifications move. UCP shipped a breaking release twelve days after its first tagged version, and the upstream notes did not spell out what changed. Versions are dates, so the version string will not tell you whether you are affected.
Your platform changes underneath you. If your profile is served by your ecommerce platform, its behaviour is theirs to change. You will not get a release note.
Your own infrastructure drifts. A new WAF rule, a marketing redirect, a domain migration, a CDN default. Each is a reasonable change made by someone with no idea it touches agent traffic.
Defaults shift. From September 2026, new domains onboarding to Cloudflare get defaults that block agent-classified traffic on pages showing ads.
Every one of those can break you without a single commit to your repository. That is the argument for checking on a schedule rather than at launch: the interesting result is not the first one, it is the day the result changes.
What you can actually watch
You cannot monitor the absence of agents, but you can monitor several proxies.
Check the integration deliberately, and repeatedly. Fetch your profile the way an agent would, on every customer-facing host, without following redirects. In CI, or on a schedule. This is the only method that tests the actual contract rather than a side effect of it.
Alert on the shape changing, not on errors. Your profile returning a different status, losing a header, or changing version is a meaningful event even though none of those are errors.
Watch for known agent traffic and its absence. If you normally see ChatGPT-User or Google-Agent in your logs and that stops, something changed. Absence is a weak signal, but it is a signal, and it is the only one available.
Treat an indeterminate result as a finding. If your own check comes back rate limited or challenged, do not shrug it off as a flaky test. A real agent hit the same wall. This is why our checker reports that state separately rather than calling it "no integration".
Read the spec changelog. Not glamorous, but the breaking change that affects you will arrive as a release note before it arrives as lost revenue. We keep a plain English UCP changelog for exactly this.
The uncomfortable summary
The absence of complaints is not evidence that this works. Nobody will complain, because the person who was let down was not a person, and the person behind it does not know what went wrong either. They asked an assistant to buy something, it did not happen, and they moved on.
The only way to know is to go and look. Check your site, then check it again next month.
Read next
- How agents see your website — the four stages and where each one fails
- How Cloudflare bot rules affect AI agents — the most common cause of the access failure
- How to validate a UCP integration — the checklist to run