5 min de lecturallms.txtWooCommerce

Cómo poner un llms.txt en WooCommerce (con y sin plugins de pago)

Shopify tiene media docena de apps para generar el llms.txt. WooCommerce no tiene ninguna. Aquí van las dos formas de hacerlo: a mano con un archivo, o generado desde tu catálogo con código que funciona.

Si buscas "llms.txt Shopify" encuentras media docena de aplicaciones que te lo generan con un clic. Si buscas lo mismo para WooCommerce, no encuentras nada.

No es porque WooCommerce lo tenga resuelto. Es que nadie lo ha construido todavía.

Qué es el llms.txt y por qué le importa a una tienda

Es un archivo de texto plano en la raíz de tu dominio —tutienda.com/llms.txt— que le explica a un asistente de IA de qué va tu web. Funciona como el robots.txt, pero al revés: en vez de decir "por aquí no pases", dice "esto es lo que tengo".

La diferencia práctica es esta. Cuando alguien le pregunta a ChatGPT "¿dónde compro una figura de Luffy por menos de 40 euros?", el asistente necesita dos cosas para recomendarte: saber que existes y saber qué vendes a qué precio. Si solo encuentra tu página de inicio, como mucho te menciona. Si encuentra tu catálogo con precios, puede dar una respuesta concreta — y esa es la que se convierte en una visita.

El problema de los generadores genéricos

Aquí está el matiz que casi nadie cuenta.

La mayoría de generadores de llms.txt —incluido el que trae Yoast SEO— listan páginas y entradas del blog. Eso está bien para una web corporativa. Para una tienda es casi inútil: acabas publicando tu página "Quiénes somos", tres artículos y, con suerte, cinco productos sueltos.

Lo hemos visto en una tienda real con más de 5.000 referencias: el llms.txt que generaba su plugin de SEO incluía cinco productos, dos avisos del carrito y tres ventanas emergentes apuntando todas a la portada. Técnicamente correcto. Comercialmente inservible.

Para una tienda, el llms.txt tiene que llevar productos, con precio y disponibilidad. Todo lo demás es decoración.

Opción A: a mano, con un archivo

La más rápida, y sirve para empezar hoy.

Crea un archivo llamado llms.txt y súbelo por FTP a la raíz de tu WordPress (la misma carpeta donde está wp-config.php). Contenido:

# Tu Tienda

> Qué vendes, en una frase. Ej.: tienda de figuras de anime en España,
> con envío en 24 h y más de 5.000 referencias oficiales.

## Categorías
- [Figuras Dragon Ball](https://tutienda.com/figuras-dragon-ball/)
- [Figuras One Piece](https://tutienda.com/figuras-one-piece/)

## Productos destacados
- [Figura Goku Super Saiyan 25 cm](https://tutienda.com/producto/goku-ssj/): 34,90 € · En stock
- [Figura Luffy Gear 5 11 cm](https://tutienda.com/producto/luffy-gear5/): 29,99 € · En stock

## Enlaces
- [Sitemap](https://tutienda.com/sitemap_index.xml)
- [Envíos y devoluciones](https://tutienda.com/envios/)

Cuándo vale: si tienes pocos productos o quieres destacar una selección.

Cuándo no: en cuanto cambies un precio, el archivo miente. Y con cientos de referencias, mantenerlo a mano no se hace. Nunca.

Opción B: generarlo desde el catálogo

Lo que quieres de verdad es que se genere solo. Este código va en el functions.php de tu tema hijo —o mejor, en un plugin propio para no perderlo al actualizar el tema:

add_action('init', function () {
    $path = strtok($_SERVER['REQUEST_URI'] ?? '', '?');
    if ($path !== '/llms.txt' || is_admin()) {
        return;
    }

    // Se cachea 12 h: generar esto en cada visita castigaría la tienda.
    $body = get_transient('mi_llms_txt');

    if ($body === false) {
        $products = wc_get_products(array(
            'status'  => 'publish',
            'limit'   => 500,          // suficiente; el resto, por el sitemap
            'orderby' => 'popularity',
        ));

        $lines = array(
            '# ' . get_bloginfo('name'),
            '',
            '> ' . get_bloginfo('description'),
            '',
            '## Productos',
        );

        foreach ($products as $product) {
            $lines[] = sprintf(
                '- [%s](%s): %s · %s',
                str_replace(array('[', ']'), '', $product->get_name()),
                $product->get_permalink(),
                wp_strip_all_tags(wc_price(wc_get_price_to_display($product))),
                $product->is_in_stock() ? 'En stock' : 'Agotado'
            );
        }

        $body = implode("\n", $lines) . "\n";
        set_transient('mi_llms_txt', $body, 12 * HOUR_IN_SECONDS);
    }

    status_header(200);
    header('Content-Type: text/plain; charset=utf-8');
    echo $body;
    exit;
}, 20);

Tres detalles que importan y que se suelen olvidar:

  • wc_get_price_to_display, no get_price(). El primero devuelve el precio como lo ve el cliente en tu tienda, con IVA incluido si así lo tienes configurado. Con el segundo publicarás precios sin IVA y la IA recomendará un precio que no es el tuyo.
  • El transitorio de 12 horas. Sin caché, cada visita de un rastreador recorre 500 productos. Es una forma tonta de tirar la tienda.
  • Solo publish. Los borradores y los productos privados no deben salir: si un cliente llega buscando algo que no puede comprar, has gastado la visita.

Ojo: puede que ya tengas uno, y que sea peor

Antes de montar nada, abre tutienda.com/llms.txt en el navegador.

Si te sale contenido, ya hay algo sirviéndolo — normalmente Yoast SEO, que lo activa por defecto en sus versiones recientes. Y si Yoast ocupa esa ruta, tu código no llegará a ejecutarse nunca, por muy bien que esté escrito.

Se desactiva en Yoast SEO → Ajustes → Site features → APIs → llms.txt. Es un interruptor.

La contrapartida honesta: el de Yoast incluye tus páginas y entradas del blog, y el tuyo no. Si tienes contenido editorial que te importa, añádelo tú al generar el archivo.

La parte que casi nadie comprueba

Tener el archivo no significa que lo estén leyendo.

Muchos hostings y plugins de seguridad devuelven un 403 a los rastreadores de IA, o los bloquean directamente en el robots.txt. El archivo está ahí, tú lo ves perfectamente en tu navegador, y ChatGPT recibe una puerta cerrada.

Compruébalo desde un terminal, haciéndote pasar por cada rastreador:

curl -A "Mozilla/5.0 (compatible; OAI-SearchBot/1.0; +https://openai.com/searchbot)" https://tutienda.com/llms.txt

Repite cambiando el nombre por GPTBot, PerplexityBot, ClaudeBot y Bingbot. Si alguno devuelve algo distinto del contenido del archivo, ahí tienes el problema.

Y revisa también tu robots.txt: si encuentras Disallow: / bajo alguno de esos nombres, lo estás bloqueando. Conviene que sea una decisión tuya y no el ajuste por defecto de un plugin que instalaste hace dos años.

Qué esperar de todo esto

Voy a ser claro, porque en este tema se está vendiendo mucho humo.

Nadie puede garantizarte que ChatGPT recomiende tu tienda. No hay ranking que escalar ni palabra clave que pujar. Las respuestas cambian entre modelos, entre versiones y a veces entre dos preguntas iguales.

Lo que sí es binario y verificable es lo otro: o pueden leerte, o no pueden. Y por lo que vemos en tiendas reales, la mayoría está en el segundo grupo sin saberlo, casi siempre por un robots.txt que nadie ha mirado nunca.

Empieza por ahí. Es un minuto y es el fallo más común.

¿Tu tienda pierde ventas por búsquedas que no encuentran nada?

WildRock añade a tu WooCommerce un buscador que entiende lo que tus clientes quieren decir, y te dice en euros cuánto te está generando. Plugin gratuito, sin tocar código.