## Sin convención de primera parte (todavía)

Next.js incluye convenciones de archivos de metadatos para `robots.txt` y `sitemap.xml` — exportas una función desde `app/robots.ts` y el framework sirve el archivo. **No existe tal convención para llms.txt** (hay una petición abierta, discusión #80692 de vercel/next.js), así que lo cableas tú mismo. Dos patrones, ambos triviales:

## Patrón 1: archivo estático

Pon `llms.txt` en `public/`. Next.js sirve lo que haya ahí en la raíz, así que `public/llms.txt` → `tusitio.com/llms.txt`. Listo.

La opción correcta cuando tus páginas clave cambian poco. El riesgo es la deriva: el archivo dice lo que tu sitio *era*.

## Patrón 2: route handler

Para contenido que se mueve — docs, productos, posts — genera el archivo desde la misma fuente de verdad que tus páginas:

```
// app/llms.txt/route.ts
import { getDocs } from '@/lib/content';

export async function GET() {
  const docs = await getDocs();
  const body = [
    '# Acme',
    '',
    '> Acme es una API de widgets para desarrolladores.',
    '',
    '## Docs',
    ...docs.map(d => `- [${d.title}](/docs/${d.slug}): ${d.summary}`),
    '',
    '## Superficies legibles por máquina',
    '- [Especificación OpenAPI](/openapi.json): esquema completo de la API',
  ].join('\n');
  return new Response(body, {
    headers: { 'Content-Type': 'text/plain; charset=utf-8' },
  });
}
```

Añade `export const revalidate = 3600` si tu fuente de contenido es costosa. El mismo patrón sirve [llms-full.txt](/kb/llms-full-txt) si quieres el compañero de texto completo.

## Qué incluir

La curación supera a la exhaustividad: qué es el sitio (un blockquote), la docena de páginas por las que un agente debería empezar con resúmenes de una línea, y referencias cruzadas a tus superficies de máquina — la [especificación OpenAPI](/kb/openapi) y cualquier [endpoint MCP](/kb/mcp) son las líneas de mayor valor del archivo. Guía completa del formato: [la guía de llms.txt](/kb/llms-txt).

## Valídalo

Ejecuta [el validador de llms.txt](/tools/llms-txt-validator) contra tu despliegue — existencia, parseabilidad, estructura navegable — o [escanea el sitio](/) para la imagen completa de preparación para agentes.

## Preguntas frecuentes

### ¿Next.js tiene una convención de metadatos llms.ts como robots.ts?

No. Las convenciones de archivos de metadatos cubren robots.txt, sitemap.xml, iconos e imágenes OG — no llms.txt. Hay una petición abierta; hasta entonces, usa public/llms.txt o un route handler.

### ¿El route handler debe establecer un Content-Type especial?

Sírvelo como text/plain (o text/markdown) con UTF-8. Los agentes parsean la estructura markdown del cuerpo; lo que importa es que la ruta devuelva 200 con el contenido directamente.

### ¿Archivo estático o route handler?

Estático si tus páginas clave son estables. Route handler si el archivo lista algo que cambia — es la diferencia entre documentación y una instantánea.

## Relacionado

- [llms.txt — la guía completa](/kb/llms-txt)
- [llms-full.txt](/kb/llms-full-txt)
- [llms.txt para Shopify](/kb/llms-txt-for-shopify) · [llms.txt para WordPress](/kb/llms-txt-for-wordpress)
