# Los rastreadores de IA no ejecutan JavaScript

> GPTBot, ClaudeBot y PerplexityBot leen el HTML en bruto y nunca ejecutan scripts. Cómo comprobar si tu catálogo es visible y arreglarlo sin rehacer la web.

**Language:** es  
**Published:** 2026-08-09  
**Category:** Technical · **Tags:** AI crawlers, JavaScript rendering, server-side rendering, GPTBot, structured data, product data  
**Canonical:** https://partsgraph.ai/es/blog/ai-crawlers-do-not-run-javascript

## En resumen

**¿Ejecutan JavaScript los rastreadores de IA como GPTBot y ClaudeBot?**

No. El análisis conjunto de Vercel y MERJ, sobre una red que atendió 569 millones de peticiones de GPTBot en un solo mes, no encontró indicio alguno de que GPTBot, ClaudeBot, PerplexityBot o el rastreador de Meta ejecuten JavaScript: analizan el HTML en bruto que devuelve el servidor y descartan los scripts. Google es la excepción, porque Gemini hereda la infraestructura de renderizado de Googlebot. Si tu catálogo paramétrico compone los datos de producto en el lado del cliente, un asistente de IA ve una carcasa vacía donde deberían estar tus especificaciones.

---

## La respuesta breve

Los rastreadores de IA no ejecutan JavaScript. Cuando GPTBot, ClaudeBot o PerplexityBot solicita una página, realiza un simple GET por HTTP, toma los bytes que devuelve el servidor y los analiza como texto. No hay navegador, ni construcción del DOM, ni hidratación, ni espera a que se resuelvan las peticiones XHR. El análisis conjunto de Vercel y MERJ, sobre una red que atendió 569 millones de peticiones de GPTBot y 370 millones de ClaudeBot en un solo mes, no encontró indicios de ejecución de JavaScript por parte de ningún rastreador de IA relevante. Los rastreadores sí descargan a veces archivos de script —GPTBot solicitó JavaScript en el 11,50 % de sus peticiones y ClaudeBot en el 23,84 %— y luego nunca los ejecutan.

> **Figure.** What a browser receives versus what an AI crawler receives for the same product page.

Google es la excepción, y es la razón por la que tantos equipos no han detectado el problema. Googlebot opera un servicio de renderizado con Chromium headless, y Gemini se apoya en esa infraestructura. Así que un catálogo paramétrico renderizado en el cliente puede posicionar perfectamente en Google Search y, al mismo tiempo, estar completamente ausente de ChatGPT, Claude y Perplexity. Ya no son la misma audiencia: la investigación de compradores de Forrester de 2026 concluyó que **el 94 % de los compradores profesionales ya usa IA durante su proceso de compra**, y Adobe midió un crecimiento del tráfico procedente de IA hacia los sitios de retail del **393 % interanual en el primer trimestre de 2026**.

## Qué recibe realmente GPTBot

Conviene ser precisos sobre los dos documentos implicados, porque la mayoría de los equipos de catálogo solo miran el segundo.

El **HTML en bruto** es el flujo de bytes que el servidor de origen escribe en la respuesta. Es lo que imprime `curl`, lo que muestra `view-source:` y lo que analiza un cliente HTTP de solo texto.

El **DOM renderizado** es lo que existe en memoria después de que el navegador haya analizado ese HTML, descargado y ejecutado todos los scripts, resuelto todas las llamadas `fetch()` y aplicado todas las mutaciones. Es lo que muestra el panel Elements de las herramientas de desarrollo del navegador.

En un catálogo SPA moderno, estos dos documentos no tienen casi nada en común. El HTML en bruto es una carcasa: un `<div id="root">`, un manifiesto de precarga y cien kilobytes de referencias a bundles. Todas las cadenas con significado —número de referencia, encapsulado, tolerancia, rango de temperatura de funcionamiento, estado RoHS, estado del ciclo de vida, stock, escalado de precios— llegan después, desde una llamada a la API que el rastreador nunca hará.

> Un rastreador de IA ve tu HTML en bruto y nada más. Si una especificación no está en los bytes que devuelve el servidor, esa especificación no existe para el modelo.

## Qué clientes renderizan y cuáles no

| Cliente | Operador | Ejecuta JavaScript | Para qué sirve |
|---|---|---|---|
| GPTBot | OpenAI | No | Recopilación de datos de entrenamiento |
| OAI-SearchBot | OpenAI | No | Indexación de búsqueda para ChatGPT |
| ChatGPT-User | OpenAI | No | Consulta en directo para la pregunta de un usuario |
| ClaudeBot | Anthropic | No | Recopilación de datos de entrenamiento |
| PerplexityBot | Perplexity | No | Indexación de búsqueda |
| Meta-ExternalAgent | Meta | No | Entrenamiento e indexación |
| Bytespider | ByteDance | No | Recopilación de datos de entrenamiento |
| Googlebot | Google | **Sí**, Chromium headless | Búsqueda y grounding para Gemini |
| Applebot | Apple | **Sí**, puede renderizar en un navegador | Siri, Spotlight, Safari |

Cada «No» de esa tabla es comportamiento medido en el conjunto de datos de Vercel y MERJ, no una inferencia. Cada «Sí» está documentado por el operador: Google publica su canal de renderizado y la propia documentación de rastreo de Apple indica que Applebot «puede renderizar el contenido de tu sitio web dentro de un navegador». Los agentes más recientes de Anthropic, Claude-SearchBot y Claude-User, son posteriores al estudio y no se midieron por separado; desde entonces ningún operador ha anunciado un canal de renderizado para ellos.

La consecuencia práctica es asimétrica de la peor manera. Renderizar es la parte cara del rastreo, y los operadores que se la saltaron son precisamente los que hoy se interponen entre tu producto y tu comprador.

## Por qué los catálogos paramétricos fallan más que ningún otro contenido

El análisis de Adobe de abril de 2026 puntuó la legibilidad por máquinas de las páginas de retail y situó las fichas de producto en el **66 %, la más baja de todos los tipos de página**, por debajo de las páginas de inicio (75 %), las de categoría (74 %) e incluso las de preguntas frecuentes (80 %). Ese orden no es casual. Las páginas que contienen los datos más estructurados, más valiosos y más determinantes para la decisión son las que se construyen con más JavaScript.

Cinco patrones explican la mayor parte del daño:

1. **El estado de los filtros vive en el cliente.** Tu selector paramétrico es un componente de React que lee de un almacén local. No existe ninguna URL renderizada en el servidor para «0603, 100nF, X7R, 50V», así que no hay nada que un rastreador pueda descargar ni nada que pueda citar.
2. **La tabla de especificaciones es una respuesta de la API.** Se renderiza la carcasa de la página y luego una petición a `/api/product/attributes` rellena la tabla. El rastreador se queda en la carcasa.
3. **El precio y la disponibilidad son deliberadamente de cliente.** Razonable para la caché. Fatal para la visibilidad ante las máquinas, porque un modelo que no puede ver el stock no recomendará la referencia.
4. **Las pestañas y los acordeones difieren su contenido.** Las fichas técnicas, las notas de aplicación, los certificados de conformidad y los enlaces CAD suelen cargarse al hacer clic. Un rastreador nunca hace clic.
5. **El scroll infinito sustituye a la paginación.** Del producto 51 en adelante no hay ninguna URL rastreable.

Partsgraph auditó 984 dominios de distribuidores y fabricantes de todo el mundo —Norteamérica, Europa y Asia— en agosto de 2026. La puntuación mediana de visibilidad ante la IA fue de **50 sobre 100**, y **el 70 % de la muestra obtuvo una D o una F**. Aproximadamente la mitad no fue capaz de servir ni una sola página de catálogo legible a un cliente estándar que no fuera un navegador. La distribución de electrónica fue el segmento más débil, con una mediana de 34.

## ¿Cómo compruebo si los rastreadores de IA pueden leer mi catálogo?

Haz esta prueba contra tu propio origen. Probar el sitio de un competidor suplantando el user-agent de un rastreador produce falsos negativos, porque los gestores de bots corporativos verifican a los rastreadores por la IP de origen, no por la cadena del user-agent: una cabecera suplantada desde una dirección no reconocida recibe un desafío diga lo que diga el robots.txt.

1. **Descarga el HTML en bruto.** Elige tu página de producto más valiosa.

```
curl -sS --compressed -o page.html -w "status=%{http_code} bytes=%{size_download}" "https://example.com/products/part-number"
```

2. **Busca el número de referencia en los bytes.** No en el navegador: en el archivo.

```
grep -c "MPN-12345" page.html
```

Si esto devuelve `0`, ningún rastreador de IA puede identificar que la página trata sobre esa referencia.

3. **Busca tres valores paramétricos** por los que esperarías que filtrara un ingeniero.

```
grep -oiE "operating temperature|tolerance|package|rohs|lifecycle" page.html | sort | uniq -c
```

4. **Cuenta los bloques de datos estructurados.**

```
grep -c "application/ld+json" page.html
```

Cero significa que no hay ningún registro de producto legible por máquinas. Uno o más significa que deberías extraerlo y validar que realmente incluye `sku`, `mpn`, `gtin`, `brand`, `offers` y tus entradas `additionalProperty` clave, y no solo una ruta de migas de pan.

5. **Compáralo con la página renderizada.** Abre la misma URL en un navegador con JavaScript desactivado. Lo que sobrevive es, más o menos, lo que recibe un rastreador. La diferencia entre eso y la página normal es tu invisibilidad.

6. **Comprueba el recorrido completo, no una sola página.** Repítelo con una página de categoría, una de resultados de búsqueda, un enlace a una ficha técnica y una descarga CAD. Un rastreador que puede leer una página de producto pero no llegar a ella desde un listado de categoría rastreable sigue atascado.

Una página que pasa la prueba mostrará el número de referencia decenas de veces, las etiquetas paramétricas presentes como texto y al menos un bloque JSON-LD. Como referencia, una página de producto bien construida suele devolver entre 60 y 200 KB de HTML con la tabla de especificaciones completa; una carcasa SPA rota devuelve entre 4 y 15 KB que no contienen más que referencias a bundles.

## ¿Cómo se arregla sin reescribir el sitio?

No hace falta cambiar de plataforma. Hace falta que los bytes del origen contengan los datos. Hay cuatro vías, y no son excluyentes entre sí.

| Enfoque | Esfuerzo | Qué resuelve | Riesgo principal |
|---|---|---|---|
| Renderizado en servidor de las rutas de producto | Alto | Todo, de forma permanente | Coste del cambio de plataforma y riesgo de regresión |
| Prerenderizado / renderizado dinámico | Medio | El contenido del HTML en bruto | Caducidad de la caché en precio y stock |
| JSON-LD renderizado en servidor | Bajo | Los datos legibles por máquinas | Se ignora si el cuerpo del texto sigue vacío |
| Espejo en markdown y capa superpuesta | Bajo | Contenido, documentación y acceso de agentes | Exige mantener los enlaces canónicos |

**El renderizado en servidor** de las rutas de producto y categoría es la respuesta duradera. Si ya estás en un framework que lo admite, mover las rutas del catálogo a componentes de servidor o a generación estática con revalidación incremental suele ser cuestión de semanas, no de trimestres, porque la capa de datos ya existe: simplemente se está invocando desde el lado equivocado.

**El prerenderizado** es el parche honesto. Renderiza cada página de producto una vez, en el build o de forma programada, cachea el HTML en el edge y sírvelo a todo el mundo. Sirve el mismo documento a personas y a máquinas; hacer cloaking sirviendo una página distinta a los rastreadores es un riesgo de política y, en la práctica, contraproducente, porque el modelo citará la versión que haya recibido.

**El JSON-LD renderizado en servidor** es el cambio de menor esfuerzo y mayor impacto. Ponlo en el HTML que emite el servidor, no en un gestor de etiquetas.

```
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "sku": "MPN-12345",
  "mpn": "MPN-12345",
  "name": "100 nF 50 V X7R 0603 ceramic capacitor",
  "brand": { "@type": "Brand", "name": "Example Components" },
  "additionalProperty": [
    { "@type": "PropertyValue", "name": "Capacitance", "value": "100 nF" },
    { "@type": "PropertyValue", "name": "Voltage rating", "value": "50 V" },
    { "@type": "PropertyValue", "name": "Dielectric", "value": "X7R" },
    { "@type": "PropertyValue", "name": "Operating temperature", "value": "-55 to +125 C" }
  ],
  "offers": {
    "@type": "Offer",
    "priceCurrency": "USD",
    "price": "0.042",
    "availability": "https://schema.org/InStock"
  }
}
</script>
```

**Un espejo en markdown** es la forma más barata de hacer que una página sea inequívoca. Sirve un equivalente en texto plano de cada página de producto en una URL estable y enlazada, con la tabla de especificaciones renderizada como tabla markdown. Los clientes de solo texto la analizan a la perfección, generarla desde la misma fuente de datos no cuesta casi nada y te da una superficie canónica para máquinas que no se desvía cuando se rediseña el front end. Conviene señalar que `llms.txt` no es esto: a fecha de 2026 ningún operador de IA relevante se ha comprometido a leerlo, y el equipo de Search Relations de Google se ha negado explícitamente a respaldarlo. Los espejos funcionan porque son páginas enlazadas normales.

**Una capa superpuesta** coloca todo lo anterior delante del sitio existente en lugar de dentro de él. Un servicio sidecar o un worker en el edge sirve páginas renderizadas en servidor y legibles por agentes, JSON-LD, espejos en markdown y un endpoint MCP alojado en tu propio dominio, leyendo de tu PIM actual. Nada cambia en el sitio de cara al cliente. Este es el enfoque de Partsgraph, y es también lo que un número creciente de fabricantes está construyendo internamente: Microchip publicó en noviembre de 2025 un servidor MCP público y gratuito para sus datos de producto, y TrustedParts, de ECIA, lanzó en junio de 2026 un servicio de agente de IA para inventario.

## Qué hacer primero, y en qué orden

1. Ejecuta la prueba de seis pasos anterior en tus diez productos principales y anota los recuentos de bytes.
2. Renderiza el JSON-LD en el servidor en las páginas de producto. Es el cambio más pequeño con el mayor efecto medible.
3. Haz que todas las especificaciones y todos los enlaces a fichas técnicas y a archivos CAD estén presentes en el HTML inicial, aunque la versión interactiva siga siendo de cliente.
4. Dale a cada combinación de filtros paramétricos que importe una URL real, rastreable y renderizada en el servidor.
5. Publica un espejo en markdown por producto y enlázalo desde la página.
6. Solo entonces preocúpate por el posicionamiento, los prompts y la cuota de respuestas. La recuperación precede a la cita; no hay nada que optimizar hasta que el contenido exista en el cuerpo de la respuesta.

El mecanismo no es sutil ni está en discusión. Un modelo solo puede citar lo que ha recibido, y lo que ha recibido es tu HTML en bruto. Todo lo demás es un paso de renderizado que nunca ocurrió.

*¿Quieres saber en qué situación está tu catálogo? El evaluador gratuito de visibilidad ante la IA de Partsgraph ejecuta las comprobaciones de este artículo contra tu propio dominio en [/audit](/audit).*

## Preguntas frecuentes

### ¿GPTBot renderiza JavaScript?

No. Vercel y MERJ comprobaron que GPTBot descarga archivos JavaScript en torno al 11,5 % de sus peticiones, pero nunca los ejecuta. Extrae el contenido del HTML que el servidor devuelve en la respuesta inicial. Todo lo que tu bundle inyecta en el DOM después de la carga le resulta invisible.

### ¿Por qué Google ve mi aplicación de página única y ChatGPT no?

Googlebot opera un servicio de renderizado con Chromium headless, de modo que ejecuta tu JavaScript e indexa el DOM resultante. Gemini se apoya en esa misma infraestructura. OpenAI, Anthropic y Perplexity operan clientes HTTP sencillos, sin motor de navegador, así que una misma página puede posicionar bien en Google y estar completamente ausente de una respuesta de IA.

### ¿Lo soluciona el prerenderizado o el renderizado dinámico?

Puede hacerlo, y es un parche legítimo para un catálogo que no puedes migrar de plataforma con rapidez. Los riesgos son la caducidad de la caché en precio y stock, y servir a los rastreadores una página materialmente distinta de la que reciben los usuarios. Mantén el HTML prerenderizado semánticamente idéntico a la página renderizada y fija una ventana de revalidación corta en los campos volátiles.

### ¿Basta con el JSON-LD por sí solo?

Solo si está en el HTML que devuelve el servidor. El JSON-LD que inyecta un gestor de etiquetas o un script de cliente llega cuando el rastreador ya ha terminado. Renderiza la etiqueta script en el servidor y trata el JSON-LD como un complemento del texto legible del cuerpo, no como su sustituto.

### ¿Cómo lo compruebo yo mismo en menos de un minuto?

Ejecuta curl contra la URL de un producto con la compresión activada, guarda la respuesta y busca con grep, en los bytes en bruto, tu número de referencia y dos o tres valores paramétricos. Si no aparecen en el archivo pero sí se ven en el navegador, los está construyendo JavaScript y ningún rastreador de IA los verá jamás.

### ¿Respetan mi sitemap los rastreadores de IA?

Lo usan de forma irregular. Vercel y MERJ midieron que el 34,82 % de las peticiones de ChatGPT terminaban en errores 404, frente al 8,22 % de Googlebot, lo que apunta a un descubrimiento de enlaces a partir de fuentes desactualizadas más que a un rastreo disciplinado del sitemap. Un sitemap preciso, con valores lastmod correctos, ayuda, pero no compensará las páginas que no devuelven contenido.

### ¿Esto se aplica también a las descargas de CAD, BIM y fichas técnicas?

Sí, y de forma más severa. Si un enlace de descarga lo genera JavaScript, está detrás de un intersticial o se resuelve mediante una URL firmada de vida corta, un cliente que no sea un navegador no puede seguirlo en absoluto. Es como si el documento no existiera.

## Fuentes

1. [Vercel and MERJ, The rise of the AI crawler, December 2024](https://vercel.com/blog/the-rise-of-the-ai-crawler)
2. [Adobe Digital Insights, AI traffic and retail machine-readability, April 2026](https://business.adobe.com/blog/ai-traffic-surge-retail-sites-not-machine-readable)
3. [eCommerceNews, Adobe machine-readability scores by page type, April 2026](https://e-commerce.news/story/adobe-says-ai-retail-traffic-surges-as-readability-lags)
4. [TechCrunch, AI traffic to US retailers rose 393% in Q1, April 2026](https://techcrunch.com/2026/04/16/ai-traffic-to-us-retailers-rose-393-in-q1-and-its-boosting-their-revenue-too/)
5. [Forrester, The State Of Business Buying, 2026 (January 2026)](https://www.forrester.com/blogs/state-of-business-buying-2026/)
6. [Google Search Central, Google crawlers and user agents](https://developers.google.com/search/docs/crawling-indexing/google-common-crawlers)
7. [OpenAI, Overview of OpenAI crawlers](https://developers.openai.com/api/docs/bots)
8. [Anthropic, Does Anthropic crawl data from the web?](https://support.claude.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler)
9. [Apple Support, About Applebot](https://support.apple.com/en-us/119829)
10. [Microchip Technology, MCP Server press release, November 2025](https://ir.microchip.com/news-events/press-releases/detail/1344/microchip-technology-unveils-model-context-protocol-mcp-server-to-power-ai-driven-product-data-access)
11. [ECIA, TrustedParts.com launches Inventory AI Agent Service, June 2026](https://www.ecianow.org/2026/06/11/trustedparts-com-launches-inventory-ai-agent-service/)
12. [Search Engine Journal, Google says llms.txt is speculative for now](https://www.searchenginejournal.com/google-says-llms-txt-is-purely-speculative-for-now/577576/)

## Other languages

- English: https://partsgraph.ai/blog/ai-crawlers-do-not-run-javascript/md
- Deutsch: https://partsgraph.ai/de/blog/ai-crawlers-do-not-run-javascript/md
- Français: https://partsgraph.ai/fr/blog/ai-crawlers-do-not-run-javascript/md
- Italiano: https://partsgraph.ai/it/blog/ai-crawlers-do-not-run-javascript/md
- Nederlands: https://partsgraph.ai/nl/blog/ai-crawlers-do-not-run-javascript/md
- Polski: https://partsgraph.ai/pl/blog/ai-crawlers-do-not-run-javascript/md
- Português: https://partsgraph.ai/pt/blog/ai-crawlers-do-not-run-javascript/md
- Svenska: https://partsgraph.ai/sv/blog/ai-crawlers-do-not-run-javascript/md
- Türkçe: https://partsgraph.ai/tr/blog/ai-crawlers-do-not-run-javascript/md
- 日本語: https://partsgraph.ai/ja/blog/ai-crawlers-do-not-run-javascript/md
- 한국어: https://partsgraph.ai/ko/blog/ai-crawlers-do-not-run-javascript/md
- 简体中文: https://partsgraph.ai/zh/blog/ai-crawlers-do-not-run-javascript/md

---

Partsgraph — the agent-ready parts data layer. Free AI-visibility grader: https://partsgraph.ai/es/audit
