Discoverability Checks
D1 robots.txt, D2 XML sitemap, D3 Link header — what each means and how to fix it.
Discoverability answers a simple question: can an agent actually find your pages? If the agent is blocked at the front door or has to guess at your URL structure, nothing else matters.
D1 — robots.txt present & sane (weight 6)
AIScan fetches /robots.txt and checks three things: it returns 200, it doesn't catch-all blockUser-agent: * with Disallow: /, and it advertises your Sitemap: URL.
How to fix
Serve a non-blocking robots file that references your sitemap. Minimum viable:
User-agent: *
Allow: /
Sitemap: https://yourdomain.com/sitemap.xmlD2 — XML sitemap (weight 4)
AIScan looks at /sitemap.xml and /sitemap_index.xml. A valid sitemap lets agents discover every URL without crawling the entire site graph.
How to fix
- WordPress — Yoast SEO, Rank Math, or core 5.5+ auto-generate one.
- Shopify — generated automatically at
/sitemap.xml. - Next.js / TanStack / SPA — generate one at build or via a server route.
Reference it from robots.txt so a single Sitemap: line covers discovery.
D3 — Link header for discovery (weight 3)
AIScan inspects the HTTP Link response header on your homepage. A rel=api-catalog or rel=describedby entry points agents at a machine-readable description of what your site exposes — without them having to guess.
How to fix
Add a header at your CDN or framework level:
Link: </.well-known/api-catalog>; rel="api-catalog"If you don't have an API catalog yet, this check is informational on content sites — start with P1 API Catalog first.
E1 — Correct 404 handling (weight 4, essential)
AIScan requests a random path that cannot exist and reads the status line. A missing page must answer 404 (or 410). A soft 404 — HTTP 200 for a page that isn't there — teaches agents that every URL on your domain is valid, so they index error pages as content.
We also measure the body: an empty or near-empty 404 is a dead end. Full credit needs a body that names the site and links back to somewhere useful.
How to fix
- Return a real
404status from your framework's not-found handler. - Render recovery links: homepage, sitemap, docs, search.
- Verify with
curl -sI https://yoursite.com/nope-123 | head -n 1.
E4 — HTTPS & canonical host (weight 4, essential)
Agents resolve bare hostnames. AIScan probes the http:// variant and the opposite www/apex host, then reports the final origin, whether plain HTTP upgrades, whether the alternate host redirects to the canonical one, and whether Strict-Transport-Security is set.
Two live origins means every URL exists twice — duplicated crawl budget and ambiguous citations.
How to fix
# 301 http -> https, and www -> apex (or the reverse; pick one)
Strict-Transport-Security: max-age=31536000; includeSubDomainsAn unreachable alternate host is fine — we only penalise a second host that serves its own copy.
Further reading
- Find AI Crawlers in Your Server Logs and Verify Them
Your analytics tool will not tell you which AI crawlers visit your site, because a crawler that fetches the HTML and leaves does not run its script. Only the server or the edge in front of it sees…
- ChatGPT Says It Can't Access Your Website: Five Causes and How to Tell Which
When ChatGPT says it cannot open your page, one of five things happened, and a short script of four curl requests sorts four of them in about a minute. The fifth is that ChatGPT never tried. This…
- Web Bot Auth Key Directories: 78 of 797 Sites Answer 200, and Most Are Soft 404s
Of 797 sites in our scan corpus, 78 answer HTTP 200 at the Web Bot Auth key directory path. That is 9.8%. The number sounds like early adoption, and it is not. 53 of those 78 sites also fail our…
- Your robots.txt blocks everything by accident: find the leftover Disallow: / and stop it coming back
If your robots.txt says Useragent: followed by Disallow: /, every crawler that obeys the file is told to stay off your whole site. It takes one line to cause and about a minute to find, and Google's…
- IndexNow Setup: Tell Search Engines the Day You Publish
IndexNow lets you tell Bing, Yandex, Naver, Seznam, Yep and Amazon about a new or changed URL the moment it exists, with one HTTP request and one key file on your own domain. It does not reach…
- Does robots.txt Need a Sitemap Line? 782 Sites Show What Happens
Of 782 sites in our scan database on 29 October 2026, 572 serve a robots.txt that declares a sitemap, 89 serve a robots.txt with no Sitemap line, and 121 fail the robots.txt check outright. Declaring…
- Fix soft 404s on Astro, Docusaurus, Lovable, Next.js, Webflow and Wix
A soft 404 is a page that says "not found" while the status line says 200. On the six platforms below, the default behaviour ranges from a correct 404 with a deadend body Webflow, Wix, Docusaurus…
- Add ETag and Last-Modified so crawlers can send conditional requests
To make a page answer 304 Not Modified, send an ETag or a LastModified header on the first response, then answer a repeat request that carries IfNoneMatch or IfModifiedSince with status 304 and no…