Next.js / Vercel

Next.js / Vercel

Make a Next.js app agent-ready: static files, route handlers, and OG metadata.

Next.js gives you typed APIs for every metadata signal AIScan looks at. App Router projects can move every fix from "a file you forgot to update" to "code reviewed in a PR".

Per-route metadata

Export metadata (or generateMetadata) per page and per layout:

// app/about/page.tsx
export const metadata = {
  title: "About — Acme",
  description: "How Acme came to be.",
  alternates: { canonical: "https://acme.com/about" },
  openGraph: {
    title: "About — Acme",
    description: "How Acme came to be.",
    url: "https://acme.com/about",
    type: "article",
  },
};

robots.ts / robots.txt

App Router supports a typed app/robots.ts that AIScan reads the same as a static file:

// app/robots.ts
import type { MetadataRoute } from "next";

export default function robots(): MetadataRoute.Robots {
  return {
    rules: [
      { userAgent: "*", allow: "/" },
      { userAgent: ["GPTBot", "ClaudeBot", "PerplexityBot", "Google-Extended"], allow: "/" },
    ],
    sitemap: "https://acme.com/sitemap.xml",
  };
}

sitemap.ts

// app/sitemap.ts
import type { MetadataRoute } from "next";

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const posts = await getPosts();
  return [
    { url: "https://acme.com/", changeFrequency: "weekly", priority: 1.0 },
    ...posts.map((p) => ({
      url: `https://acme.com/blog/${p.slug}`,
      lastModified: p.updatedAt,
    })),
  ];
}

Public & .well-known files

Drop llms.txt, CLAUDE.md, aiscan-skill.json, and any .well-known/* files into public/. Next.js serves them at the matching site path. For dynamic content (an MCP server card derived from your DB), expose a route handler at app/.well-known/mcp/server-card.json/route.ts that returns JSON.

Edge headers (Vercel)

Add a Link response header in middleware.ts or vercel.json:

// vercel.json
{
  "headers": [
    {
      "source": "/(.*)",
      "headers": [
        { "key": "Link", "value": "</.well-known/api-catalog>; rel=\"api-catalog\"" }
      ]
    }
  ]
}