Markdown para agentes de IA: Accept text/markdown, Content-Signal y Link Headers

Por SEOgrinder · Publicado · 12 min de lectura

Respuesta corta: Markdown para agentes de IA significa que tu servidor responde a la misma dirección con Markdown puro en lugar de HTML cuando el cliente lo pide con la cabecera de petición Accept: text/markdown. Los navegadores siguen recibiendo HTML. Bastan unas pocas líneas de código en el servidor o una función de CDN que activas tú, y los agentes obtienen texto limpio, sin menús ni scripts. No está demostrado que aporte un beneficio para el posicionamiento ni para las citas en respuestas de IA, así que trátalo como un extra barato sobre un HTML legible, un buen robots.txt y un sitemap, nunca como sustituto de ellos.

¿Por qué a los agentes de IA les gusta el Markdown?

Una página web está construida para navegadores. Alrededor del texto que quieres leer hay navegación, un aviso de cookies, scripts, clases de estilo y pies de página. El ojo humano pasa de largo ante esos elementos. Un programa que tiene que pasar la página a un modelo de lenguaje no puede ignorarlos gratis: el modelo tiene una ventana de contexto limitada y cada elemento adicional consume una parte.

El Markdown conserva lo que importa para leer: encabezados, párrafos, listas, tablas y enlaces. Por eso los agentes y herramientas similares son candidatos naturales a pedirlo, y por eso la propuesta de llms.txt también está escrita en Markdown. De ese archivo hablamos en llms.txt: qué es, cómo crearlo y si de verdad funciona.

Cloudflare hace visible la diferencia de tamaño. En su anuncio de Markdown for Agents, la respuesta de ejemplo incluye una cabecera x-markdown-tokens con un recuento estimado de tokens (725 en el ejemplo), de modo que el cliente puede calcular cuánto contexto va a ocupar la página.

Lo que esto no dice es si los grandes sistemas de búsqueda con IA piden Markdown. El anuncio de Cloudflare muestra datos de Radar sobre respuestas en Markdown a OAI-SearchBot. Eso demuestra que esas respuestas existen, no que el rastreador las solicite; OpenAI no lo documenta. Por eso no lo afirmamos. Lo que sí está documentado es que algunos agentes ya lo piden, como verás en las secciones siguientes.

Cómo funciona la negociación de contenido: Accept, Vary y Content-Type

La negociación de contenido es una parte antigua de HTTP. Una misma dirección puede tener varias representaciones y el cliente indica cuál prefiere. Tres cabeceras sostienen el mecanismo completo:

CabeceraLa envíaSignificado
AcceptEl cliente, en la peticiónQué tipos de contenido quiere, con pesos opcionales (q=0.8)
Content-TypeEl servidor, en la respuestaLo que el servidor ha enviado realmente, aquí text/markdown; charset=utf-8
Vary: AcceptEl servidor, en la respuestaLa respuesta depende de la cabecera Accept, así que las cachés no deben mezclar las versiones

Un navegador envía primero text/html y añade el comodín */* como alternativa. Un agente que quiere Markdown lo nombra de forma explícita, por ejemplo Accept: text/markdown o Accept: text/markdown, text/html;q=0.8. Cloudflare escribe que agentes de programación habituales, como Claude Code y OpenCode, ya envían cabeceras Accept de este tipo.

La regla que protege a todos es sencilla: responde con Markdown solo si text/markdown se nombra de forma explícita y no tiene una valoración inferior a la de text/html. El comodín */* no debe contar nunca. Si no, un navegador, un verificador de enlaces o un bot de vista previa de redes sociales, que aceptan «cualquier cosa», recibirían Markdown.

Markdown para agentes de IA con Cloudflare

El 12 de febrero de 2026, Cloudflare anunció Markdown for Agents. Si la función está activada en tu zona (está en beta, sin coste, en los planes Pro, Business y Enterprise), una petición con Accept: text/markdown recibe tu HTML convertido a Markdown sobre la marcha. Tu servidor de origen no cambia.

La respuesta de ejemplo del anuncio muestra las cabeceras que cabe esperar:

content-type: text/markdown; charset=utf-8
vary: accept
x-markdown-tokens: 725
content-signal: ai-train=yes, search=yes, ai-input=yes

Es el camino más rápido si tu sitio ya funciona detrás de Cloudflare en uno de esos planes y el resultado de la conversión se ve bien. Compruébalo con curl (consulta la sección «Cómo probarlo con curl») antes de fiarte de él. Si quieres controlar por completo lo que dice la versión en Markdown, o tu sitio funciona sobre otra infraestructura, constrúyela tú.

Hazlo tú mismo: un ejemplo breve en Node

El siguiente esbozo reúne las reglas de arriba: Markdown solo ante una petición explícita, Vary: Accept en ambas versiones, una dirección fija /index.md para los clientes que no negocian y un enlace canonical en la cabecera de la respuesta en Markdown. Es un ejemplo mínimo, no código listo para producción.

import http from 'node:http';
import { readFileSync } from 'node:fs';

function wantsMarkdown(accept = '') {
  const weight = new Map();
  for (const part of accept.toLowerCase().split(',')) {
    const [range, ...params] = part.trim().split(';');
    const q = params.find((p) => p.trim().startsWith('q='));
    weight.set(range.trim(), q ? Number(q.trim().slice(2)) : 1);
  }
  const md = weight.get('text/markdown') ?? 0;
  const html = weight.get('text/html') ?? weight.get('text/*') ?? weight.get('*/*') ?? 0;
  return md > 0 && md >= html; // el comodín por sí solo nunca elige Markdown
}

http.createServer((req, res) => {
  if (req.url === '/index.md' || (req.url === '/' && wantsMarkdown(req.headers.accept))) {
    res.writeHead(200, {
      'Content-Type': 'text/markdown; charset=utf-8',
      'Vary': 'Accept',
      'Link': '<https://example.com/>; rel="canonical"',
    });
    return res.end(readFileSync('index.md'));
  }
  if (req.url === '/') {
    res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8', 'Vary': 'Accept' });
    return res.end(readFileSync('index.html'));
  }
  res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' }); // cualquier otra dirección responde 404
  res.end('Not found');
}).listen(3000);

Tres detalles merecen una segunda mirada:

  • Vary en ambas versiones. La respuesta HTML también necesita Vary: Accept. Si no, una caché compartida puede guardar el HTML y entregárselo a un agente que pidió Markdown, o al revés.
  • La dirección fija. /index.md devuelve siempre Markdown, sea cual sea la petición del cliente. Agentes y personas pueden enlazarla, y funciona donde no se pueden fijar cabeceras. Nuestra propia página seogrinder.com/index.md lo hace así.
  • La cabecera canonical. La versión en Markdown es una segunda representación de la misma página. Google documenta que rel="canonical" puede enviarse como cabecera HTTP en archivos que no son HTML. Es una señal fuerte de que la versión en Markdown pertenece a la página, no una garantía (Google).

Escribe el archivo Markdown a mano o genéralo a partir de la misma fuente que el HTML. En cualquier caso, debe decir lo mismo que la página, solo que sin el marco.

La cabecera de respuesta Link está definida en el RFC 8288. Nombra una dirección relacionada y el tipo de relación, por ejemplo Link: </llms.txt>; rel="describedby". La relación describedby está registrada y su significado encaja: el recurso enlazado describe a este. Un cliente que lee las cabeceras de respuesta sabe así dónde está la descripción de tu sitio antes de analizar el cuerpo.

seogrinder.com envía esta cabecera en su página de inicio y apunta a su propio llms.txt. En la respuesta en Markdown, la misma cabecera Link incluye además la relación canonical que vimos arriba, separada por una coma.

No está demostrado que hoy algún agente siga estos enlaces. El coste es una línea en la configuración del servidor.

La línea Content-Signal

En septiembre de 2025, Cloudflare presentó una línea para el robots.txt que indica qué puede hacer un rastreador con tu contenido una vez que lo ha obtenido:

Content-Signal: search=yes, ai-input=yes, ai-train=no

search abarca la indexación y los snippets, ai-input el uso directo del contenido en respuestas de IA y ai-train el entrenamiento o ajuste fino de un modelo. El formato lo describen el anuncio de Cloudflare y contentsignals.org. Es una declaración, no una barrera: nadie está obligado a respetarla. Cloudflare señala que las señales de contenido expresan preferencias, que no son contramedidas técnicas y que algunas empresas podrían simplemente ignorarlas. Como se vio más arriba, el ejemplo de Markdown de Cloudflare también lleva una cabecera de respuesta content-signal.

La línea va en tu robots.txt, junto con el resto de reglas para los bots de IA. Los detalles, incluido el error habitual de los grupos separados para cada bot, están en robots.txt para IA. El robots.txt de seogrinder.com usa un único grupo compartido para todos los rastreadores y nueve identificadores de IA, con Content-Signal: search=yes, ai-input=yes, ai-train=yes.

Cómo probarlo con curl

Comprueba con la misma herramienta que usaría un agente. La opción -I muestra solo las cabeceras:

curl -sI -H "Accept: text/markdown" https://example.com/

Busca cuatro cosas en la respuesta: estado 200, content-type: text/markdown, un vary que contenga Accept y una cabecera link con la dirección canonical. Este es el resultado para seogrinder.com, abreviado a las líneas relevantes:

HTTP/2 200
content-type: text/markdown; charset=utf-8
vary: Accept
link: </llms.txt>; rel="describedby"; type="text/plain", <https://seogrinder.com/>; rel="canonical"

Haz después las pruebas contrarias. Cada una de ellas debe devolver text/html:

curl -sI -H "Accept: text/html" https://example.com/
curl -sI -H "Accept: */*" https://example.com/
curl -sI https://example.com/

Por último, envía -H "Accept: text/markdown, text/html;q=0.8". Debe ganar el Markdown, porque tiene una valoración más alta.

Cómo lo comprueba SEOgrinder

Abre la pestaña Preparación para la IA de SEOgrinder después de un análisis. En «Comprobaciones para agentes de IA» verás siete líneas. Tres de ellas tienen que ver con este artículo, y las tres están en el grupo «Extras»:

  • Servir texto en lugar de HTML (Markdown Negotiation): cumplido cuando una petición con Accept: text/markdown devuelve Markdown.
  • Llevar a los agentes hasta tus datos (Link Headers): busca relaciones útiles en la cabecera de respuesta.
  • Declarar el uso del contenido (Content Signals): busca una línea Content-Signal completa que cubra ai-train, search y ai-input.

Los puntos abiertos muestran el botón Copiar prompt del agente directamente en la línea; los puntos cumplidos lo muestran cuando despliegas la línea, junto con el texto que se encontró. En un punto abierto, el prompt describe qué crear, muestra el estado actual con curl y da un comando para comprobar el resultado. En un punto cumplido, pide a tu asistente de programación que revise lo que existe, cambie solo lo necesario y te pregunte antes de eliminar una regla que no entienda. Decisiones como permitir o bloquear rastreadores de IA siguen siendo tuyas, y algunos prompts de puntos abiertos proponen valores de ejemplo, así que decide primero y lee el prompt antes de pegarlo en Claude Code, Cursor, GitHub Copilot o ChatGPT. Después pulsa Comprobar de nuevo para volver a analizar. Los informes se guardan hasta 24 horas en la caché y Comprobar de nuevo fuerza un análisis nuevo (unas pocas veces por hora).

SEOgrinder es claro con el grupo «Extras»: son sugerencias de fabricantes concretos, y no está demostrado que tengan efecto en Google. Además, la herramienta no mide si ChatGPT, Gemini o Perplexity mencionan realmente tu marca. Comprueba la base técnica: ¿pueden las máquinas llegar hasta tu página y leerla?

¿Merece la pena el esfuerzo?

Depende de lo que ofrezca tu sitio. La documentación, las páginas de referencia, las guías largas y las bases de conocimiento son el tipo de contenido que los agentes consultan para responder a una pregunta concreta, y ahí una versión limpia en Markdown resulta útil. Para una tienda pequeña o un negocio local con cinco páginas, el tiempo se aprovecha mejor en lo básico: texto presente en el HTML sin necesidad de JavaScript, un robots.txt que deje entrar a los bots de búsqueda y un sitemap.

En cuanto a las funciones de IA de Google, Google afirma que no hay requisitos adicionales para aparecer en AI Overviews ni en AI Mode, ni hacen falta otras optimizaciones especiales; los detalles están en la documentación de Google. Una versión en Markdown no es, por tanto, un requisito en ese caso. Otros asistentes pueden comportarse de otra manera, pero nadie puede prometer que un asistente de IA vaya a mencionar tu página.

Errores frecuentes

  • Sin cabecera Vary. Sin Vary: Accept, una caché o un CDN pueden servir la versión equivocada al siguiente visitante.
  • Una caché por delante que ignora la cabecera. Haz la prueba a través de la dirección pública, no solo contra tu servidor de origen.
  • Markdown para los navegadores. Si tu comprobación trata el comodín */* como una petición de Markdown, los visitantes verán texto sin formato. Prueba con un navegador normal.
  • Sin enlace canonical. La versión en Markdown puede tratarse entonces como una página aparte. Elegimos la cabecera canonical en lugar de noindex porque la versión negociada vive en la misma dirección que la página.
  • Una versión en Markdown que dice otra cosa. Mantén el contenido igual que el de la página HTML, solo que sin el marco. No tenemos ninguna fuente sobre cómo tratan los buscadores las diferencias entre ambas, así que mantenlas idénticas.
  • Un archivo desactualizado. Un index.md escrito a mano que enumera la oferta del año pasado confunde a los agentes. Genéralo a partir de la fuente de la página o ponlo en tu lista de revisión.
  • Una página HTML vacía. Si el propio HTML no tiene texto hasta que se ejecuta JavaScript, el Markdown para agentes no soluciona el problema de los demás clientes, como las vistas previas en redes sociales. SEOgrinder señala las páginas que solo se construyen en el navegador.

Preguntas frecuentes

¿Es el Markdown para agentes de IA un factor de posicionamiento?

No hay pruebas de ello. Considéralo un formato de entrega para máquinas, no una palanca de posicionamiento.

¿Piden Markdown ChatGPT, Claude o Perplexity?

Cloudflare escribe que agentes de programación como Claude Code y OpenCode ya envían Accept: text/markdown. Para los rastreadores de búsqueda de los grandes proveedores no hay documentación que indique que lo pidan; los datos de Radar de Cloudflare muestran respuestas en Markdown a OAI-SearchBot, lo cual no prueba que exista una cabecera de petición. Por tanto, no está demostrado.

¿Necesito Cloudflare?

No. Cloudflare ofrece la conversión como una función (en beta, en los planes Pro, Business y Enterprise). El esbozo en Node de arriba muestra que bastan unas líneas de código en el servidor, y las mismas reglas se pueden incorporar a cualquier servidor o framework.

¿Debo usar la negociación de contenido o una dirección .md aparte?

Puedes hacer las dos cosas. Una dirección fija como /index.md es fácil de enlazar y de probar. La negociación mantiene una sola dirección para ambos públicos. seogrinder.com ofrece las dos para su página de inicio.

¿Verán alguna vez los visitantes normales la versión en Markdown?

No, si cumples la regla del comodín: el Markdown solo se envía cuando text/markdown se nombra de forma explícita y no tiene una valoración inferior a la de text/html.

Tu siguiente paso

Haz el análisis gratuito en SEOgrinder y abre la pestaña Preparación para la IA. Mira las tres líneas de Extras sobre Markdown, Link Headers y Content Signals, y decide si tu sitio es de los que leen los agentes. Si lo es, copia el prompt del agente, deja que tu asistente haga el cambio, comprueba el resultado con curl y vuelve a analizar.

Más artículos del blog