PS PrestaShop Intermedio

LLMs.txt PrestaShop — SEO IA para ChatGPT, Claude y Perplexity

Genera automáticamente llms.txt y llms-full.txt para exponer tu catálogo PrestaShop a los LLM (ChatGPT, Claude, Perplexity, Gemini).

Actualizado Versión del módulo 1.0.0

Visión general

LLMs.txt PrestaShop genera automáticamente los archivos estándar /llms.txt y /llms-full.txt en la raíz de tu tienda, siguiendo la especificación llmstxt.org. Estos archivos exponen tu catálogo de forma estructurada a los LLM (ChatGPT, Claude, Perplexity, Gemini) — es el equivalente del sitemap.xml, pero para la IA generativa.

A recordar: los LLM leen estos archivos para entender tu tienda sin tener que rastrear cada página de producto. Cuanto mejor expuesto esté tu catálogo, mejor será citado y recomendado en sus respuestas.

Dos archivos, dos usos

  • /llms.txt — Índice condensado: título + URL + descripción corta de cada entrada. Formato Markdown, normalmente unos cientos de KB.
  • /llms-full.txt — Contenido íntegro y limpio de cada entrada. Markdown enriquecido, puede pesar varios MB según el tamaño del catálogo. Opcional desde la 1.0.0.

Instalación

  1. Sube el ZIP en Módulos → Gestor de módulos → Cargar un módulo.
  2. Haz clic en Instalar.
  3. Haz clic en Configurar para abrir el panel.

Al instalarse, el módulo:

  • Crea 4 tablas SQL: caché, secciones personalizadas (+ lang + shop), logs.
  • Añade 3 entradas en el menú admin bajo una categoría oculta AdminDfLlmsTxtParent.
  • Se registra en los hooks de catálogo (creación/edición/eliminación de producto, categoría, CMS, fabricante, proveedor) para invalidar el caché automáticamente.
  • Añade un bloque en el .htaccess raíz de PrestaShop para servir los archivos en UTF-8 con los encabezados correctos.
  • Genera un token cron aleatorio de 32 caracteres.

Configuración

La pantalla de configuración está organizada en 5 secciones.

1. General

  • Activar el módulo — Toggle global. Si está desactivado, las URL /llms.txt y /llms-full.txt devuelven 404 y los archivos físicos se eliminan.
  • Nombre del sitio (multilingüe, multitienda) — Aparece como encabezado principal # Nombre del sitio al inicio del archivo.
  • Descripción corta del sitio (multilingüe, multitienda) — 1–2 frases que resumen lo que ofrece la tienda. Se muestra como blockquote > ... justo debajo del nombre.
  • Introducción (multilingüe, multitienda) — Texto libre Markdown. Útil para dar contexto adicional a los LLM (política de devoluciones, envío, valores de la marca).
  • Formato de salidaMarkdown enriquecido (recomendado, soportado por todos los LLM principales) o Texto plano.
  • Generar también llms-full.txt — Si está desactivado, solo se genera /llms.txt. Ahorra varios MB de almacenamiento y segundos de generación en catálogos grandes.

2. Fuentes de contenido

  • Incluir páginas CMS — Páginas de contenido (Sobre nosotros, FAQ, Condiciones, etc.).
  • Incluir categorías — Categorías activas con su descripción.
  • Incluir productos — Productos activos.
  • Incluir fabricantes — Marcas con descripción.
  • Incluir proveedores — Lista de proveedores.
  • Incluir precio de los productos — Formateado según la locale actual.
  • Incluir características del producto — Features clave/valor.
  • Incluir combinaciones — Variantes (talla, color, etc.) con diferencia de precio.
  • Incluir productos sin stock — Desactivado por defecto.
  • Campo de descripción del producto — Corta, larga o ambas.
  • Límite de productos — Número máximo de entradas de producto en el archivo. 500 por defecto, súbelo según el tamaño del catálogo (1000–5000 es razonable).

3. Exclusiones

Listas de IDs separadas por coma. Permite excluir contenido específico sin tocar el resto del catálogo.

  • IDs de categorías excluidas — Ej.: productos B2B, categorías internas, categorías obsoletas.
  • IDs de productos excluidos — Productos en fin de vida, muestras, regalos.
  • IDs de CMS excluidos — Páginas de servicio interno, borradores.
Consejo: para encontrar los IDs, ve a la lista correspondiente (Catálogo → Categorías, etc.); el ID está en la primera columna o en la URL de edición.

4. Caché y Cron

  • Duración del caché (TTL en segundos) — 86400 (24 h) por defecto. El caché se sirve mientras no haya expirado.
  • Invalidación automática en cambios de catálogo — Cuando modificas/añades/eliminas un producto, categoría, etc., el caché se invalida y el archivo se regenerará en la próxima petición (o en el próximo cron).
  • Token cron — Cadena aleatoria de 32 caracteres. Regenerable desde el panel; las URL cron anteriores dejan de funcionar inmediatamente.
  • URL cron lista para copiar — Formato: https://tu-tienda.tld/index.php?fc=module&module=dfllmstxt&controller=cron&token=XXX

5. Avanzado

  • Retención de logs — Número de días que se conservan los logs de generación. 30 por defecto.
  • Respetar robots.txt — Para usos avanzados. Activado por defecto.

Configuración del cron

El cron pregenera el caché para todas las tiendas y todos los idiomas activos en una sola llamada. Ideal para catálogos grandes para evitar que un usuario final dispare la regeneración.

URL a llamar:

https://tu-tienda.tld/index.php?fc=module&module=dfllmstxt&controller=cron&token=TU_TOKEN

Ejemplo de crontab (cada día a las 4 h):

0 4 * * * curl -s "https://tu-tienda.tld/index.php?fc=module&module=dfllmstxt&controller=cron&token=TU_TOKEN" > /dev/null

Parámetros opcionales:

  • &id_shop=2 — Limitar a una tienda concreta.
  • &id_lang=1 — Limitar a un idioma concreto.

La respuesta JSON detalla el resultado de cada generación (éxito, tamaño de los archivos, duración).

Secciones personalizadas

Más allá del catálogo bruto, puedes inyectar contenido libre en los archivos generados. Pestaña LLMs.txt → Secciones personalizadas en el menú admin.

Casos de uso típicos:

  • Política de devoluciones resumida
  • Valores y compromiso de la marca
  • FAQ corta
  • Condiciones de envío
  • Instrucciones específicas para los LLM (ej.: «No comparar con [marca competidora]»)

Cada sección:

  • Tiene un título y contenido multilingüe (Markdown soportado).
  • Es multitienda: eliges en qué tiendas aparece.
  • Tiene una posición: antes de las fuentes, después de las fuentes o en el pie del archivo.
  • Tiene una orden ajustable por arrastrar y soltar.
  • Se puede activar/desactivar sin eliminarla.

URLs de los archivos generados

Los archivos están accesibles en la raíz de tu tienda:

  • https://tu-tienda.tld/llms.txt
  • https://tu-tienda.tld/llms-full.txt (si la opción está activada)

Cómo se sirven

Para la tienda por defecto en su idioma por defecto, el módulo escribe un archivo físico en la raíz de PrestaShop. Apache lo sirve directamente, sin depender del dispatcher de PrestaShop, las URL amigables o el caché de las rutas. Es la misma mecánica que utiliza el módulo oficial gsitemap para /sitemap.xml.

Para las demás tiendas en una configuración multitienda (Host diferente, raíz compartida), los archivos son servidos por el hook moduleRoutes que enruta por el Host header.

Encabezados HTTP

El módulo añade automáticamente un bloque en el .htaccess raíz de PrestaShop para forzar los encabezados correctos:

# ~~ dfllmstxt-datafirefly start ~~
<Files "llms.txt">
    ForceType "text/plain; charset=utf-8"
    <IfModule mod_headers.c>
        Header set Content-Type "text/plain; charset=utf-8"
        Header set X-Robots-Tag "noindex, follow"
    </IfModule>
</Files>
<Files "llms-full.txt">
    ForceType "text/plain; charset=utf-8"
    <IfModule mod_headers.c>
        Header set Content-Type "text/plain; charset=utf-8"
        Header set X-Robots-Tag "noindex, follow"
    </IfModule>
</Files>
# ~~ dfllmstxt-datafirefly end ~~

Este bloque se coloca fuera del bloque PrestaShop # ~~ start ~~ ... # ~~ end ~~ y por tanto se preserva en las regeneraciones automáticas de PrestaShop. También se auto-repara en cada regeneración del caché (idempotente), en caso de que haya sido modificado.

X-Robots-Tag noindex: añadido voluntariamente. llms.txt apunta a los crawlers de IA, no al índice de Google. Los LLM leen estos archivos directamente sin necesidad de que aparezcan en las SERP. Tu SEO clásico no se ve afectado.

Arquitectura extensible (para desarrolladores)

El módulo expone un sistema de Content Providers que otros módulos pueden enriquecer mediante un hook. Si tienes un módulo de blog, FAQ de producto, testimonios de clientes o glosario, puede publicar su contenido en el llms.txt sin modificar dfllmstxt.

Hook actionDfLlmsTxtRegisterProviders

En tu módulo externo:

public function hookActionDfLlmsTxtRegisterProviders($params)
{
    require_once _PS_MODULE_DIR_ . 'mimodulo/classes/MyBlogProvider.php';
    $params['registry']->register(new MyBlogProvider());
}

Tu clase debe extender DfLlmsTxtAbstractContentProvider (o implementar DfLlmsTxtContentProviderInterface) y proporcionar como mínimo:

  • getKey() — Identificador único (ej.: "blog").
  • getSectionTitle() — Título de sección mostrado en el archivo (ej.: "Blog").
  • isEnabled() — Booleano que indica si el provider debe producir entradas.
  • getShortEntries() — Lista de entradas para llms.txt, formato ['title', 'url', 'description'].
  • getFullEntries() — Lista de entradas para llms-full.txt, formato ['title', 'url', 'body'].

Hooks de generación

Dos hooks permiten filtrar o enriquecer el contenido justo antes de ser servido:

  • actionDfLlmsTxtBeforeGenerate — Antes de la generación. Permite modificar la configuración o los providers activos.
  • actionDfLlmsTxtAfterGenerate — Después de la generación pero antes del cacheo. Permite transformar el contenido final.

Compatibilidad

  • PrestaShop 8.0.0 — 8.99.99 (soporte PS 9 próximamente)
  • PHP 7.4 mínimo, 8.1+ recomendado
  • MySQL 5.7+ / MariaDB 10.4+
  • Multitienda completo (configuración y caché aislados por tienda)
  • Multilingüe completo (todos los idiomas activos)
  • Apache 2.x con mod_mime (universal). mod_headers opcional pero recomendado para encabezados HTTP limpios.

Resolución de problemas

El archivo no aparece en la raíz

Tres causas posibles, por orden de probabilidad:

  1. Permisos de escritura — La raíz de PrestaShop debe ser escribible por el usuario PHP. Verifica con ls -la. Si el archivo /llms.txt no existe tras una regeneración, casi siempre es esto.
  2. Módulo desactivado — Verifica el toggle «Activar el módulo» en la parte superior de la config.
  3. Multitienda con raíz compartida — Solo la tienda por defecto escribe en la raíz. Las demás tiendas son servidas vía moduleRoutes (que requiere las URL amigables activadas en Preferencias → Tráfico y SEO).

Codificación rota (caracteres «Ã©» en lugar de «é»)

Síntoma clásico de UTF-8 servido sin charset HTTP. El módulo añade automáticamente las directivas .htaccess necesarias (ver sección Encabezados HTTP más arriba). Si el problema persiste tras una regeneración:

  1. Verifica que el bloque # ~~ dfllmstxt-datafirefly start ~~ esté presente en el .htaccess raíz de PrestaShop.
  2. Si está ausente: desinstala y reinstala el módulo (esto fuerza la re-inserción del bloque).
  3. Verifica con curl -I https://tu-tienda.tld/llms.txt que la respuesta contiene Content-Type: text/plain; charset=utf-8.

Generación exitosa pero URL en 404

Si la regeneración tiene éxito (tamaño de archivos correcto en los logs) pero la URL devuelve 404:

  1. Verifica que el archivo físico exista en la raíz: ls -la /ruta/prestashop/llms.txt.
  2. Si existe pero Apache devuelve 404, es probablemente un problema de .htaccess que bloquea archivos .txt. Revisa las reglas del .htaccess raíz.
  3. Si no existe, es un problema de permisos de escritura (ver más arriba).

El caché sigue obsoleto tras un cambio de producto

La invalidación automática está desactivada. Actívala en Caché y Cron → Invalidación automática en cambios de catálogo. También puedes forzar manualmente con el botón Vaciar caché del panel.

El archivo llms-full.txt pesa varios MB, es demasiado

Desactiva la opción Generar también llms-full.txt en la config General. Solo se generará /llms.txt (normalmente < 1 MB). Para la mayoría de casos de uso IA es suficiente: los LLM modernos saben seguir las URL y obtener las páginas individuales cuando lo necesitan.

Desinstalación

La desinstalación es limpia:

  • Las 4 tablas SQL se eliminan.
  • Los archivos físicos /llms.txt y /llms-full.txt en la raíz se eliminan.
  • El bloque .htaccess añadido se retira.
  • Todas las variables de configuración DFLLMS_* se limpian.
  • Las pestañas admin se retiran.

Changelog

1.0.0 — Mayo 2026

  • Lanzamiento inicial.
  • Generación conforme a la spec llmstxt.org para /llms.txt y /llms-full.txt.
  • 5 Content Providers nativos: productos, categorías, CMS, fabricantes, proveedores.
  • Caché TTL con invalidación automática.
  • Cron asegurado por token.
  • Secciones personalizadas multilingües, multitienda.
  • Arquitectura extensible vía hook.
  • Auto-gestión del .htaccess raíz para Content-Type UTF-8 y X-Robots-Tag.
  • Opción para desactivar la generación de llms-full.txt.
¿Te ha resultado útil esta página?

¿Sigues atascado? Contacta con soporte