One signal per version, nothing else, served by a Worker that adds nothing of its own. 78 AI agents were each given one version and one instruction: find out how to search it, then search for "ferrari". Nobody told them what to look for.
/q-p6a1z), so it cannot be guessedtNN.964433797.xyz): no automatic redirects, no platform headers, no Markdown conversionwebfetch only (GET, no response headers)| Version | The only signal on the site | Visible to |
|---|---|---|
| t00 ↗ | nothing | – |
| t01 ↗ | <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml"> | head file |
| t02 ↗ | <form role="search" action="/q-…" method="get"><input name="q"> | page |
| t03 ↗ | <link rel="service-desc" type="application/json" href="/openapi.json"> | head file |
| t04 ↗ | Link: </openapi.json>; rel="service-desc" (HTTP response header only) | header file |
| t05 ↗ | <link rel="api-catalog" href="/.well-known/api-catalog"> → linkset → /openapi.json | head file |
| t06 ↗ | <a href="/developers">Developers / API</a> (footer) | page |
| t07 ↗ | <meta name="agent:instructions" content="…"> <meta name="agent:search" content="…/q-…?q={query}"> | head |
| t071 ↗ | <meta name="agent:search" content="…/q-…?q={query}"> (no agent:instructions) | head |
| t08 ↗ | <meta name="api-endpoint" content="…/q-…?q={query}"> | head |
| t09 ↗ | <script type="application/ld+json"> WebSite → SearchAction urlTemplate | head |
| t10 ↗ | /llms.txt only, not linked from any page | file |
| t11 ↗ | <div style="display:none" class="agent-instructions">…</div> | hidden |
head HTML <head> · header HTTP response header · page visible on the page · hidden hidden element · file extra file to fetch. Every version: same 182 pages, endpoint returns JSON { query, results }. Click a version to open it.
| Fetch | curl | Browser | Found | Avg req | ||||
|---|---|---|---|---|---|---|---|---|
| run 1 | run 2 | run 1 | run 2 | run 1 | run 2 | |||
| t00 — | ✗gave up · 20 req | ✗gave up · 22 req | ✗gave up · 53 req | ✗gave up · 64 req | ✗gave up · 14 req | ✗gave up · 14 req | 0/6 | – |
| t01 rel=search | ✓3 req | ✓3 req | ✓4 req | ✓4 req | ✗gave up · 37 req | ✗gave up · 18 req | 4/6 | 3.5 |
| t02 <form> | ✓2 req | ✓2 req | ✓2 req | ✓2 req | ✓2 req | ✓2 req | 6/6 | 2.0 |
| t03 rel=service-desc | ✓3 req | ✓3 req | ✓4 req | ✓4 req | ✓10 req | ✓*18 req | 6/6 | 7.0 |
| t04 Link header | ✓*23 req | ✓*17 req | ✓3 req | ✓4 req | ✓*13 req | ✓*20 req | 6/6 | 13.3 |
| t05 rel=api-catalog | ✓4 req | ✓4 req | ✓5 req | ✓5 req | ✓12 req | ✓*13 req | 6/6 | 7.2 |
| t06 dev link | ✓3 req | ✓3 req | ✓4 req | ✓4 req | ✓3 req | ✓3 req | 6/6 | 3.3 |
| t07 agent:search | ✓2 req | ✓2 req | ✓3 req | ✓3 req | ✓9 req | ✓12 req | 6/6 | 5.2 |
| t071 agent:search only | ✓2 req | ✓2 req | ✓3 req | ✓3 req | ✓6 req | ✓7 req | 6/6 | 3.8 |
| t08 meta api-endpoint | ✓2 req | ✓2 req | ✓2 req | ✓2 req | ✓13 req | ✓18 req | 6/6 | 6.5 |
| t09 JSON-LD | ✓2 req | ✓2 req | ✓2 req | ✓2 req | ✓15 req | ✓6 req | 6/6 | 4.8 |
| t10 llms.txt | ✓9 req | ✓5 req | ✓13 req | ✓11 req | ✓6 req | ✓5 req | 6/6 | 8.2 |
| t11 hidden div | ✓4 req | ✓3 req | ✓4 req | ✓3 req | ✓18 req | ✗gave up · 31 req | 5/6 | 6.4 |
| With a signal | 24/24 · avg 4.5 req | 24/24 · avg 4.0 req | 21/24 · avg 10.0 req | 69/72 | 6.0 | |||
✓ = got results from the version's endpoint · req = requests to the site up to and including the search (server logs) · ✓* = guessed /openapi.json or /.well-known/api-catalog without seeing the signal
| Version | Fetch | curl | Browser |
|---|---|---|---|
| t02 <form> | |||
| t09 JSON-LD | |||
| t08 meta api-endpoint | |||
| t071 agent:search only | |||
| t07 agent:search | |||
| t06 dev link | |||
| t03 rel=service-desc | |||
| t11 hidden div | |||
| t01 rel=search | not found | ||
| t05 rel=api-catalog | |||
| t10 llms.txt | |||
| t04 Link header |
Average over the successful runs (2 per cell). The minimum possible is 2: the homepage and the search. Sorted by the fetch + curl average. * includes runs that guessed a conventional path instead of using the signal.
| Fetch | curl | Browser | Found | Avg req | ||||
|---|---|---|---|---|---|---|---|---|
| run 1 | run 2 | run 1 | run 2 | run 1 | run 2 | |||
| t07 agent:instructions + agent:search | ✓2 req | ✓2 req | ✓3 req | ✓3 req | ✓9 req | ✓12 req | 6/6 | 5.2 |
| t071 agent:search only | ✓2 req | ✓2 req | ✓3 req | ✓3 req | ✓6 req | ✓7 req | 6/6 | 3.8 |
<meta name="agent:search" content="https://t071.964433797.xyz/q-n4t8v?q={query}">
No text says what the tag is for, what it returns or that no authentication is needed.
Fetch: “The `<head>` contains `<meta name="agent:search" content="https://t071.964433797.xyz/q-n4t8v?q={query}">`, which gives a URL template for searching. I put "ferrari" in place of `{query}` and requested that URL.”
Browser: “I then looked at the homepage's `<head>` HTML and found `<meta name="agent:search" content="https://t071.964433797.xyz/q-n4t8v?q={query}">`. This is a URL template for searching.”
The instructions did not change whether agents found the search, or how fast. The browser still has to choose to read the <head> in both versions.
<link rel="search">, but Chrome treats opensearch.xml as a download (ERR_ABORTED), so the template was never read.Link header. The other 4 runs got there because /openapi.json is a conventional path./openapi.json and /.well-known/api-catalog before reading the <head>./robots.txt | |
/llms.txt | |
/sitemap.xml | |
/opensearch.xml | |
/.well-known/api-catalog | |
/openapi.json | |
/search?q= | |
/api/search?q= | |
/.well-known/mcp.json |
Includes requests to files that were the signal on some versions. /llms.txt is why t10 worked 6/6 without any link.
| Pages (previous round) | Worker (this round) | |
|---|---|---|
| Hosts | tNN.dummy-website-80l.pages.dev | tNN.964433797.xyz |
| Automatic redirects (308) | 38 in 20 of 72 runs | 0 |
| Headers added by the platform | x-robots-tag: noindex, cache-control, CORS | none (only server, cf-ray) |
| No signal (t00) found | 0/6 | 0/6 |
| Found through the signal | 57/66 | 57/66 |
| Found by guessing a path | 2 | 6 |
| Failed | 7 | 3 |
| Avg requests via the signal: Fetch / curl / Browser | 2.8 / 3.9 / 7.3 | 3.1 / 4.1 / 8.9 |
Removing the platform's own behaviour did not change what agents find: 57/66 through the signal in both rounds (t00–t11; t071 only exists on the Worker).
These are agent choices, not the platform: the browser read the <head> on t07 this time but not on one t11 run, and fetch and browser tried /openapi.json on t04.
{query} on their own.Link header (t04) and only got there by guessing /openapi.json.<form>) 6/6 in 2 requests, t06 (dev link) 6/6 in 3.3.<head> signals if they choose to read the HTML. The accessibility tree hides them. They never used OpenSearch (0/4 across both rounds, Chrome downloads the file) or the header.<form> or developer link, plus one machine-readable pointer in the HTML (agent:search, meta or service-desc), and the spec at a conventional path.Caveats: one model family (Claude via OpenCode), 2 runs per cell, three harnesses; between rounds, 7 of 72 runs changed outcome. Discouraged signals (t08, t09, t11) worked here, but the source recommends against them for other reasons (hidden content, non-standard markup).
Data: results/worker/ (this round) and results/clean/ (Pages round): prompts, 72 reports each, logs, conformance, summary.json