Abre los logs de tu servidor. Una parte cada vez mayor del tráfico no son personas. Son bots, crawlers y asistentes de IA que intentan leer tu web por encargo de alguien. Cuando un desarrollador le pide a Cursor un SaaS para gestionar facturas, o un responsable de marketing le pide a ChatGPT una alternativa a Shopify, el modelo responde con lo que consiguió leer. Si no pudo leer tu web con claridad, no estás en la respuesta.
La mayoría de webs están diseñadas para humanos de principio a fin. Para humanos funciona. Para máquinas no. Las páginas se renderizan con JavaScript, el contenido está envuelto en tres capas de componentes, los menús son desplegables, la propuesta de valor vive detrás de una animación. Un modelo de lenguaje tiene que pelearse con todo eso para sacar una frase que pueda citar. Muchas veces se rinde y usa a un competidor cuyo texto era más fácil de procesar.
El estándar llms.txt existe justo para resolver esto.
Qué es llms.txt, en palabras simples
llms.txt es un archivo markdown que vive en la raíz de tu dominio. Las dos ubicaciones habituales son /llms.txt y /.well-known/llms.txt. Es un resumen curado y estructurado de tu contenido más importante, escrito en texto plano, con enlaces y descripciones cortas.
Piénsalo como un sitemap.xml para agentes de IA. El sitemap le dice a los buscadores qué URLs existen. llms.txt le dice a los asistentes de IA qué URLs importan, de qué va la web y cómo encajan las piezas.
No sustituye a tu home. Es un menú limpio que una IA puede leer rápido, sin renderizado, sin anuncios, sin banner de cookies, sin widget de chat saltando a los tres segundos.
Por qué importa ahora
Los asistentes de IA son cada vez más la forma en que mucha gente busca. ChatGPT navega por la web. Claude navega por la web. Perplexity está construido sobre eso. Cursor y Windsurf extraen contexto de documentación cuando generan código. Todas estas herramientas piden páginas, las parsean y deciden qué citar.
Si tu web está cargada de renderizado en cliente, anuncios, scripts de terceros y un DOM ruidoso, la IA termina con una foto confusa de lo que vendes. Puede describirte mal. Puede saltarte. Puede recomendar a un competidor cuya página era más fácil de leer. Es el mismo problema de legibilidad que te penaliza con la búsqueda clásica, donde la seguridad y el rendimiento también funcionan como señales de ranking.
llms.txt evita todo eso. El modelo pide un único archivo markdown pequeño y obtiene un resumen limpio de quién eres y qué ofreces. Sin adivinar.
Hay una segunda razón importante: los asistentes de IA prefieren representaciones en texto plano del contenido porque son más fáciles de parsear. No están en contra del diseño. Tienen un presupuesto de tokens y una pipeline de parseo, y un archivo markdown de 50 KB es más rápido y fiable que una página renderizada de 2 MB.
El formato, en cinco líneas
La estructura es simple. Un H1 con el nombre de la web. Un párrafo que dice de qué va la web. Después secciones con H2 y listas de enlaces, donde cada enlace lleva una descripción de una línea.
# Acme Invoicing
Acme Invoicing es un SaaS que ayuda a pequeñas empresas a enviar facturas,
controlar pagos y conciliar con su banco en un solo lugar.
## Producto
- [Características](https://acme.com/features): qué hace el producto, con capturas
- [Precios](https://acme.com/pricing): tres planes, mensual y anual
- [Integraciones](https://acme.com/integrations): bancos y herramientas contables soportadas
## Documentación
- [Primeros pasos](https://acme.com/docs/start): alta de cuenta y primera factura
- [Referencia de la API](https://acme.com/docs/api): endpoints, auth y rate limits
- [Webhooks](https://acme.com/docs/webhooks): eventos a los que puedes suscribirte
## Empresa
- [Sobre nosotros](https://acme.com/about): equipo, ubicación y misión
- [Contacto](https://acme.com/contact): email, teléfono y horario de soporte
Ese es todo el formato. Sin XML, sin esquema, sin sintaxis especial que aprender. Si sabes escribir un README, sabes escribir un llms.txt.
Hay un segundo archivo opcional, /llms-full.txt, que contiene toda tu documentación concatenada en un único volcado de texto plano. Úsalo si quieres que herramientas como Cursor ingieran toda tu base de conocimiento en una sola petición. Si lo generas a partir de markdown ya existente, nuestro conversor de Markdown a HTML viene bien para previsualizar el render. Sáltatelo si tu web es pequeña.
Guía universal: cómo implementarlo en tu plataforma
A continuación tienes fragmentos funcionales para los cuatro casos que cubren la mayor parte de la web. Elige el que coincida con tu stack.
Astro
Astro puede servir llms.txt de dos maneras. La más simple es un archivo estático en la carpeta public.
Coloca un archivo en public/llms.txt con tu contenido markdown. Astro lo servirá en https://tudominio.com/llms.txt sin configuración extra. Listo.
Si prefieres generar el archivo dinámicamente (por ejemplo, listar cada post del blog automáticamente), crea un endpoint en src/pages/llms.txt.ts:
import type { APIRoute } from "astro";
export const GET: APIRoute = async () => {
const body = `# Tu Web
Tu descripción de un párrafo aquí.
## Páginas
- [Inicio](https://tudominio.com/): página principal
- [Blog](https://tudominio.com/blog): artículos sobre el tema X
`;
return new Response(body, {
headers: { "Content-Type": "text/plain; charset=utf-8" },
});
};
Son cinco líneas de lógica. El endpoint se ejecuta en build (o bajo demanda si usas SSR) y devuelve texto plano.
WordPress
WordPress no te deja soltar un archivo en la raíz salvo que tengas acceso FTP, que normalmente tienes. Las dos opciones limpias son un plugin o una regla de reescritura personalizada.
La vía del plugin: busca en el directorio “LLMs Full Text” o “llms.txt” e instala uno que esté en mantenimiento activo. La mayoría generan el archivo automáticamente desde tus posts y páginas publicadas. Configura las categorías que quieras incluir, guarda, listo.
La vía manual: añade esto al functions.php de tu theme o a un plugin propio pequeño:
add_action('init', function () {
add_rewrite_rule('^llms\.txt$', 'index.php?llms_txt=1', 'top');
});
add_filter('query_vars', function ($vars) {
$vars[] = 'llms_txt';
return $vars;
});
add_action('template_redirect', function () {
if (get_query_var('llms_txt')) {
header('Content-Type: text/plain; charset=utf-8');
echo "# " . get_bloginfo('name') . "\n\n";
echo get_bloginfo('description') . "\n\n";
echo "## Posts\n\n";
$posts = get_posts(['numberposts' => 50]);
foreach ($posts as $p) {
echo "- [" . $p->post_title . "](" . get_permalink($p) . "): "
. wp_trim_words($p->post_excerpt ?: $p->post_content, 15)
. "\n";
}
exit;
}
});
Después de guardar, ve a Ajustes, Enlaces permanentes y pulsa Guardar (esto refresca las reglas de reescritura). Visita /llms.txt y deberías ver tus posts listados.
Shopify
Shopify es la opción más complicada porque no permite soltar archivos arbitrarios en la raíz del dominio. Tres opciones, en orden de preferencia.
Opción uno, una app. Busca en la Shopify App Store “llms.txt” e instala una. Hay varias apps que generan el archivo a partir de tus productos, colecciones y páginas. Es el camino con menos fricción.
Opción dos, un Cloudflare Worker delante de tu tienda. Si tu dominio pasa por Cloudflare, añade un Worker que intercepte las peticiones a /llms.txt y devuelva texto plano:
export default {
async fetch(request) {
const url = new URL(request.url);
if (url.pathname === "/llms.txt") {
const body = `# Tu Tienda\n\nQué vendes, en un párrafo.\n\n## Colecciones\n\n- [Destacados](https://tutienda.com/collections/featured): productos top\n`;
return new Response(body, {
headers: { "Content-Type": "text/plain; charset=utf-8" },
});
}
return fetch(request);
},
};
Opción tres, una página alternativa en /pages/llms. Shopify te deja crear una página normal con ese handle. La URL queda como https://tutienda.com/pages/llms, que no es la ubicación canónica pero es mejor que nada. Algunos crawlers de IA la encuentran a través del sitemap.
Nginx genérico
Si gestionas tu propio servidor, lo más limpio es un archivo estático más un bloque location.
Guarda tu contenido markdown en /var/www/llms.txt. Después en tu configuración de Nginx:
server {
listen 443 ssl;
server_name tudominio.com;
location = /llms.txt {
alias /var/www/llms.txt;
default_type text/plain;
add_header Content-Type "text/plain; charset=utf-8";
}
# resto de tu bloque server
}
Recarga Nginx con sudo nginx -s reload y visita /llms.txt. El mismo patrón funciona para /.well-known/llms.txt si prefieres esa ruta.
Un ejemplo corto para un SaaS
Así podría quedar el llms.txt de un SaaS pequeño en la práctica. Cópialo como punto de partida y edítalo.
# Linkpipe
Linkpipe es una herramienta de link in bio para creadores que quieren analítica,
dominios personalizados y webhooks sin pagar una suite de marketing entera.
## Producto
- [Características](https://linkpipe.io/features): lista completa con capturas
- [Precios](https://linkpipe.io/pricing): gratis, pro a 9$/mes, team a 29$/mes
- [Comparativa](https://linkpipe.io/vs/linktree): en qué se diferencia de Linktree
## Documentación
- [Quickstart](https://linkpipe.io/docs/start): crea una cuenta y tu primera página de enlaces
- [Dominios personalizados](https://linkpipe.io/docs/domains): conecta tu propio dominio
- [Webhooks](https://linkpipe.io/docs/webhooks): lista de eventos y formato del payload
- [API](https://linkpipe.io/docs/api): endpoints REST con ejemplos en curl
## Empresa
- [Sobre nosotros](https://linkpipe.io/about): equipo y origen del proyecto
- [Blog](https://linkpipe.io/blog): artículos sobre creator economy y crecimiento
- [Contacto](https://linkpipe.io/contact): email y Discord
Son alrededor de 20 líneas de markdown. Un asistente de IA que pida este archivo obtiene un mapa completo del producto en una sola petición.
Consejos prácticos
Unas reglas que vienen de usar esto en producción.
Mantén el archivo por debajo de 50 KB. A partir de ahí pierdes señal útil y algunos crawlers truncan archivos más grandes. Si necesitas exponer más, usa /llms-full.txt para el volcado pesado y deja /llms.txt como índice.
Enlaza solo a tus páginas más importantes. El sentido del archivo es la curación. Si listas 200 URLs, el modelo no aprende nada de lo que de verdad quieres que recuerde. Elige las 10 a 30 páginas que definen tu valor.
Escribe las descripciones en lenguaje claro. Sin marketing. “Precios: tres planes, mensual y anual” es más útil que “Precios: descubre nuestros planes flexibles adaptados a tus necesidades”. La primera frase le da un dato al modelo. La segunda no le dice nada.
Actualiza el archivo cuando lances algo relevante. Producto nuevo, plan nuevo, función mayor. Trátalo como un documento vivo, no como un setup de una vez. Un /llms.txt de hace 18 meses que sigue diciendo “beta” es peor que no tener archivo.
Añade el archivo a tu sitemap y enlázalo desde tu robots.txt. Algunos crawlers lo encuentran por su cuenta, otros necesitan una pista.
Si tienes buena documentación de desarrollador, generar /llms-full.txt a partir de ella suele ser un trabajo de una tarde. La recompensa es que herramientas como Cursor pueden traerse todo tu contexto en una sola petición cuando un desarrollador les pasa tu dominio.
Cómo encaja con el resto de tu stack
llms.txt no sustituye a nada. Tu sitemap.xml sigue alimentando a los buscadores clásicos. Tu robots.txt sigue controlando el comportamiento del crawl. Tus datos estructurados siguen ayudando a Google a construir resultados enriquecidos. llms.txt se sienta al lado de todo eso, apuntando a un público distinto: modelos de lenguaje que leen tu web para responder preguntas en nombre de usuarios.
Si ya tienes una buena arquitectura de información, con encabezados claros y una jerarquía semántica sólida, tienes la mayor parte del camino hecho. llms.txt es la versión explícita de lo que ya haces de forma implícita.