Skip to content

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.

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.

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:

ClavePredeterminadoDescripción
enabledtrueInterruptor 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:

  1. La cabecera Accept contiene text/markdown (excluyendo q=0).
  2. La URL contiene el argumento de consulta ?output_format=md.

En ambos casos, la respuesta incluye:

Content-Type: text/markdown; charset=UTF-8
Vary: Accept

Los visitantes normales siguen recibiendo HTML estándar. Se conservan las reglas de permisos (read_post, protección con contraseña, borradores).

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.

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.

---
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.

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.

Terminal window
curl https://shop.test/llms.txt

Respuesta (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=md a 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);
FiltroPropósito
polski/ai_feed/enabledInterruptor principal (bool)
polski/ai_feed/post_typesLista de tipos de contenido (string[])
polski/ai_feed/post_markdownMarkdown final de una entrada/página
polski/ai_feed/product_markdownMarkdown final de un producto
polski/ai_feed/product_factsLista de pares [label, value] en la sección “Product details”
polski/ai_feed/password_requiredCuerpo Markdown cuando el contenido está protegido con contraseña
polski/ai_feed/llms_txt_enabledInterruptor de apagado para /llms.txt (bool)
polski/ai_feed/llms_txt_sectionsMapa de [heading => list] para el manifiesto
polski/ai_feed/llms_txt_category_limitNúmero máximo de categorías de producto listadas (int)
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).