---
title: "Astro: agent-ready recipes | Agent Ready Checklist"
description: "Every agent-ready recipe for Astro: 31 rows of the checklist, the version read, the date and the vendor documentation each step came from."
canonical: https://agentreadychecklist.com/platforms/astro
site: "Agent Ready Checklist"
last_updated: 2026-11-05
section: "Platforms"
---

# Astro: agent-ready recipes | Agent Ready Checklist

> Every agent-ready recipe for Astro: 31 rows of the checklist, the version read, the date and the vendor documentation each step came from.

Source: https://agentreadychecklist.com/platforms/astro
Site: Agent Ready Checklist
Last reviewed: 2026-11-05
Agent endpoints: https://agentreadychecklist.com/llms.txt (index), https://agentreadychecklist.com/openapi.json (API), https://agentreadychecklist.com/mcp (MCP server), https://agentreadychecklist.com/ask (search)
Access: https://agentreadychecklist.com/auth.md (no key). Pricing: https://agentreadychecklist.com/pricing.md (free).

# Astro: agent-ready recipes

Astro: 31 recipes against the 31 checklist rows, read on 2026-11-04. Astro: 25 are direct, 6 are workarounds. Astro recipes cite the page they were derived from, or the specification when the step is generic. A Astro workaround names the real route: a proxy, an edge function or a domain you control. Version read for Astro: Astro 7.x.

## Version and documentation read

Version

Astro 7.x (npm latest astro 7.4.5, @astrojs/sitemap 3.7.4, read 2026-11-04)

Read on

2026-11-04

Recipes

25 direct, 6 workaround, 0 not possible on the platform

robots.txt

[docs.astro.build/en/guides/endpoints/](https://docs.astro.build/en/guides/endpoints/). No robots helper; write public/robots.txt or a src/pages/robots.txt.ts static endpoint.

Sitemap

[docs.astro.build/en/guides/integrations-guide/sitemap/](https://docs.astro.build/en/guides/integrations-guide/sitemap/). @astrojs/sitemap generates sitemap-index.xml from the site option at build time.

Structured data

No first-party doc: Astro docs have no JSON-LD page. Use <script type="application/ld+json" set:html={JSON.stringify(data)} /> in the page head (set:html is in the directives reference).

Status codes

[docs.astro.build/en/basics/astro-pages/](https://docs.astro.build/en/basics/astro-pages/). src/pages/404.astro builds to 404.html, which hosts serve with a 404; endpoints can return new Response(null, { status: 404 }).

Headers and redirects

[docs.astro.build/en/guides/routing/](https://docs.astro.build/en/guides/routing/). redirects config and Astro.redirect; response headers on on-demand pages through Astro.response.headers or middleware.

Content negotiation

[docs.astro.build/en/guides/middleware/](https://docs.astro.build/en/guides/middleware/). onRequest middleware can read context.request.headers.get("accept") on on-demand routes and rewrite.

llms.txt

[docs.astro.build/en/guides/endpoints/](https://docs.astro.build/en/guides/endpoints/). No built-in; generate src/pages/llms.txt.ts as a static endpoint.

OpenAPI

[docs.astro.build/en/basics/project-structure/](https://docs.astro.build/en/basics/project-structure/). No OpenAPI support; files in public/ are copied to the build root untouched.

[The checklist table for Astro](https://agentreadychecklist.com/platform/astro/checklist/) shows every row with its first step.

## Verify with Ora

Astro has a direct recipe for 25 rows, and Ora's catalogue (read 2026-11-05) names a matching check for 21 of them, among them AR-FIND-01, AR-FIND-03, AR-FIND-04. After the steps are live, one audit shows which of those fixes the score picks up.

```bash
npx ax@0.10 audit https://example.com --min-score 70
```

5 rows that Ora checks are a workaround or not possible on Astro: [AR-ACT-03](https://agentreadychecklist.com/checklist/ar-act-03/) (mcp-server, workaround); [AR-ACT-05](https://agentreadychecklist.com/checklist/ar-act-05/) (mcp-app-registry, workaround); [AR-ACT-08](https://agentreadychecklist.com/checklist/ar-act-08/) (x402-support, workaround); [AR-ACT-09](https://agentreadychecklist.com/checklist/ar-act-09/) (nlweb-ask, workaround); [CF-MARKDOWN-NEGOTIATION](https://agentreadychecklist.com/checklist/cf-markdown-negotiation/) (markdown-negotiation-vary, workaround). Ora scores the site as it stands, so a row the platform cannot satisfy stays open until the workaround is in place.

Run it again with `--force` after a deploy, so the audit skips Ora's cache. [Gate deploys on it in CI](https://agentreadychecklist.com/guides/gate-deploys-on-agent-readiness-in-ci/), [why this site recommends Ora](https://agentreadychecklist.com/verify-with-ora/), [the crosswalk of rows and checks](https://agentreadychecklist.com/checklist/ora-checks/).

## Recipes, row by row

### [AR-FIND-01](https://agentreadychecklist.com/checklist/ar-find-01/): Do not block agentsrecipe

Write public/robots.txt with "User-agent: \*" and "Allow: /". Avoid named disallow groups for agent tokens. Check the host WAF separately.

Read 2026-11-04. [docs.astro.build/en/basics/project-structure/](https://docs.astro.build/en/basics/project-structure/)

### [AR-FIND-02](https://agentreadychecklist.com/checklist/ar-find-02/): Answers on one first-party pagerecipe

Publish each answer once, as a page on your own domain. Put the fact (price, limit, version) in the page text, give the page one stable address, and link it from the home page and from llms.txt. Keep the page current: a second, older copy elsewhere on the site is the usual way an agent cites the wrong figure.

Generic step from the AgentReady specification; not platform-specific. [github.com/agentready-org/standard/blob/main/spec/spec.md](https://github.com/agentready-org/standard/blob/main/spec/spec.md)

### [AR-FIND-03](https://agentreadychecklist.com/checklist/ar-find-03/): Sitemap listed in robots.txtrecipe

npx astro add sitemap, set site: "https://example.com" in astro.config.mjs, then add "Sitemap: https://example.com/sitemap-index.xml" to robots.txt.

Read 2026-11-04. [docs.astro.build/en/guides/integrations-guide/sitemap/](https://docs.astro.build/en/guides/integrations-guide/sitemap/)

### [AR-FIND-04](https://agentreadychecklist.com/checklist/ar-find-04/): AI Catalog at .well-knownrecipe

Put the catalog at public/.well-known/ai-catalog.json, or generate it in src/pages/.well-known/ai-catalog.json.ts with export const GET = () => Response.json(catalog).

Read 2026-11-04. [docs.astro.build/en/guides/endpoints/](https://docs.astro.build/en/guides/endpoints/)

### [AR-READ-01](https://agentreadychecklist.com/checklist/ar-read-01/): Answer in the initial HTMLrecipe

Astro prerenders pages to HTML by default. Keep the answer in .astro or Markdown content; do not move it into a client:only island, which renders nothing on the server.

Read 2026-11-04. [docs.astro.build/en/reference/directives-reference/](https://docs.astro.build/en/reference/directives-reference/)

### [AR-READ-02](https://agentreadychecklist.com/checklist/ar-read-02/): Real HTTP status codesrecipe

Create src/pages/404.astro (builds to 404.html). In endpoints and on-demand pages return new Response(null, { status: 404 }). For throttling in middleware return new Response("Too Many Requests", { status: 429, headers: { "Retry-After": "60" } }).

Read 2026-11-04. [docs.astro.build/en/basics/astro-pages/](https://docs.astro.build/en/basics/astro-pages/)

### [AR-READ-03](https://agentreadychecklist.com/checklist/ar-read-03/): Home page with real linksrecipe

Write the home page as src/pages/index.astro with plain <a href> links to docs, product and pricing; Astro ships them as static HTML.

Read 2026-11-04. [docs.astro.build/en/guides/routing/](https://docs.astro.build/en/guides/routing/)

### [AR-READ-04](https://agentreadychecklist.com/checklist/ar-read-04/): Docs that answer agent tasksrecipe

For each of your top five agent tasks, write a page that holds the steps as text, in order, with the exact names of the buttons, fields and settings. Steps that exist only in an image, a video or a script-built widget are not in the response a plain fetch receives. Fetch the page with curl and grep for the step.

Generic step from the AgentReady specification; not platform-specific. [github.com/agentready-org/standard/blob/main/spec/spec.md](https://github.com/agentready-org/standard/blob/main/spec/spec.md)

### [AR-READ-05](https://agentreadychecklist.com/checklist/ar-read-05/): Fenced, language-tagged coderecipe

Write fenced code with a language in Markdown and MDX (\`\`\`bash). Astro highlights it with Shiki at build time and keeps the language on the pre element.

Read 2026-11-04. [docs.astro.build/en/guides/syntax-highlighting/](https://docs.astro.build/en/guides/syntax-highlighting/)

### [AR-READ-06](https://agentreadychecklist.com/checklist/ar-read-06/): Link the discovery filesrecipe

In the shared layout head add <link rel="alternate" type="text/markdown" href={mdUrl}>, and footer links to /llms.txt and /openapi.json.

Read 2026-11-04. [docs.astro.build/en/basics/astro-pages/](https://docs.astro.build/en/basics/astro-pages/)

### [AR-READ-07](https://agentreadychecklist.com/checklist/ar-read-07/): Ship llms.txtrecipe

Create src/pages/llms.txt.ts: export async function GET() { const docs = await getCollection("docs"); return new Response(body, { headers: { "Content-Type": "text/plain; charset=utf-8" } }); }.

Read 2026-11-04. [docs.astro.build/en/guides/endpoints/](https://docs.astro.build/en/guides/endpoints/)

### [AR-READ-08](https://agentreadychecklist.com/checklist/ar-read-08/): JSON-LD on key pagesrecipe

In the page head add <script type="application/ld+json" set:html={JSON.stringify(jsonLd)} />. set:html injects the string without escaping it into entities.

Read 2026-11-04. [docs.astro.build/en/reference/directives-reference/](https://docs.astro.build/en/reference/directives-reference/)

### [AR-READ-09](https://agentreadychecklist.com/checklist/ar-read-09/): Advertise a markdown mirrorrecipe

Generate a twin per entry with src/pages/\[…slug\].md.ts (getStaticPaths over the collection, return entry.body) and link it with the alternate link tag in the layout.

Read 2026-11-04. [docs.astro.build/en/guides/endpoints/](https://docs.astro.build/en/guides/endpoints/)

### [AR-READ-11](https://agentreadychecklist.com/checklist/ar-read-11/): Pricing as first-party HTMLrecipe

Write src/pages/pricing.astro with plans, free tier and limits as HTML text; keep any calculator as an extra island below the table.

Read 2026-11-04. [docs.astro.build/en/basics/astro-pages/](https://docs.astro.build/en/basics/astro-pages/)

### [AR-ACT-01](https://agentreadychecklist.com/checklist/ar-act-01/): Auth an agent can finishrecipe

Run an authorization server, or an identity provider, that issues scoped tokens, and serve its RFC 8414 metadata from the app as the CF-OAUTH-DISCOVERY recipe shows (/platforms/astro/#cf-oauth-discovery). Also offer self-serve API keys with documented scopes.

Generic step from the AgentReady specification; not platform-specific. [github.com/agentready-org/standard/blob/main/spec/spec.md](https://github.com/agentready-org/standard/blob/main/spec/spec.md)

### [AR-ACT-02](https://agentreadychecklist.com/checklist/ar-act-02/): OpenAPI contractrecipe

Copy openapi.json into public/ so it is served at /openapi.json; link it from the footer and llms.txt.

Read 2026-11-04. [docs.astro.build/en/basics/project-structure/](https://docs.astro.build/en/basics/project-structure/)

### [AR-ACT-03](https://agentreadychecklist.com/checklist/ar-act-03/): MCP over Streamable HTTPworkaround

A static Astro build cannot answer a POST or build a response per request, and on-demand endpoints need a server adapter. Add a server adapter and an on-demand endpoint at src/pages/mcp.ts with export const POST and prerender = false, returning the MCP server over Streamable HTTP (a POST answered with JSON or an event stream). Keep a docs MCP public and gate a product MCP with OAuth and PKCE.

Derived from Astro's documentation read on 2026-11-04. [docs.astro.build/en/guides/endpoints/](https://docs.astro.build/en/guides/endpoints/) and [github.com/agentready-org/standard/blob/main/spec/spec.md](https://github.com/agentready-org/standard/blob/main/spec/spec.md)

### [AR-ACT-04](https://agentreadychecklist.com/checklist/ar-act-04/): MCP server cardrecipe

Place the card at /.well-known/mcp/server-card.json the same way the AR-FIND-04 recipe places the AI Catalog (/platforms/astro/#ar-find-04), and give it a serverInfo.name that matches your MCP server. Publish it only if you run an MCP server.

Generic step from the AgentReady specification; not platform-specific. [github.com/agentready-org/standard/blob/main/spec/spec.md](https://github.com/agentready-org/standard/blob/main/spec/spec.md)

### [AR-ACT-05](https://agentreadychecklist.com/checklist/ar-act-05/): MCP Apps viewworkaround

An MCP Apps view is a ui:// resource listed by resources/list on your MCP server. Add it to the server built for AR-ACT-03 (/platforms/astro/#ar-act-03); the platform adds no step of its own. Publish it only if the product has a UI to hand back.

Generic step from the AgentReady specification; not platform-specific. [github.com/agentready-org/standard/blob/main/spec/spec.md](https://github.com/agentready-org/standard/blob/main/spec/spec.md)

### [AR-ACT-06](https://agentreadychecklist.com/checklist/ar-act-06/): SDKs and a CLIrecipe

Publish the SDK and the CLI from the product's own repository to npm or PyPI; the website platform is not involved. Then show the install command and a first call on a page of your own site so that agents reading the site find them. Verify with curl -s https://registry.npmjs.org/<cli-name>/latest.

Generic step from the AgentReady specification; not platform-specific. [github.com/agentready-org/standard/blob/main/spec/spec.md](https://github.com/agentready-org/standard/blob/main/spec/spec.md)

### [AR-ACT-07](https://agentreadychecklist.com/checklist/ar-act-07/): WebMCP toolsrecipe

Add a <script> in the page (Astro bundles it and runs it on load) that feature-detects document.modelContext and calls registerTool for each form action.

Read 2026-11-04. [docs.astro.build/en/guides/client-side-scripts/](https://docs.astro.build/en/guides/client-side-scripts/)

### [AR-ACT-08](https://agentreadychecklist.com/checklist/ar-act-08/): Agent paymentsworkaround

A static Astro build cannot answer a POST or build a response per request, and on-demand endpoints need a server adapter. Add a server adapter and an on-demand endpoint at src/pages/paid.ts with export const GET and prerender = false, returning HTTP 402 with a payment payload on the paid path only (x402 or MPP), or a checkout handler. Put no CAPTCHA in front of a verified agent.

Derived from Astro's documentation read on 2026-11-04. [docs.astro.build/en/guides/endpoints/](https://docs.astro.build/en/guides/endpoints/) and [github.com/agentready-org/standard/blob/main/spec/spec.md](https://github.com/agentready-org/standard/blob/main/spec/spec.md)

### [AR-ACT-09](https://agentreadychecklist.com/checklist/ar-act-09/): NLWeb /ask endpointworkaround

A static Astro build cannot answer a POST or build a response per request, and on-demand endpoints need a server adapter. Add a server adapter and an on-demand endpoint at src/pages/ask.ts with export const GET and prerender = false, returning schema.org-shaped JSON for the query parameter. Mirror the same ask tool over MCP.

Derived from Astro's documentation read on 2026-11-04. [docs.astro.build/en/guides/endpoints/](https://docs.astro.build/en/guides/endpoints/) and [github.com/agentready-org/standard/blob/main/spec/spec.md](https://github.com/agentready-org/standard/blob/main/spec/spec.md)

### [AR-ACT-10](https://agentreadychecklist.com/checklist/ar-act-10/): An MCP server or a CLIrecipe

A CLI meets AR-ACT-10 on any platform: publish it as described in the AR-ACT-06 recipe (/platforms/astro/#ar-act-06). An MCP server also meets it; how Astro hosts one is in the AR-ACT-03 recipe (/platforms/astro/#ar-act-03). Do not ship an empty surface to tick the box.

Generic step from the AgentReady specification; not platform-specific. [github.com/agentready-org/standard/blob/main/spec/spec.md](https://github.com/agentready-org/standard/blob/main/spec/spec.md)

### [CF-CONTENT-SIGNALS](https://agentreadychecklist.com/checklist/cf-content-signals/): Content-Signal linerecipe

Add "Content-Signal: ai-train=no, search=yes, ai-input=yes" under the User-agent: \* group in public/robots.txt.

Read 2026-11-04. [docs.astro.build/en/basics/project-structure/](https://docs.astro.build/en/basics/project-structure/)

### [CF-MARKDOWN-NEGOTIATION](https://agentreadychecklist.com/checklist/cf-markdown-negotiation/): Markdown by Acceptworkaround

Static builds cannot vary by Accept on their own. Either switch the route to on-demand (export const prerender = false with an adapter) and rewrite in middleware when the Accept header contains text/markdown, or use host rules (Vercel has conditions, Cloudflare Markdown for Agents).

Read 2026-11-04. [docs.astro.build/en/guides/on-demand-rendering/](https://docs.astro.build/en/guides/on-demand-rendering/)

### [CF-PAY-PER-CRAWL](https://agentreadychecklist.com/checklist/cf-pay-per-crawl/): Pay per crawl, HTTP 402workaround

Pay per crawl is a feature of Cloudflare AI Crawl Control, set per Cloudflare zone and in closed beta on 2026-11-04, so Astro does not set it, and a crawler is answered 402 only on a zone that has it. Not possible on this platform without outside help. Workaround: put the domain on a Cloudflare zone, where Astro allows a proxy or custom DNS in front, and set the price there. Test with curl -A "GPTBot/1.0".

Derived from Cloudflare's pay per crawl documentation read on 2026-11-04. [developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/](https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/) and [developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/](https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/)

### [CF-OAUTH-DISCOVERY](https://agentreadychecklist.com/checklist/cf-oauth-discovery/): OAuth discovery filesrecipe

Serve public/.well-known/oauth-authorization-server (JSON) or an endpoint at src/pages/.well-known/oauth-authorization-server.ts that returns Response.json(metadata).

Read 2026-11-04. [docs.astro.build/en/guides/endpoints/](https://docs.astro.build/en/guides/endpoints/)

### [CF-AGENT-SKILLS](https://agentreadychecklist.com/checklist/cf-agent-skills/): Agent Skills indexrecipe

Place public/.well-known/agent-skills/index.json and the SKILL.md files it lists under public/.well-known/agent-skills/.

Read 2026-11-04. [docs.astro.build/en/basics/project-structure/](https://docs.astro.build/en/basics/project-structure/)

### [VERCEL-NEGOTIATION-HEADERS](https://agentreadychecklist.com/checklist/vercel-negotiation-headers/): Markdown headersrecipe

In the .md endpoint return headers { "Content-Type": "text/markdown; charset=utf-8", "Vary": "Accept" }; in middleware append Vary: Accept to HTML responses on negotiated routes.

Read 2026-11-04. [docs.astro.build/en/guides/middleware/](https://docs.astro.build/en/guides/middleware/)

### [VERCEL-ROBOTS-EXCLUSIONS](https://agentreadychecklist.com/checklist/vercel-robots-exclusions/): Robots exclusionsrecipe

Open the robots.txt that Astro serves for your site and read every Disallow; each one must have a reason you can state. How the file is produced here: No robots helper; write public/robots.txt or a src/pages/robots.txt.ts static endpoint.

Derived from Astro's documentation read on 2026-11-04. [docs.astro.build/en/guides/endpoints/](https://docs.astro.build/en/guides/endpoints/) and [vercel.com/kb/guide/make-your-site-readable-by-ai-agents](https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents)

## Vendors on this platform

-   [Astro](https://agentreadychecklist.com/vendors/astro/)Framework, 2 of 11 checklist rows read met by default
-   [Starlight](https://agentreadychecklist.com/vendors/starlight/)Docs tool, 2 of 6 checklist rows read met by default

## Sources

-   [ora.ai/api/checks, contract 1.38.0](https://ora.ai/api/checks?utm_source=agentreadychecklist.com&utm_medium=referral&utm_campaign=platform)read 2026-11-05
-   [registry.npmjs.org/ax, the ax README](https://registry.npmjs.org/ax)read 2026-11-05
-   [docs.astro.build/en/guides/endpoints/](https://docs.astro.build/en/guides/endpoints/)read 2026-11-04
-   [docs.astro.build/en/guides/integrations-guide/sitemap/](https://docs.astro.build/en/guides/integrations-guide/sitemap/)read 2026-11-04
-   [docs.astro.build/en/basics/astro-pages/](https://docs.astro.build/en/basics/astro-pages/)read 2026-11-04
-   [docs.astro.build/en/guides/routing/](https://docs.astro.build/en/guides/routing/)read 2026-11-04
-   [docs.astro.build/en/guides/middleware/](https://docs.astro.build/en/guides/middleware/)read 2026-11-04
-   [docs.astro.build/en/basics/project-structure/](https://docs.astro.build/en/basics/project-structure/)read 2026-11-04
-   [github.com/agentready-org/standard/blob/main/spec/spec.md](https://github.com/agentready-org/standard/blob/main/spec/spec.md)read 2026-11-04
-   [docs.astro.build/en/reference/directives-reference/](https://docs.astro.build/en/reference/directives-reference/)read 2026-11-04
-   [docs.astro.build/en/guides/syntax-highlighting/](https://docs.astro.build/en/guides/syntax-highlighting/)read 2026-11-04
-   [docs.astro.build/en/guides/client-side-scripts/](https://docs.astro.build/en/guides/client-side-scripts/)read 2026-11-04
-   [docs.astro.build/en/guides/on-demand-rendering/](https://docs.astro.build/en/guides/on-demand-rendering/)read 2026-11-04
-   [developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/](https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/)read 2026-11-04
-   [vercel.com/kb/guide/make-your-site-readable-by-ai-agents](https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents)read 2026-11-04

Edition

Data

2026-11-04

Reviewed

2026-11-05

Spec

AgentReady v2.0, 273d2d7

Crawl

13,071 rows, 2026-11-04

Ora

132 checks, contract 1.38.0, 2026-11-05

Verify with Ora

The scanner this site recommends for the whole checklist. 132 checks, a score out of 100, no account.

`npx ax@0.10 audit <url> --min-score <n>`

[Why Ora, and its limits](https://agentreadychecklist.com/verify-with-ora/)

Method

-   [How rows, commands and rates are made](https://agentreadychecklist.com/method/)
-   [How an Ora check is matched to a row](https://agentreadychecklist.com/checklist/ora-checks/)
-   [Pass rates by rank band](https://agentreadychecklist.com/data/by-rank/)

Sources and read dates sit at the foot of the page.

Last reviewed 2026-11-05. AgentReady v2.0, read 2026-11-04.
