---
title: "Agent ready checklist: Next.js | Agent Ready Checklist"
description: "The agent readiness checklist for Next.js. All 31 rows, with a verify command for each. The first step of its recipe sits beside each row."
canonical: https://agentreadychecklist.com/platform/nextjs-app-router/checklist
site: "Agent Ready Checklist"
last_updated: 2026-11-05
section: "Platforms"
---

# Agent ready checklist: Next.js | Agent Ready Checklist

> The agent readiness checklist for Next.js. All 31 rows, with a verify command for each. The first step of its recipe sits beside each row.

Source: https://agentreadychecklist.com/platform/nextjs-app-router/checklist
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).

# Agent ready checklist: Next.js

The checklist for Next.js (App Router): all 31 rows, with the first step of the recipe where one exists. Next.js has a recipe on 31 rows: 29 direct, 2 with a workaround and 0 not possible on the platform. The first recipe, for AR-FIND-01, begins: In app/robots.ts return rules: \[{ userAgent: "\*", allow: "/" }\] and add a sitemap URL.

## Verify with Ora

Next.js (App Router) has a direct recipe for 29 rows, and Ora's catalogue (read 2026-11-05) names a matching check for 26 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
```

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/).

## All 31 rows on Next.js

| Identifier | Level | Layer | What it asks | Verify command | On Next.js (App Router) |
| --- | --- | --- | --- | --- | --- |
| AR-FIND-01 | MUST | Find | Do not block agents | verify.sh --only=reach-as-agent,robots-verdicts | recipe: In app/robots.ts return rules: [{ userAgent: "*", allow: "/" }] and add a sitemap URL. |
| AR-FIND-02 | SHOULD | Find | Answers on one first-party page | manual check, see the page | recipe: Publish each answer once, as a page on your own domain. |
| AR-FIND-03 | SHOULD | Find | Sitemap listed in robots.txt | verify.sh --only=sitemap-listed | recipe: Create app/sitemap.ts exporting a default function that returns MetadataRoute.Sitemap… |
| AR-FIND-04 | MAY | Find | AI Catalog at .well-known | verify.sh --only=ai-catalog | recipe: Add app/.well-known/ai-catalog.json/route.ts exporting GET that returns Response.json({… |
| AR-READ-01 | MUST | Read | Answer in the initial HTML | verify.sh --only=initial-html | recipe: Keep pages as Server Components (the App Router default) so content is in the HTML response. |
| AR-READ-02 | MUST | Read | Real HTTP status codes | verify.sh --only=status-codes | recipe: Call notFound() from next/navigation when a record is missing; Next.js renders… |
| AR-READ-03 | SHOULD | Read | Home page with real links | verify.sh --only=initial-html | recipe: Render the home page as a Server Component and use next/link Link components, which output… |
| AR-READ-04 | SHOULD | Read | Docs that answer agent tasks | manual check, see the page | recipe: For each of your top five agent tasks, write a page that holds the steps as text, in… |
| AR-READ-05 | SHOULD | Read | Fenced, language-tagged code | verify.sh --only=code-fences | recipe: In MDX pages write fenced blocks with a language (```ts). |
| AR-READ-06 | SHOULD | Read | Link the discovery files | verify.sh --only=llms-linked,openapi | recipe: In app/layout.tsx export metadata with alternates: { types: { "text/markdown": "/index.md"… |
| AR-READ-07 | SHOULD | Read | Ship llms.txt | verify.sh --only=llms-linked | recipe: Write public/llms.txt (H1, summary blockquote, link lists) or generate it in… |
| AR-READ-08 | SHOULD | Read | JSON-LD on key pages | verify.sh --only=json-ld | recipe: In the page component render <script type="application/ld+json" dangerouslySetInnerHTML={{… |
| AR-READ-09 | MAY | Read | Advertise a markdown mirror | verify.sh --only=markdown-negotiation | recipe: Use generateMetadata to emit alternates.types["text/markdown"] per page, or add a Link… |
| AR-READ-11 | SHOULD | Read | Pricing as first-party HTML | verify.sh --only=initial-html | recipe: Build app/pricing/page.tsx as a Server Component with plans and limits as text in table… |
| AR-ACT-01 | SHOULD | Act | Auth an agent can finish | verify.sh --only=oauth-metadata | recipe: Run an authorization server, or an identity provider, that issues scoped tokens, and serve… |
| AR-ACT-02 | SHOULD | Act | OpenAPI contract | verify.sh --only=openapi | recipe: Commit openapi.json to public/ (served at /openapi.json) or return it from… |
| AR-ACT-03 | SHOULD | Act | MCP over Streamable HTTP | verify.sh --only=mcp-or-cli | recipe: Add a Route Handler at app/mcp/route.ts that exports POST and returns the MCP server over… |
| AR-ACT-04 | MAY | Act | MCP server card | verify.sh --only=mcp-or-cli | recipe: Place the card at /.well-known/mcp/server-card.json the same way the AR-FIND-04 recipe… |
| AR-ACT-05 | MAY | Act | MCP Apps view | manual check, see the page | recipe: An MCP Apps view is a ui:// resource listed by resources/list on your MCP server. |
| AR-ACT-06 | SHOULD | Act | SDKs and a CLI | verify.sh --only=mcp-or-cli | recipe: Publish the SDK and the CLI from the product's own repository to npm or PyPI; the website… |
| AR-ACT-07 | SHOULD | Act | WebMCP tools | verify.sh --only=webmcp | recipe: In a "use client" component call document.modelContext?.registerTool({ name, description,… |
| AR-ACT-08 | MAY | Act | Agent payments | curl -s -o /dev/null -w "%{http_code}" <paid-endpoint> | recipe: Add a Route Handler at app/paid/route.ts that exports GET and returns HTTP 402 with a… |
| AR-ACT-09 | MAY | Act | NLWeb /ask endpoint | curl -s "<origin>/ask?query=pricing" \| jq -e "." | recipe: Add a Route Handler at app/ask/route.ts that exports GET and returns schema.org-shaped… |
| AR-ACT-10 | MUST | Act | An MCP server or a CLI | verify.sh --only=mcp-or-cli | recipe: A CLI meets AR-ACT-10 on any platform: publish it as described in the AR-ACT-06 recipe… |
| CF-CONTENT-SIGNALS | CLOUDFLARE | Find | Content-Signal line | verify.sh --only=robots-verdicts | workaround: MetadataRoute.Robots has no Content-Signal field. |
| CF-PAY-PER-CRAWL | CLOUDFLARE | Find | Pay per crawl, HTTP 402 | curl -s -o /dev/null -w "%{http_code}" -A "GPTBot/1.0" <url> | workaround: Pay per crawl is a feature of Cloudflare AI Crawl Control, set per Cloudflare zone and in… |
| VERCEL-ROBOTS-EXCLUSIONS | VERCEL | Find | Robots exclusions | verify.sh --only=robots-verdicts | recipe: Open the robots.txt that Next.js serves for your site and read every Disallow; each one… |
| CF-MARKDOWN-NEGOTIATION | CLOUDFLARE | Read | Markdown by Accept | verify.sh --only=markdown-negotiation | recipe: In proxy.ts check request.headers.get("accept")?.includes("text/markdown") and return… |
| VERCEL-NEGOTIATION-HEADERS | VERCEL | Read | Markdown headers | verify.sh --only=markdown-negotiation | recipe: In the markdown Route Handler return headers { "Content-Type": "text/markdown;… |
| CF-OAUTH-DISCOVERY | CLOUDFLARE | Act | OAuth discovery files | verify.sh --only=oauth-metadata | recipe: Return the RFC 8414 JSON (issuer, authorization_endpoint, token_endpoint, jwks_uri) from… |
| CF-AGENT-SKILLS | CLOUDFLARE | Act | Agent Skills index | verify.sh --only=agent-skills | recipe: Place public/.well-known/agent-skills/index.json with $schema, and a skills array of {… |

## Sources

-   [ora.ai/api/checks, contract 1.38.0](https://ora.ai/api/checks?utm_source=agentreadychecklist.com&utm_medium=referral&utm_campaign=platform-checklist)read 2026-11-05
-   [registry.npmjs.org/ax, the ax README](https://registry.npmjs.org/ax)read 2026-11-05
-   [nextjs.org/docs/app/api-reference/file-conventions/metadata/robots](https://nextjs.org/docs/app/api-reference/file-conventions/metadata/robots)read 2026-11-04
-   [nextjs.org/docs/app/api-reference/file-conventions/metadata/sitemap](https://nextjs.org/docs/app/api-reference/file-conventions/metadata/sitemap)read 2026-11-04
-   [nextjs.org/docs/app/guides/json-ld](https://nextjs.org/docs/app/guides/json-ld)read 2026-11-04
-   [nextjs.org/docs/app/api-reference/functions/not-found](https://nextjs.org/docs/app/api-reference/functions/not-found)read 2026-11-04
-   [nextjs.org/docs/app/api-reference/config/next-config-js/headers](https://nextjs.org/docs/app/api-reference/config/next-config-js/headers)read 2026-11-04
-   [nextjs.org/docs/app/api-reference/file-conventions/proxy](https://nextjs.org/docs/app/api-reference/file-conventions/proxy)read 2026-11-04
-   [nextjs.org/docs/app/api-reference/file-conventions/route](https://nextjs.org/docs/app/api-reference/file-conventions/route)read 2026-11-04
-   [nextjs.org/docs/app/api-reference/file-conventions/public-folder](https://nextjs.org/docs/app/api-reference/file-conventions/public-folder)read 2026-11-04

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