LLMs.txt & AEO Shopware — Guía completa
Instalar, configurar y explotar LLMs.txt & AEO: endpoints llms.txt / llms-full.txt / robots-ai.txt, datos estructurados Schema.org (FAQPage, HowTo, Speakable, Product enriquecido), campos personalizados AEO, CLI y caché PSR-6 para Shopware 6.7.
Presentación
DataFirefly LLMs.txt & AEO es un plugin Shopware 6.7 que hace su tienda visible y comprensible para los motores de respuesta IA (ChatGPT, Claude, Perplexity, Gemini). Actúa en tres planos complementarios:
- llms.txt / llms-full.txt — dos archivos conformes a la especificación llmstxt.org, generados automáticamente en la raíz de cada sales-channel, en cada idioma activo.
- Schema.org JSON-LD — inyección automática de datos estructurados en todas las páginas: Organization, Product enriquecido, BreadcrumbList, FAQPage, HowTo y Speakable.
- Pilotaje de crawlers IA — un endpoint
/robots-ai.txtcon control individual de 9 bots (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, Applebot-Extended, Bingbot, Meta-ExternalAgent, CCBot, cohere-ai).
Requisitos: Shopware 6.7.0+, PHP 8.2+, MySQL 8.0+ o MariaDB 10.6+. El plugin funciona con el storefront estándar y los temas personalizados (herencia Twig).
Instalación
Vía ZIP (recomendado)
- Descargue
DataFireflyLlmsAeo.zipdesde su cuenta de cliente. - Administración Shopware → Extensiones → Mis extensiones → Subir extensión.
- Haga clic en Instalar, luego Activar.
- Vacíe la caché: Ajustes → Sistema → Cachés e índices, o vía CLI:
bin/console cache:clear
Vía CLI
unzip DataFireflyLlmsAeo.zip -d custom/plugins/
bin/console plugin:refresh
bin/console plugin:install --activate DataFireflyLlmsAeo
bin/console cache:clear
En la activación, el plugin instala automáticamente el conjunto de campos personalizados datafirefly_aeo en productos, categorías, páginas CMS y fabricantes. No se requiere ninguna migración manual.
Compilación de los assets de administración
Si el módulo de administración no aparece bajo Marketing tras la activación:
bin/console bundle:dump
./bin/build-administration.sh
bin/console cache:clear
Configuración
La configuración se encuentra en Ajustes → Sistema → Extensiones → DataFirefly llms.txt & AEO. Está delimitada por sales-channel: seleccione un canal específico en el selector superior para sobrescribir los valores globales.
Tarjeta «General»
- Activar el módulo — interruptor global (por sales-channel).
- Autor del sitio — usado en la cabecera del llms.txt.
- Descripción del sitio — blockquote de cabecera del llms.txt; describa su tienda en 1-2 frases orientadas a IA.
- Duración de la caché — TTL en segundos (por defecto: 3600).
Tarjeta «llms.txt»
- Incluir las páginas CMS, categorías, marcas y/o productos.
- Número máximo de productos listados en el índice.
- Incluir productos inactivos — desactivado por defecto; manténgalo desactivado en producción.
Tarjeta «AEO & Schema.org»
- Toggles individuales: Organization, Product enriquecido, BreadcrumbList, FAQPage, HowTo, Speakable.
- Logo y URL de la organización — sobrescriben los valores del sales-channel.
- Teléfono, email de contacto, perfiles sociales — alimentan el schema Organization (
contactPoint,sameAs).
Tarjeta «Crawlers IA»
Para cada uno de los 9 bots, tres modos:
- Permitido — acceso completo (sin directiva restrictiva).
- Denegado —
Disallow: /para ese bot. - Selectivo —
Disallowen las rutas que liste (una por línea, ej./checkout/,/account/).
El contenido de /robots-ai.txt no se fusiona automáticamente en su robots.txt principal. Copie su contenido en su robots.txt, o añada una regla de reescritura de servidor (ver Integración robots.txt).
Los tres endpoints
| URL | Contenido | Cabeceras |
|---|---|---|
/llms.txt |
Índice sintético: Páginas, Categorías, Marcas, Productos, Optional | text/plain; charset=UTF-8, X-Robots-Tag: noindex, caché pública |
/llms-full.txt |
Contenido íntegro: descripciones limpias, SKU, EAN, marca, características agrupadas, FAQ | ídem |
/robots-ai.txt |
Bloque de directivas User-agent para los 9 crawlers IA | ídem |
Verificación rápida tras la instalación:
curl -I https://su-tienda.tld/llms.txt
curl -I https://su-tienda.tld/llms-full.txt
curl -I https://su-tienda.tld/robots-ai.txt
Cada sales-channel expone sus propios archivos en su propio dominio, en cada idioma activo (las URL localizadas siguen la configuración de dominio del canal).
Campos personalizados AEO
El conjunto datafirefly_aeo está disponible en productos, categorías, páginas CMS y fabricantes, en la pestaña Campos personalizados de cada entidad.
| Campo | Tipo | Uso |
|---|---|---|
datafirefly_aeo_summary |
Texto | Resumen de 1-2 frases usado en el llms.txt en lugar de la descripción truncada |
datafirefly_aeo_faq |
JSON | FAQ estructurada, inyectada como FAQPage JSON-LD |
datafirefly_aeo_howto |
JSON | Tutorial estructurado, inyectado como HowTo JSON-LD |
datafirefly_aeo_speakable |
Texto | Texto corto para asistentes de voz (30-40 palabras pronunciables) |
datafirefly_aeo_exclude |
Booleano | Excluye la entidad del llms.txt y del llms-full.txt |
Formato del campo FAQ
[
{
"q": "¿Cuánto tarda la entrega?",
"a": "La entrega estándar tarda de 2 a 4 días laborables."
},
{
"q": "¿Cuál es su política de devoluciones?",
"a": "Dispone de 30 días para devolver un producto sin usar."
}
]
Formato del campo HowTo
{
"name": "Cómo instalar el producto",
"totalTime": "PT15M",
"steps": [
{ "name": "Preparación", "text": "Desembale los componentes." },
{ "name": "Montaje", "text": "Siga el esquema proporcionado." },
{ "name": "Verificación", "text": "Pruebe el funcionamiento." }
]
}
Los campos personalizados de Shopware son traducibles: rellene la FAQ en cada idioma mediante el selector de idioma de la ficha de producto. El plugin lee el valor en el idioma del contexto de la petición.
Datos estructurados Schema.org
El plugin inyecta JSON-LD en el <head> mediante la plantilla storefront/layout/meta.html.twig (herencia Twig, compatible con temas personalizados). Schemas generados:
- Organization — en todas las páginas: nombre, logo, URL,
contactPoint,sameAs(perfiles sociales). - Product enriquecido — en las fichas de producto:
gtin13(desde el EAN),mpn,sku,brand(fabricante),additionalProperty(características agrupadas por grupo de propiedades),aggregateRating(desde las reseñas nativas de Shopware cuando existen). - BreadcrumbList — migas de pan completas de la página actual.
- FAQPage — si el campo
datafirefly_aeo_faqestá relleno en la entidad de la página. - HowTo — si el campo
datafirefly_aeo_howtoestá relleno. - Speakable — selectores CSS
h1,.product-detail-name,.product-detail-description-text,.cms-element-text,[data-speakable], más el texto del campo dedicado.
Validación recomendada tras la puesta en producción:
- Schema.org Validator — pegue la URL de una ficha de producto.
- Google Rich Results Test.
Módulo de administración
Bajo Marketing → DataFirefly llms.txt & AEO:
- Previsualización en vivo del llms.txt o del llms-full.txt, con renderizado monoespaciado.
- Selector de sales-channel — previsualice cada canal de forma independiente.
- Invalidación de caché en un clic (por canal o global).
- Apertura de la URL pública y copia al portapapeles.
Comandos CLI y automatización
datafirefly:llms-txt:generate
# Generar el llms.txt de un sales-channel (mostrado en la salida estándar)
bin/console datafirefly:llms-txt:generate --sales-channel=<id>
# Versión completa, escrita en un archivo, sin pasar por la caché
bin/console datafirefly:llms-txt:generate --sales-channel=<id> --full --output=/tmp/llms-full.txt --no-cache
datafirefly:llms-txt:warm
# Calentar la caché de todos los sales-channels x todos los idiomas activos
bin/console datafirefly:llms-txt:warm
# Forzar la regeneración aunque la caché siga siendo válida
bin/console datafirefly:llms-txt:warm --force
# Calentar solo el llms.txt (sin el llms-full.txt)
bin/console datafirefly:llms-txt:warm --skip-full
Cron recomendado
# Calentamiento diario a las 03:15
15 3 * * * cd /var/www/shopware && php bin/console datafirefly:llms-txt:warm --quiet
Una tarea programada Shopware también se registra en la activación: si su worker Messenger y el scheduled task runner están en marcha, la caché se calienta automáticamente sin cron de sistema.
Integración robots.txt
Dos enfoques para exponer las directivas IA en su robots.txt principal:
Copia manual
Abra /robots-ai.txt, copie el bloque generado y péguelo en su robots.txt existente. Repita tras cada cambio de configuración de los bots.
Reescritura de servidor (recomendada si el robots.txt está gestionado íntegramente por el plugin)
# nginx
location = /robots.txt {
rewrite ^ /robots-ai.txt last;
}
# Apache (.htaccess)
RewriteRule ^robots.txt$ /robots-ai.txt [L]
Use la reescritura completa solo si no tiene otras directivas robots.txt que preservar (sitemap, exclusiones SEO existentes). En caso de duda, prefiera la copia manual del bloque IA.
Caché y rendimiento
- Caché PSR-6 sobre el pool
cache.objectde Shopware, etiquetadadatafirefly_llms_aeo. - Claves delimitadas por sales-channel + idioma: cada combinación tiene su propia entrada.
- TTL configurable (por defecto 3600 s).
- Invalidación: botón admin (por canal o global), comando
warm --force, o expiración natural. - Compatible con caché clusterizada (Redis): la invalidación por etiquetas funciona en todos los adaptadores etiquetables.
Solución de problemas
Los endpoints devuelven 404
- Verifique que el plugin está activado (no solo instalado).
- Vacíe la caché HTTP y la caché de aplicación:
bin/console cache:clear. - Si usa un reverse proxy/CDN, púrguelo también.
Error «Attempted to call an undefined method named getHeader» en páginas de navegación
Bug corregido en la versión 1.0.1: en algunas instalaciones Shopware 6.7, NavigationPage no expone getHeader(). Actualice a la 1.0.1 (extracción defensiva de la categoría activa). Si ya está en 1.0.1 y sigue viendo el error, vacíe la caché de opcode PHP (opcache_reset o reinicio de PHP-FPM).
El módulo admin no aparece bajo Marketing
Compile los assets de administración (ver Instalación) y fuerce la recarga del navegador (Ctrl+Mayús+R).
El llms.txt está vacío o incompleto
- Verifique los toggles de inclusión (páginas CMS / categorías / marcas / productos) en la tarjeta «llms.txt».
- Verifique que el límite de productos no está en 0.
- Controle el campo
datafirefly_aeo_excludeen las entidades ausentes. - Invalide la caché y recargue.
El JSON-LD no aparece en el código fuente
- Verifique que «Activar el módulo» y los toggles Schema.org están activos para el sales-channel correcto.
- Si su tema sobrescribe
storefront/layout/meta.html.twigsin{{ parent() }}en el bloque correspondiente, la inyección se pierde: restaure la llamada al padre.
Changelog
1.0.1 — 2026-05-21
- Corrección: extracción defensiva de la categoría activa en las páginas de navegación (error
getHeader()en algunas instalaciones 6.7).
1.0.0 — 2026-05-21
- Versión inicial: llms.txt + llms-full.txt, 6 schemas JSON-LD, robots-ai.txt (9 bots), campos personalizados AEO, módulo admin Vue 3, 2 comandos CLI, tarea programada, snippets FR/EN/DE.