Platform playbook

AI-agent readiness for Next.js

Next.js sites are usually the strongest thing we scan on rendering: the App Router serves real HTML, headings survive, and metadata is typed. What they miss is everything that lives beside the app rather than inside it — llms.txt, an API catalogue, AI bot rules, a feed. The framework will not write those for you, and the developer who set the project up was optimising for Lighthouse, not for a crawler with a fetch budget.

What our own scans say about Next.js

Not an estimate. These numbers come from public AIScan reports and change as we scan more.

Next.js sites scanned
140

Distinct public domains, counted once each at their most recent scan.

Average score
51/100

Mean of the latest public scan for every Next.js domain we have graded.

What Next.js sites fail most often

Computed from public AIScan reports, refreshed as we scan. Private reports are never included.

How Next.js sites fail, and what fixes it

A static robots.txt that predates AI crawlers

Most projects still ship the two-line public/robots.txt from the starter. It allows everything, says nothing about GPTBot, ClaudeBot, PerplexityBot or Google-Extended, and carries no Content Signals — so your training position is whatever a crawler chooses to assume.

D1 · robots.txt present & saneB2 · Explicit AI bot rulesB1 · Content Signals in robots.txt

No llms.txt, because it is not a route anyone thinks to add

It is a file route: app/llms.txt/route.ts returning text/plain, or a generated file in public/. Ten minutes of work, and it is the first thing an assistant reaches for when deciding what your product is.

C2 · /llms.txt

Client components hiding the answer

A 'use client' boundary around pricing tiers, docs tabs or a comparison table means the served HTML has the shell and none of the numbers. This is the failure mode we see most on otherwise excellent Next.js sites.

E3 · Heading hierarchy & server-rendered textC3 · Structured HTML (title, meta, JSON-LD, single H1)M4 · Machine-readable pricing

A soft 404

not-found.tsx that returns 200 tells a crawler every mistyped URL is a real page. Correct status codes are how an agent knows which of its guesses were right.

E1 · Correct 404 handling

An API nobody can discover

Route handlers under app/api are invisible without an OpenAPI description and a link to it. An API catalogue at /.well-known/api-catalog is the standards-shaped way to say 'here is what this site can do', not just what it can show.

P1 · API Catalog (RFC 9727)E2 · Machine-readable API description

Step-by-step fixes: /docs/platforms/nextjs · /docs/checks/content · /docs/checks/capabilities · /llms-txt-generator

Businesses running on Next.js

Questions Next.js owners ask

Where do I put llms.txt in a Next.js app?
Either public/llms.txt for a hand-written file, or a route handler at app/llms.txt/route.ts that generates it from your content source so it cannot go stale. Both satisfy check C2; the generated one stays true.
Does server-side rendering guarantee a good content score?
No. SSR gets the shell rendered; check E3 asks whether the actual answer — the price, the spec, the hours — is in that HTML. A client component inside a server page still ships empty.
My not-found page looks right but E1 fails. Why?
The page looks right and the status code is 200. Return a real 404 from the route or use notFound() so the status matches the page.
Is an OpenAPI file worth it for a small product?
If you have any public endpoint, yes — it is what turns 'a website with an API' into something an agent can actually call. Checks P1 and E2 grade discovery and description separately.
Do I need a feed if I have a sitemap?
They are different signals. A feed (E5) tells an assistant what is new; a sitemap (D2) tells it what exists. Blog-bearing sites should have both.

Scan your Next.js site and see where you actually stand

Free, no account, about twenty seconds. The report names every failing check by ID, shows the evidence we found, and gives the fix for your platform — plus a hand-off prompt you can paste straight into Claude Code or Cursor.

Run a free scan npx aiscan-cli yoursite.com

Prefer to read first? Browse every check we run or the guide library.