llms.txt: qué es, para qué sirve y cómo lo agregamos en Nebula

Si seguís el mundo del desarrollo web, ya escuchaste hablar de SEO para buscadores como Google. Pero hay una nueva capa de visibilidad digital que está tomando forma: la visibilidad frente a los modelos de lenguaje — los mismos que alimentan a ChatGPT, Claude, Perplexity y los asistentes de código.
Y hay un estándar emergente que empieza a definir cómo funciona eso: llms.txt.
¿Qué es llms.txt?
Es una propuesta de Jeremy Howard (creador de fast.ai) publicada en septiembre de 2024. La idea es simple: así como `robots.txt` le dice a los crawlers de buscadores qué pueden indexar, y `sitemap.xml` les muestra la estructura del sitio, `llms.txt` le dice a los modelos de lenguaje qué hay en tu sitio y cómo entenderlo.
El archivo vive en la raíz del dominio: `https://tudominio.com/llms.txt`.
Es un archivo Markdown con una estructura específica:
# Nombre del proyecto o sitio
> Descripción corta con información clave
Información adicional sobre el contexto
## Sección de links
- [Nombre del link](https://url): Descripción opcional
## Optional
- [Link secundario](https://url): Información complementaria (puede omitirse en contexto corto)El único campo obligatorio es el H1 con el nombre. El resto es opcional pero incrementalmente útil para los modelos.
¿Por qué importa?
Los modelos de lenguaje tienen un problema estructural: sus ventanas de contexto son finitas. No pueden leer un sitio web completo en una sola interacción. Y convertir HTML con navegación, scripts, anuncios y estilos a texto plano útil es difícil e impreciso.
llms.txt resuelve eso dando a los modelos un punto de entrada curado, compacto y legible que responde la pregunta: "¿de qué trata este sitio y dónde encuentro información específica?"
Los casos de uso concretos:
Con la proliferación de agentes de IA que navegan la web para responder preguntas, el llms.txt se vuelve un canal de posicionamiento que todavía no está saturado.
Cómo implementarlo en Next.js (App Router)
La forma más limpia en Next.js 13+ con App Router es crear una Route Handler que genere el contenido dinámicamente.
Paso 1: Crear el archivo de ruta
Creá el archivo `app/llms.txt/route.ts`:
export async function GET() {
const content = `# Tu Sitio
> Descripción breve y precisa del sitio.
## Servicios
- [Servicio 1](https://tudominio.com/servicios/servicio-1): Qué resuelve este servicio
- [Servicio 2](https://tudominio.com/servicios/servicio-2): Qué resuelve este servicio
## Blog
- [Artículo 1](https://tudominio.com/blog/articulo-1): De qué trata
`;
return new Response(content, {
headers: {
'Content-Type': 'text/plain; charset=utf-8',
'Cache-Control': 'public, max-age=86400',
},
});
}Con esto, `https://tudominio.com/llms.txt` devuelve el archivo en texto plano.
Paso 2: Generarlo dinámico desde tus datos
Si tu sitio tiene datos estructurados (posts de blog, proyectos, servicios), podés generarlos dinámicamente para que el `llms.txt` siempre esté actualizado:
import { BLOG_POSTS } from '../lib/blog';
import { SERVICE_CATALOG } from '../lib/services';
export async function GET() {
const baseUrl = 'https://tudominio.com';
const serviceLinks = SERVICE_CATALOG.map(
(s) => `- [${s.name}](${baseUrl}/services/${s.slug}): ${s.description}`
).join('\n');
const blogLinks = BLOG_POSTS.slice(0, 10)
.map((p) => `- [${p.title}](${baseUrl}/blog/${p.slug}): ${p.description}`)
.join('\n');
const content = `# Mi Sitio
> Descripción del sitio.
## Servicios
${serviceLinks}
## Blog
${blogLinks}
`;
return new Response(content, {
headers: {
'Content-Type': 'text/plain; charset=utf-8',
'Cache-Control': 'public, max-age=86400',
},
});
}Cada vez que agregás un post o un servicio nuevo, el `llms.txt` se actualiza automáticamente sin tocar nada.
Paso 3: Verificar que funciona
Accedé a `https://tudominio.com/llms.txt` en el navegador. Deberías ver el Markdown plano sin ningún HTML alrededor.
Buenas prácticas para escribir un buen llms.txt
Sé específico en el H1 y el blockquote. El modelo usa esa primera sección para entender el contexto de todo lo que sigue. Si es vago, el modelo va a inferir mal.
Ordená los links por importancia. Lo que va primero es lo que más probabilidades tiene de leerse. Si tenés servicios y blog, poné los servicios primero si querés que el modelo entienda de qué vivís.
Usá la sección Optional para lo secundario. Todo lo que está bajo el H2 "Optional" puede omitirse si el contexto del modelo es limitado. Usalo para información complementaria pero no esencial.
Incluí descripciones en los links. La diferencia entre `- Landing Pages` y `- Landing Pages: Páginas diseñadas para convertir tráfico en consultas` es enorme para un modelo que necesita decidir si ese link es relevante para la pregunta que le están haciendo.
Mantenerlo conciso. El archivo tiene que ser lo suficientemente completo como para entender el sitio, pero lo suficientemente corto como para caber en el contexto. Entre 200 y 800 palabras es una buena referencia.
La sección complementaria: páginas .md
La propuesta de llms.txt incluye también la idea de servir versiones Markdown de cada página en la misma URL con extensión `.md`. Por ejemplo:
Esto permite que agentes de IA carguen el contenido de una página específica en formato legible sin tener que parsear el HTML. En Next.js, se puede implementar con route handlers por cada tipo de contenido.
Dónde registrar tu llms.txt
Ya existen directorios que indexan sitios con llms.txt:
Registrar el sitio en estos directorios hoy, mientras el ecosistema es chico, tiene la misma lógica que estar en Google My Business cuando era nuevo: poco esfuerzo, visibilidad desproporcionada.
Lo implementamos en este sitio
Nebula Solutions tiene su `llms.txt` en nebulasolutions.com.ar/llms.txt. Lo generamos dinámicamente desde el catálogo de servicios y los posts del blog.
No sabemos todavía cuál va a ser el impacto medible. Lo que sí sabemos es que el estándar tiene tracción real — herramientas como Cursor, Perplexity y varios agentes de IA ya lo soportan o lo están adoptando.
El costo de implementarlo es de unas horas. El potencial de visibilidad cuando los agentes de IA se conviertan en un canal de descubrimiento relevante es mucho mayor.
¿Querés que lo implementemos en tu sitio?
Si tenés un sitio en Next.js y querés agregar `llms.txt`, SEO técnico avanzado o simplemente mejorar el posicionamiento digital, agendá un diagnóstico gratuito.
Lo revisamos en 30 minutos y te decimos exactamente qué hacer.