Volver a las notas

Los rastreadores de IA no ejecutan tu JavaScript

5 de noviembre de 2026·
aiseorenderingjavascript
Demo en vivoAbrir a pantalla completa

Si tu página construye su contenido con JavaScript en el navegador, los rastreadores que hay detrás de ChatGPT, Claude y Perplexity ven una carcasa vacía. Descargan el HTML, puede que incluso descarguen tus bundles, pero no los ejecutan. Googlebot sí ejecuta JavaScript, y por eso esto pasa desapercibido tanto tiempo: tu página puede posicionar bien en Google y aun así no existir para buena parte de la búsqueda con IA. La demo de arriba pone a los dos lectores uno al lado del otro: un navegador real a la izquierda y lo que recibe un rastreador sin JS a la derecha, con el mismo HTML para ambos.

Qué hacen de verdad los rastreadores

Los datos más claros que he encontrado son los del estudio de Vercel sobre el tráfico de rastreadores en su red, publicado en diciembre de 2024. Su conclusión es tajante: "none of the major AI crawlers currently render JavaScript" (ninguno de los grandes rastreadores de IA renderiza JavaScript). La lista que revisaron incluye GPTBot, OAI-SearchBot y ChatGPT-User de OpenAI, ClaudeBot de Anthropic, Meta-ExternalAgent, Bytespider y PerplexityBot. También señalan que los rastreadores de ChatGPT y de Claude sí descargan los archivos JavaScript, solo que no los ejecutan, así que el contenido renderizado en el cliente les resulta invisible.

Las excepciones son los rastreadores que funcionan sobre un navegador. Según el mismo estudio, Gemini usa la infraestructura de Googlebot, lo que le da renderizado completo de JavaScript, y AppleBot también renderiza con un rastreador basado en navegador.

Y no son bots marginales. En el mes que midió Vercel, GPTBot hizo 569 millones de peticiones y los rastreadores de Claude 370 millones. Sumando AppleBot y PerplexityBot salen casi 1300 millones de peticiones, algo más del 28 % del volumen de Googlebot.

La documentación de Google dice lo mismo desde el otro lado. Googlebot procesa las aplicaciones JavaScript en tres fases (rastreo, renderizado e indexación) y renderiza con un Chromium siempre actualizado, pero las páginas pueden pasar un tiempo en la cola de renderizado. Aun así, recomiendan el renderizado en servidor o el prerenderizado, entre otras cosas porque "not all bots can run JavaScript" (no todos los bots pueden ejecutar JavaScript).

Ver tu página como la ven ellos

No hace falta ninguna herramienta especial para ver tu página como la ven estos rastreadores. Uno que no ejecuta JavaScript recibe los mismos bytes que curl:

# El HTML tal como llega, antes de que se ejecute ningún script
curl -s https://richi.codes/es/article/2026-11-05-los-rastreadores-de-ia-no-ejecutan-tu-javascript | grep -o '<h1[^>]*>[^<]*</h1>'

Si tu titular, tu texto o tus datos estructurados no aparecen en esa salida, un rastreador de IA tampoco los va a encontrar.

La demo hace lo mismo en el navegador con DOMParser. MDN lo explica sin rodeos: al analizar con text/html, los elementos <script> se marcan como no ejecutables y los manejadores de eventos no se disparan, de modo que el documento resultante es "essentially inert" (prácticamente inerte). Es un buen sustituto de un rastreador que solo lee HTML:

function readAsBot(html) {
  const doc = new DOMParser().parseFromString(html, 'text/html'); // los scripts nunca se ejecutan
  const types = [...doc.querySelectorAll('script[type="application/ld+json"]')].map((s) => {
    try { return JSON.parse(s.textContent)['@type']; } catch { return '?'; }
  });
  doc.querySelectorAll('script, style, template').forEach((n) => n.remove());
  return {
    title: doc.title.trim(),
    description: doc.querySelector('meta[name="description"]')?.content || '',
    h1: doc.querySelector('h1')?.textContent.trim() || '',
    jsonLd: types,
    links: doc.querySelectorAll('a[href]').length,
    text: (doc.body?.textContent || '').replace(/\s+/g, ' ').trim()
  };
}

Hay dos detalles importantes. El JSON-LD hay que leerlo antes de quitar los <script>, porque los datos estructurados viven dentro de una etiqueta script aunque sean datos y no código. Y el panel del navegador saca sus cifras de un iframe anidado con sandbox que ejecuta ese mismo HTML de verdad y devuelve document.body.innerText con postMessage.

Prueba los tres ejemplos:

  • SPA renderizada en cliente: un <div id="root"> vacío y un script. El navegador muestra una ficha de producto completa. El rastreador recibe un título genérico, ni descripción, ni <h1>, ni JSON-LD, ni enlaces: solo el mensaje del <noscript>.
  • Renderizada en servidor: la misma página con todo en el HTML. Los dos lectores coinciden.
  • SSR + widget en JS: el contenido principal viene del servidor y solo la caja de opiniones la rellena un script. El rastreador pierde justo esa caja, que no es grave si las opiniones no son lo que quieres que te citen.

También puedes abrir el editor y pegar el código fuente de tu página (el de ver código fuente, no el del inspector, que muestra la página después de ejecutar el JavaScript).

Detalles a tener en cuenta

  • Los datos estructurados inyectados con JavaScript no cuentan para estos bots. Un gestor de etiquetas que añade JSON-LD en el cliente le da algo a Googlebot y nada a los demás. Vercel indica que los datos presentes en el HTML inicial, JSON incluido, sí pueden aprovecharse.
  • La hidratación no es un problema. Renderizar en servidor y que luego el JavaScript tome el control es justo el caso "renderizada en servidor": el contenido ya está en el HTML. Las notas de esta web se generan con getStaticProps de Next.js, y el curl de arriba devuelve el titular directamente del HTML.
  • Las metaetiquetas puestas en el cliente tampoco ayudan. Un document.title cambiado en un useEffect es el título "App" que ve el rastreador en el primer ejemplo.
  • DOMParser es una aproximación. Muestra lo que hay en el HTML; no sabe nada de reglas de robots.txt, redirecciones ni de cómo procesa luego el texto cada empresa.

Qué vigilar

Las cifras de Vercel son de finales de 2024 y los rastreadores cambian. Si alguna empresa de IA empieza a renderizar JavaScript, lo normal es que lo diga en la documentación de su rastreador, así que ahí es donde hay que mirar. Mientras tanto, la regla segura es la que dan tanto Google como Vercel: pon el contenido principal, los metadatos y la navegación en el HTML que envía tu servidor, y deja el renderizado en cliente para los extras.

Fuentes