Blog

Sitio web preparado para agentes de IA: lo que construimos en dardo.studio y lo que de verdad sirve

Preparamos dardo.studio para que los agentes de IA lo lean y lo consulten, capa por capa. Te contamos qué hace cada capa, quién documenta que la usa hoy y cuáles volveríamos a construir.

Por Nicolás Cerón · · Read in English

Un pequeño robot con ruedas sigue una línea guía carmesí por una galería de museo de noche, hacia una escultura iluminada.

La respuesta corta

Un sitio web preparado para agentes de IA cumple tres condiciones. Los agentes pueden llegar a él. Pueden leerlo sin tropezar con menús, banners y scripts. Y, cuando tiene sentido, pueden usar unas pocas herramientas declaradas en vez de adivinar qué botón oprimir.

Construimos las tres en dardo.studio a comienzos de octubre de 2026. Aquí te contamos qué publicamos y cuánto de eso documentan usar hoy las grandes plataformas de IA, verificado contra el sitio en vivo el 8 de octubre de 2026.

La conclusión es poco llamativa. Lo que más pesa es lo más viejo: que los rastreadores puedan entrar y que el HTML sea claro y semántico. Las copias en markdown y el llms.txt son comodidades baratas. MCP, A2A y WebMCP son protocolos reales, pero ninguna documentación de rastreadores de OpenAI, Anthropic, Perplexity o Google que citamos dice que sus asistentes encuentren solos las herramientas de un sitio.

Primero, el acceso: robots.txt y la CDN

Nuestro robots.txt repite el mismo bloque para el agente por defecto (*) y para cada rastreador de búsqueda con IA y agente de usuario que nombramos:

User-agent: OAI-SearchBot
Allow: /
Disallow: /api/
Content-Signal: search=yes, ai-input=yes

Las mismas reglas aplican a ChatGPT-User, PerplexityBot, Perplexity-User, Claude-SearchBot, Claude-User y Bingbot. Solo /api/ está cerrado.

Rastreadores de búsqueda y de entrenamiento no son lo mismo

Las grandes empresas ya documentan identificadores separados:

  • OpenAI. OAI-SearchBot muestra sitios en la búsqueda de ChatGPT; si lo bloqueas, quedas fuera de esas respuestas, aunque puedes seguir apareciendo como enlace de navegación. GPTBot recoge datos para entrenamiento. (OpenAI)
  • Anthropic. Claude-SearchBot indexa para búsqueda, ClaudeBot recoge datos de entrenamiento y Claude-User visita páginas cuando alguien le pregunta algo a Claude. (Anthropic)
  • Perplexity. PerplexityBot muestra y enlaza sitios en sus resultados y no se usa para entrenar modelos fundacionales de IA. (Perplexity)
  • Google. Google-Extended controla el entrenamiento de Gemini y el grounding en otros productos de Google. No afecta la inclusión ni el ranking en la Búsqueda. (Google)

Los agentes que actúan por pedido de una persona son otra cosa. OpenAI dice que robots.txt puede no aplicar a ChatGPT-User; Perplexity-User y los agentes activados por usuarios de Google en general lo ignoran. Actúan en tiempo real para una persona; cuando un bloqueo funciona, sobre todo impide que su asistente lea tu página.

Nuestro archivo no nombra a los rastreadores de entrenamiento, así que caen en * y están permitidos. Es una decisión de negocio que los proveedores documentan como un control aparte: bloquear GPTBot o ClaudeBot no es salir de sus índices de búsqueda.

Content Signals: una línea, ningún compromiso

La línea Content-Signal viene de la política Content Signals de Cloudflare, que nombra tres usos: search, ai-input (entregar contenido a un modelo al responder) y ai-train. Dejamos ai-train por fuera, lo que según la política no concede ni restringe ese uso. Cloudflare aclara que las señales no bloquean nada y que algunas empresas pueden ignorarlas. Ninguna de las páginas de rastreadores citadas aquí las menciona. Cuesta una línea; no esperes nada de ella por ahora.

Revisa la CDN, no solo el archivo

robots.txt declara una política; la CDN decide qué pasa. El 2 de octubre, el Browser Integrity Check de Cloudflare respondía 403 al cliente HTTP por defecto de Python (Python-urllib) y a libwww-perl, aunque robots.txt lo permitía todo. Los scripts que escriben los agentes de programación suelen usar ese cliente tal cual.

Agregamos una regla en Cloudflare que exime las solicitudes GET y HEAD al contenido público; /api/ sigue en 403. También vimos que los .txt salían sin charset y algunos clientes leían "Bogotá" como "Bogotá". Se arregló con charset=utf-8.

Prueba con solicitudes reales bajo cada user agent; eso muestra que nada bloquea el nombre, no que el rastreador real te visitó.

HTML semántico: la capa de la que dependen todos los agentes

La guía de optimización para IA de Google describe agentes de navegador que analizan capturas de pantalla, inspeccionan el DOM e interpretan el árbol de accesibilidad, y remite a la guía de web.dev. Esa guía es, en el fondo, accesibilidad: <button> y <a> en vez de <div> con estilos, cada etiqueta conectada a su campo y un diseño que no se mueva bajo una captura.

En dardo.studio cada página tiene un solo <main> y zonas <nav> con nombre. Los botones de menú y tema son botones reales que informan su estado con aria-expanded y aria-pressed, y los menús cerrados quedan inert. Cada campo del formulario de contacto va dentro de su <label>, que le da un nombre accesible; web.dev sugiere el atributo for, y envolver el campo cumple la misma función.

Esto ya ayuda a quienes usan lectores de pantalla.

Una copia limpia en markdown de cada página

Los agentes pagan por cada token que leen, y una página renderizada trae navegación, banner de cookies, scripts y gráficos. Antes, si pedías nuestras páginas con Accept: text/markdown, recibías todo eso en HTML.

Ahora cada build escribe un index.md junto a cada página indexable. Empieza con metadatos (título, descripción, URL canónica, idioma, versión en el otro idioma y fecha de actualización) y sigue con el contenido de <main>, sin scripts, botones, imágenes decorativas ni índice interno. Las preguntas frecuentes se conservan. Los formularios se vuelven una lista de campos y opciones, así un agente puede decirle a una persona qué pide el formulario sin tocarlo.

Hay tres formas de obtener la copia:

  • Enviar Accept: text/markdown a la URL normal. La respuesta lleva Vary: Accept para que las cachés no mezclen versiones.
  • Pedir el archivo: /es/servicios/seo/index.md.
  • Agregar .md a la ruta (/es/servicios/seo.md). Para las URL que terminan en barra, la propuesta llms.txt usa index.md, la forma anterior.

Además, cada página HTML enlaza su copia con <link rel="alternate" type="text/markdown">.

Que los buscadores le den el crédito al HTML

Google aclara que puede rastrear e indexar muchos tipos de archivo además del HTML, sin trato especial. Para que una copia no compita con su página, cada respuesta en markdown declara el HTML como canónico:

$ curl -sI https://dardo.studio/es/servicios/seo/index.md
content-type: text/markdown; charset=utf-8
link: <https://dardo.studio/es/servicios/seo/>; rel="canonical", ...

¿Quién lee estas copias? Cloudflare creó Markdown for Agents para convertir HTML cuando una solicitud prefiere markdown, lo que sugiere que los agentes lo piden. No dice qué clientes envían el encabezado, y nosotros tampoco tenemos una lista verificada. Si usas esa función, ten en cuenta que Cloudflare agrega Content-Signal: ai-train=yes, search=yes, ai-input=yes salvo que tu servidor defina otro. Nosotros generamos las copias en el build para que coincidan con la página.

llms.txt: qué es, qué hace y qué no

llms.txt es una propuesta de Jeremy Howard de septiembre de 2024, todavía abierta a la comunidad: un archivo markdown en /llms.txt con el nombre del sitio, un resumen y listas de enlaces útiles para un agente.

El nuestro, en /es/llms.txt y /llms.txt, se genera con los mismos datos de las páginas, así que no se desactualiza. Incluye los datos del estudio (Bogotá, fundado en 2026, equipo de tres, cómo se cotizan los proyectos, contacto), servicios, proyectos y cómo pedir las copias en markdown. llms-full.txt reúne el texto completo de estudio, servicios, proyectos y contacto.

Una línea aclara qué negocios con nombres parecidos no somos nosotros: el 2 de octubre encabezaban los resultados de "dardo studio".

El estado real:

  • Google dice que no necesitas llms.txt para aparecer en la Búsqueda ni en sus funciones de IA, que la Búsqueda lo ignora y que tenerlo no ayuda ni perjudica.
  • OpenAI, Anthropic y Perplexity no dicen en su documentación de rastreadores que lean el llms.txt de otros sitios. Los sitios de documentación de OpenAI, Anthropic y Perplexity sí publican uno propio, para quien lee sus docs.

Mantenlo si se genera solo y es exacto. Sirve a herramientas que lo buscan, pero no da visibilidad.

Servidor MCP, A2A y catálogo de APIs: herramientas para agentes

Publicamos dos herramientas de solo lectura:

  • list_services devuelve los servicios publicados, su alcance, entregables y URLs de origen en español o inglés, con filtro opcional por palabra clave.
  • get_project_brief devuelve las preguntas que conviene responder antes de escribirnos y el enlace de contacto para ese servicio.

Una sola implementación atiende varias puertas:

PuertaDirección en dardo.studioEstándar y estado
Servidor MCP/mcp, tarjeta en /.well-known/mcp/server-card.jsonMCP con Streamable HTTP; la tarjeta es una propuesta en borrador
Agente A2A/a2a, tarjeta en /.well-known/agent-card.jsonA2A 1.0, JSON-RPC
Endpoint JSON/agent/services.json, descrito en OpenAPIHTTP simple
Catálogo de APIs/.well-known/api-catalogRFC 9727, estándar del IETF

Cada respuesta HTML y markdown envía un encabezado Link hacia el catálogo, el índice de skills y las dos tarjetas, así que cualquier página lleva al resto.

Reglas de diseño que repetiríamos

  • Solo lectura, solo datos públicos. Las herramientas MCP declaran readOnlyHint: true y leen el mismo catálogo que el HTML, sin base de datos detrás. get_project_brief no envía, no agenda ni cotiza; una persona revisa y envía.
  • Entradas acotadas. Tope de 8 KiB por solicitud, validación del encabezado Origin (la especificación de MCP lo exige) y límite de frecuencia propio.
  • Sin estado. El agente A2A responde de inmediato, no guarda tareas ni descarga archivos o URLs que le envíen.
  • Reglas claras. /auth.md dice que no se necesitan credenciales y que leer datos públicos no autoriza a enviar mensajes ni a pagar.

Dejamos por fuera los protocolos de comercio y el descubrimiento OAuth que revisan los escáneres de preparación para agentes. No vendemos con checkout ni protegemos recursos; publicarlos describiría capacidades que no existen.

¿Quién usa hoy estas herramientas? Clientes MCP que alguien conectó a /mcp y clientes A2A con nuestra tarjeta. Para un estudio, el valor es modesto: responder bien "¿qué hace Dardo y qué le tengo que enviar?". Pesa más en un sitio con datos vivos, como inventario, disponibilidad o documentación de producto. Si los agentes van a escribir datos, necesitas autenticación y revisión; eso ya es automatización con IA.

WebMCP: las mismas herramientas en el navegador

WebMCP permite que una página registre herramientas para un agente de IA en el navegador. Es un borrador de un grupo comunitario del W3C y aclara que no es un estándar del W3C. Según web.dev, está en desarrollo activo, puede cambiar y se puede probar en Chrome con una prueba de origen.

Nuestras páginas registran las mismas dos herramientas con document.modelContext (o navigator.modelContext en versiones preliminares). Sin la API, el navegador no ejecuta nada extra. Fueron unas 40 líneas. Tómalo como experimento.

Cada capa, y si vale la pena

CapaQué esQuién la lee hoy¿Vale la pena?
HTML semántico y formularios con etiquetasBotones, enlaces, zonas y etiquetas realesNavegadores, tecnologías de asistencia y agentes de navegadorSí. Es lo primero
robots.txt para búsqueda y agentes de usuarioReglas que separan búsqueda de entrenamientoOpenAI, Anthropic, Perplexity y Google documentan sus identificadoresSí. Y prueba en la CDN
Content SignalsPreferencias search, ai-input, ai-trainNinguna empresa de IA que revisamos documenta respetarlasUna línea. No esperes nada
Copias en markdown con canónicaTexto limpio de cada páginaAgentes que piden markdown; sin lista públicaSí, con encabezado canónico
llms.txt y llms-full.txtÍndice curado y texto completoGoogle lo ignora; ningún rastreador documenta leerloSi se genera solo. No da visibilidad
Servidor MCP (solo lectura)Herramientas declaradasClientes MCP que alguien conectaSolo con datos o acciones útiles
Tarjeta de agente A2ADescripción de un agente para máquinasClientes A2A que apuntan a ellaEspeculativo para casi todos
Catálogo de APIs (RFC 9727)Lista conocida de tus APIs públicasHerramientas que lo buscanBarato si ya tienes APIs
WebMCPHerramientas registradas en el navegadorChrome, con prueba de origenExperimento

Lo que volveríamos a construir

En este orden: HTML semántico, acceso de rastreadores probado, copias en markdown con canónica, un llms.txt generado y herramientas solo cuando haya algo que consultar. Después, mide: los logs del servidor muestran qué agentes piden markdown o llaman a /mcp. Una visita no es una cita, y nada de esto garantiza que una IA te mencione.

La preparación para agentes es parte de nuestro servicio de SEO para IA, junto con el contenido y la medición que deciden si las respuestas de IA te citan. Si quieres llevarla a tu sitio web, cuéntanos tu proyecto.