AI Feed - visibility for AI agents
AI Feed expone el contenido de la tienda como Markdown optimizado para modelos de lenguaje y agentes de compra. Un cliente HTTP envía Accept: text/markdown (o añade ?output_format=md a la URL) y, en lugar de la página HTML renderizada, recibe Markdown limpio con metadatos YAML.
Por qué importa
Section titled “Por qué importa”Los agentes de IA (ChatGPT shopping, Perplexity, Gemini, rastreadores LLM propios) omiten cada vez más el HTML y piden directamente una versión “limpia” de la página. El scraping tradicional de HTML es frágil, costoso y pierde datos estructurados. AI Feed invierte la relación: la tienda publica una versión legible por máquinas en la misma URL que la versión para personas.
Activar el módulo
Section titled “Activar el módulo”El módulo está activo por defecto tras la actualización a la 1.11.0. Para desactivarlo:
add_filter('polski/ai_feed/enabled', '__return_false');Ajustes guardados en la opción polski_ai_feed:
| Clave | Predeterminado | Descripción |
|---|---|---|
enabled | true | Interruptor principal |
post_types | ['post', 'page', 'product'] | Tipos de contenido servidos como Markdown |
Cómo funciona la negociación de contenido
Section titled “Cómo funciona la negociación de contenido”Markdown se devuelve en dos casos:
- La cabecera
Acceptcontienetext/markdown(excluyendoq=0). - La URL contiene el argumento de consulta
?output_format=md.
En ambos casos, la respuesta incluye:
Content-Type: text/markdown; charset=UTF-8Vary: AcceptLos visitantes normales siguen recibiendo HTML estándar. Se conservan las reglas de permisos (read_post, protección con contraseña, borradores).
Descubrimiento
Section titled “Descubrimiento”Las vistas HTML individuales incluyen en <head>:
<link rel="alternate" type="text/markdown" href="https://shop.test/product/t-shirt/?output_format=md" />Los rastreadores y los agentes de IA pueden localizar la versión Markdown sin necesidad de conocer la convención de URL.
Atajo en el administrador
Section titled “Atajo en el administrador”En las pantallas de listado de Entradas, Páginas y Productos aparece una acción “View AI Version” junto a “Ver”, que abre el mismo Markdown que vería un agente de IA - útil para pruebas y previsualización.
Qué contiene una respuesta Markdown de producto
Section titled “Qué contiene una respuesta Markdown de producto”Para un producto de WooCommerce, la respuesta incluye:
Front matter YAML
---title: "Basic T-shirt"permalink: "https://shop.test/product/t-shirt/"sku: "TS-001"gtin: "5901234567890"product_type: "simple"currency: "PLN"price: "49,99 zł"regular_price: "59,99 zł"sale_price: "49,99 zł"in_stock: "true"on_sale: "true"modified: "2026-04-30T12:00:00+02:00"categories: ["T-shirts"]---Lista con viñetas “Product details”
- SKU y GTIN/EAN
- Precio bruto, precio regular, precio de oferta
- Clase de impuesto (IVA)
- Precio más bajo de los últimos 30 días (Omnibus)
- Plazo de entrega
- Cantidad en stock y disponibilidad
- Peso y dimensiones
- Marca, fabricante
- Persona responsable (GPSR)
Descripción completa del producto convertida a Markdown.
Ejemplo de respuesta completa
Section titled “Ejemplo de respuesta completa”---title: "Basic T-shirt"permalink: "https://shop.test/product/t-shirt/"sku: "TS-001"price: "49,99 zł"in_stock: "true"---
# Basic T-shirt
Cotton t-shirt with classic cut.
## Product details
- **SKU:** TS-001- **GTIN/EAN:** 5901234567890- **Price:** 49,99 zł- **Tax class:** Standard- **Lowest price (last 30 days):** 45,00 zł- **Delivery time:** 1-2 days- **Availability:** In stock- **Weight:** 0.2 kg
## Description
Full product description from Gutenberg blocks, including lists, tables, and headings.Manifiesto /llms.txt
Section titled “Manifiesto /llms.txt”Siguiendo el estándar llmstxt.org, la tienda expone un archivo /llms.txt en la raíz del dominio. Los agentes de IA lo consultan primero para descubrir la estructura del sitio sin conocer ninguna convención de URL.
curl https://shop.test/llms.txtRespuesta (Markdown):
# Your store
> An online store for Polish goods.
## Legal
- [Terms](https://shop.test/terms/?output_format=md): Terms and conditions- [Privacy](https://shop.test/privacy/?output_format=md): Privacy policy- [Returns](https://shop.test/returns/?output_format=md): Returns and withdrawal policy
## Shop
- [Shop](https://shop.test/shop/): Storefront
## Product categories
- [T-shirts](https://shop.test/category/t-shirts/)- [Hoodies](https://shop.test/category/hoodies/)Contenido predeterminado
- Título y descripción del sitio (de
get_bloginfo('name'),get_bloginfo('description')) - Sección “Legal” con enlaces
?output_format=mda las páginas legales (Terms, Privacy, Returns, Complaints) - solo cuando esas páginas existen - Sección “Shop” con la página de la tienda de WooCommerce
- “Product categories” con las 20 categorías más pobladas (ordenadas por número de productos)
Desactivar
add_filter('polski/ai_feed/llms_txt_enabled', '__return_false');Personalizar secciones
add_filter('polski/ai_feed/llms_txt_sections', static function (array $sections): array { $sections['Resources'] = [ ['Blog', home_url('/blog/'), 'Latest posts'], ['FAQ', home_url('/faq/')], ]; return $sections;});Límite de categorías
add_filter('polski/ai_feed/llms_txt_category_limit', static fn () => 50);Filtros para desarrolladores
Section titled “Filtros para desarrolladores”| Filtro | Propósito |
|---|---|
polski/ai_feed/enabled | Interruptor principal (bool) |
polski/ai_feed/post_types | Lista de tipos de contenido (string[]) |
polski/ai_feed/post_markdown | Markdown final de una entrada/página |
polski/ai_feed/product_markdown | Markdown final de un producto |
polski/ai_feed/product_facts | Lista de pares [label, value] en la sección “Product details” |
polski/ai_feed/password_required | Cuerpo Markdown cuando el contenido está protegido con contraseña |
polski/ai_feed/llms_txt_enabled | Interruptor de apagado para /llms.txt (bool) |
polski/ai_feed/llms_txt_sections | Mapa de [heading => list] para el manifiesto |
polski/ai_feed/llms_txt_category_limit | Número máximo de categorías de producto listadas (int) |
Ejemplo - registrar un CPT personalizado
Section titled “Ejemplo - registrar un CPT personalizado”add_filter('polski/ai_feed/post_types', static function (array $types): array { $types[] = 'recipe'; return $types;});Ejemplo - añadir un campo personalizado a la salida del producto
Section titled “Ejemplo - añadir un campo personalizado a la salida del producto”add_filter('polski/ai_feed/product_facts', static function (array $facts, WC_Product $product): array { $color = $product->get_attribute('pa_color'); if ($color !== '') { $facts[] = ['Color', $color]; } return $facts;}, 10, 2);¿Sustituye esto a mi tema para los visitantes normales?
No. Por defecto se devuelve HTML. El Markdown se sirve solo a los clientes que lo solicitan mediante Accept o el parámetro de URL.
¿Se exponen las páginas protegidas con contraseña?
No. Cuando una página requiere contraseña, AI Feed devuelve un breve aviso en Markdown en lugar del cuerpo completo.
¿Se admiten los borradores?
Sí, para los usuarios con permisos de edición. La acción de administrador “View AI Version” usa URLs de previsualización para borradores y entradas programadas.
¿Puedo añadir tipos de contenido personalizados?
Sí, mediante el filtro polski/ai_feed/post_types. Por defecto se admiten post, page y product.
¿Funciona con HPOS y el pago con bloques?
Sí. El módulo opera en la capa de vista del producto, con independencia del almacenamiento de pedidos (HPOS) y del pago (Blocks).