llms.txt, 90 días después: una retrospectiva honesta
Hace tres meses desplegamos un llms.txt en todo aat.ee. Qué es, qué implementamos, qué muestran realmente los registros y las referencias, y un veredicto honesto sobre si vale la pena molestarse.

En junio publicamos un llms.txt en todo aat.ee — un archivo de ruta, un mapa en markdown del contenido clave del sitio, servido en aat.ee/llms.txt. Costó alrededor de una hora. Noventa días después, este es un relato honesto de lo que hizo y no hizo, porque la mayor parte de lo que leerás sobre llms.txt es o una repetición de la especificación o un argumento de venta, y el punto medio — resultados medidos de un sitio real en producción — es escaso.
Qué es llms.txt, en un párrafo
llms.txt es una convención propuesta (no un estándar — hablaremos de eso más adelante): un archivo markdown en la raíz de tu dominio que ofrece a los modelos de lenguaje un mapa curado de tu sitio. Donde sitemap.xml es una lista exhaustiva de URLs para los rastreadores, llms.txt es una lista de lectura breve y priorizada para los asistentes — qué importa, cómo se llama y dónde vive. La apuesta es que los agentes prefieren un resumen curado antes que rastrear a ciegas.
Qué publicamos
La implementación es deliberadamente aburrida: una única ruta dinámica que compone tres cosas — un preámbulo estático de política de rastreo, los 15 lanzamientos más recientes, los 10 últimos artículos publicados y la lista de categorías — en markdown, con una función de escape que envuelve todo lo controlado por el usuario.
// User text (project names, article titles) must not break out of the
// markdown link or inject headings into an agent-facing file.
function mdSafe(text: string): string {
return text
.replace(/[\r\n]+/g, " ")
.replace(/[[\]()]/g, "")
.trim()
}
const projectLinks = recentProjects
.map((p) => `- [${mdSafe(p.name)}](${baseUrl}/projects/${p.slug})`)
.join("\n")// User text (project names, article titles) must not break out of the
// markdown link or inject headings into an agent-facing file.
function mdSafe(text: string): string {
return text
.replace(/[\r\n]+/g, " ")
.replace(/[[\]()]/g, "")
.trim()
}
const projectLinks = recentProjects
.map((p) => `- [${mdSafe(p.name)}](${baseUrl}/projects/${p.slug})`)
.join("\n")Ese paso de saneamiento es la única parte sutil. Los nombres de proyectos y los títulos provienen de usuarios y de pipelines de LLM; los saltos de línea o corchetes incrustados permitirían que un listado inyectara un encabezado o un enlace falso en un archivo que se invita a los asistentes a confiar como mapa.
Qué mostraron los registros
Tres observaciones de noventa días de registros del servidor y datos de referentes.
Los agentes sí lo consultan. Vemos solicitudes periódicas de /llms.txt desde user-agents conocidos de rastreadores de asistentes, con una frecuencia mucho menor que robots.txt pero presentes de forma constante. Cualquiera que sea el estatus de la especificación, el comportamiento de consulta es real.
Ningún milagro medible de referencias. Las referencias de asistentes de IA hacia aat.ee crecieron durante el trimestre — pero el crecimiento sigue nuestra cadencia de publicación, no el despliegue de llms.txt. No podemos atribuir ni una sola sesión a que un agente haya leído el archivo, y desconfiamos de cualquiera que afirme una atribución precisa aquí: los asistentes consultan y luego responden a partir de una mezcla de fuentes, y la cita rara vez lleva un referente con forma de llms.txt.
Nos obligó a hacer un inventario útil. El beneficio inesperado: escribir un mapa curado significa decidir qué es realmente la cúspide de tu sitio. Nuestra ruta renderiza datos en vivo, así que el archivo se mantiene actualizado — pero la disciplina de "qué pertenece a la lista de lectura" mejoró la estructura de categorías más que el propio archivo.
La parte incómoda: sigue siendo una propuesta
llms.txt no tiene un estándar ratificado detrás. El tipo MIME está en debate (text/markdown vs text/plain), no está documentado que los asistentes lo lean, y nada se rompe si no tienes uno. Cualquier publicación que te diga que es "esencial para el SEO de IA" en 2026 se adelanta a la evidencia.
Nuestra posición tras noventa días: el costo es tan bajo que el valor esperado sigue siendo positivo, del mismo modo que un vestíbulo bien organizado es positivo para un edificio de oficinas. No impulsará el resultado por sí solo, pero cuando un agente sí vaya a buscar orientación, preferirás que encuentre un mapa curado y no una pared.
¿Deberías construir uno?
Una tabla de decisión, honestamente:
- Si tu sitio tiene menos de ~50 páginas con títulos claros — marginal. Tu sitemap y tu navegación ya cuentan la historia.
- Si tienes un sitio basado en datos (lanzamientos, listados, artículos, documentación — contenido que cambia semanalmente) — sí. Un llms.txt generado es un archivo de ruta, se mantiene actualizado automáticamente y ofrece a los asistentes un resumen libre de spam que tu sitemap no puede dar.
- Si te dijeron que impulsará tus rankings de IA — no. Es un mapa, no una metaetiqueta.
El patrón de implementación anterior — componer, sanear, servir — encaja en cualquier framework con una capa de enrutamiento. Mantenlo generado en lugar de escrito a mano, mantén saneado el texto del usuario y mantén tus expectativas calibradas.