Auditoría gratis 48 h
Técnica13 min de lectura

Renderizado JavaScript y motores generativos: lo que los robots de IA ven realmente.

Una página puede ser perfecta en pantalla, estar bien posicionada en Google y estar vacía para ChatGPT, Claude o Perplexity. La diferencia está en una etapa que sus robots no dan: la ejecución del JavaScript. Este artículo muestra cómo saber en diez minutos qué recibe un robot de IA de sus páginas, qué patrones técnicos vacían una página sin que nadie se dé cuenta y qué soluciones elegir según su pila tecnológica y su presupuesto.

Índice del artículo

Un robot de IA lee el HTML inicial, no la página renderizada

Los robots de búsqueda de IA leen el documento HTML que devuelve su servidor y se detienen ahí. Que sepamos, ni OpenAI, ni Anthropic, ni Perplexity documentan la ejecución de JavaScript por parte de sus agentes, y las observaciones disponibles apuntan en la misma dirección: un análisis publicado a finales de 2024 por Vercel, a partir de los logs de su red, concluía que los robots de estos tres proveedores descargaban a veces los archivos de script sin ejecutarlos. Nuestras propias pruebas, página por página, no contradicen esta constatación. Puede cambiar; hasta que se demuestre lo contrario, la regla de trabajo es sencilla: lo que no está en el HTML inicial no existe para un motor generativo.

Google es la excepción. Googlebot dispone de un servicio de renderizado basado en una versión reciente de Chromium, que ejecuta el JavaScript en una segunda pasada, después del rastreo, con un retraso variable. Bingbot también renderiza las páginas. Esto explica el caso típico con el que nos encontramos: una aplicación de página única bien presente en el índice de Google, y en los AI Overviews que se apoyan en él, pero ausente de ChatGPT, de Claude y de Perplexity.

Esquema 1El recorrido de una página, de la petición al documento final. Los robots de búsqueda de IA se detienen en la segunda etapa.
  1. 01PeticiónEl cliente solicita la URL. El servidor, o la CDN, responde.
  2. 02HTML inicialEl documento tal como llega. Aquí se detienen OAI-SearchBot, Claude-SearchBot y PerplexityBot: todo lo que sigue les resulta invisible.
  3. 03RecursosEl navegador descarga hojas de estilo, scripts y datos de API.
  4. 04EjecuciónEl JavaScript se ejecuta, llama a las API, construye o completa el documento.
  5. 05Documento finalLo que ve el usuario, y lo que Googlebot indexa tras su pasada de renderizado.

La consecuencia va más allá de las aplicaciones de página única. Muchos sitios clásicos, construidos sobre un CMS que devuelve un HTML completo, inyectan después en JavaScript precisamente los elementos que dan valor a una fuente: los precios, las reseñas, las respuestas de una FAQ en acordeón, los datos estructurados. La página parece completa y falta la parte citable.

El test en diez minutos

El test consiste en recuperar la página como lo hace un robot de búsqueda de IA y comprobar después que el contenido que debe citarse está ahí. No requiere ninguna herramienta de pago ni acceso al servidor, solo una línea de comandos. El primer comando guarda el HTML inicial presentándose como OAI-SearchBot; el segundo busca una frase que usted sabe que aparece en pantalla; el tercero da un orden de magnitud del texto recibido, para compararlo con el texto visible.

# 1. El HTML inicial, tal como lo recibe un robot de búsqueda de IA
curl -s -A "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; OAI-SearchBot/1.0; +https://openai.com/searchbot" \
  https://www.exemple.fr/guide/delais-de-livraison/ -o initial.html

# 2. ¿Figura en él una frase visible en pantalla? (0 = ausente)
grep -c "livraison sous 48 heures" initial.html

# 3. Orden de magnitud del texto recibido, sin etiquetas
sed 's/<[^>]*>//g' initial.html | tr -s ' \n' | wc -w

# 4. ¿Están los datos estructurados en el documento?
grep -c 'application/ld+json' initial.html

La misma comprobación puede hacerse sin línea de comandos: en el navegador, «ver código fuente» muestra el HTML inicial, mientras que el inspector muestra el documento tras la ejecución. Desactivar el JavaScript en las herramientas de desarrollo y recargar la página ofrece una vista cercana a la de un robot de IA. En cambio, la herramienta de inspección de URL de Search Console muestra la página renderizada por Googlebot; tranquiliza erróneamente respecto a los demás motores.

Lo que se comprueba, por orden: el texto principal, los títulos de sección, las respuestas de las FAQ, los precios y la disponibilidad, las tablas y listas, los datos estructurados. Para cada elemento, la respuesta es binaria: presente en initial.html o ausente. En una muestra de veinte páginas representativas, el resultado señala por lo general una o dos plantillas defectuosas, rara vez todo el sitio.

Los ocho patrones que vacían una página

Las causas de ausencia se repiten de un sitio a otro. No todas están ligadas a la elección de un framework: varias afectan a sitios construidos sobre CMS clásicos, por acumulación de módulos y de scripts de terceros.

PatrónLo que muestra el HTML inicialLo que le falta al robot de IA
Aplicación de página única sin renderizado en el servidorUn contenedor vacío y scriptsTodo el contenido
Cuerpo de página cargado mediante llamada a una APITítulo, menú, pie de páginaEl texto principal
Precios, stock y reseñas cargados a posterioriLa ficha de producto sin sus cifrasLos elementos verificables
Pestañas y acordeones rellenados en JavaScriptLos enunciados de las preguntasLas respuestas
«Leer más» y scroll infinitoLos primeros párrafosEl final del artículo, el resto de las listas
Widgets de reseñas y valoraciones de tercerosUn marco o un scriptValoraciones, volumen, contenido de las reseñas
Datos estructurados inyectados por un gestor de etiquetasNingún bloque JSON-LDLa identidad de la entidad y del autor
Tests A/B y personalización en el clienteLa versión originalEl título o el texto realmente mostrados

Tabla: desplácese horizontalmente.

Esquema 2Una ficha de producto típica, zona por zona: lo que llega en el HTML inicial y lo que se inyecta después. Las zonas inyectadas son las que un motor querría citar.
Presente
Título, migas de pan, menú, descripción corta redactada en el CMS
Inyectado
Precio, disponibilidad, plazo de entrega: cargados mediante una llamada a la API tras la visualización. Ausentes para un robot de IA.
Inyectado
Características técnicas en una pestaña: la etiqueta «Características» está presente, la tabla se construye al hacer clic.
Inyectado
Reseñas de clientes: widget de terceros, valoración y volumen cargados por script. Ninguna señal de corroboración legible.
Inyectado
Bloque JSON-LD Product añadido por el gestor de etiquetas: Google lo lee tras el renderizado, los demás nunca.

El caso de los datos estructurados merece insistencia. Muchos equipos han adquirido la costumbre de añadir el JSON-LD mediante un gestor de etiquetas, porque es rápido y Google lo lee tras el renderizado. Para un robot que no ejecuta nada, ese bloque no existe: la entidad, el autor y la FAQ marcada desaparecen de golpe. El remedio es sencillo, y suele ser la primera corrección que pedimos: escribir el JSON-LD en la plantilla, en el servidor.

Por qué Google se las arregla, y por qué eso no le protege

Google renderiza las páginas porque tiene los medios y la antigüedad: su servicio de renderizado ejecuta el JavaScript a escala de la web, en una cola distinta de la del rastreo. Aun así, el renderizado no es gratuito. Se produce con retraso, falla cuando un recurso está bloqueado o es demasiado lento, y consume un presupuesto que Google asigna según la importancia que atribuye al sitio. Una página renderizada en el cliente se indexa, por tanto, más tarde, y a veces de forma incompleta, incluso en Google.

En los demás motores, la cuestión ni se plantea: sin renderizado, la página se lee tal cual. Y las cuatro condiciones descritas en nuestro método para ser citado se encadenan; una página inaccesible nunca se evalúa por su calidad. Un sitio puede así cumplir la primera condición para Google y fallarla para todos los demás, con el mismo código y el mismo robots.txt. Es uno de los casos en los que la cuota de citación, medida motor por motor, revela un problema que el posicionamiento clásico no muestra: buena presencia en AI Overviews, ausencia en el resto.

Añadamos un matiz sobre los agentes de consulta a petición del usuario. ChatGPT-User, Claude-User y Perplexity-User visitan una página cuando un usuario la solicita; nada indica que rendericen el JavaScript más que los robots de índice. El enlace que usted pega en una conversación para que el modelo «lea» su página sufre la misma limitación.

Las soluciones, de la más ligera a la más estructural

El principio común a todas las soluciones es el mismo: entregar el contenido citable en el HTML inicial y reservar el JavaScript para la interactividad. La forma de conseguirlo depende de la pila tecnológica y de lo que se pueda cambiar.

Esquema 3Cuatro formas de entregar el contenido en el HTML inicial, del parche puntual a la arquitectura, con el límite de cada una.
  1. 1Correcciones puntualesJSON-LD en la plantilla, respuestas de FAQ escritas en el HTML, precios renderizados en el servidor. Una semana, sin cambiar de arquitectura.Límite: trata los síntomas, no un sitio enteramente en el cliente.
  2. 2Prerrenderizado estáticoLas páginas de contenido se generan en la publicación, en HTML completo, y se sirven tal cual. Ideal para blogs, guías y documentación.Límite: inadecuado para contenidos que cambian con cada petición.
  3. 3Renderizado en el servidorEl framework produce el HTML bajo demanda y después hidrata la interactividad. Conviene a los catálogos y a las páginas personalizadas.Límite: coste de servidor, caché por diseñar.
  4. 4Islas de interactividadEl contenido es estático; solo los componentes interactivos incorporan JavaScript. La mejor relación entre legibilidad y rendimiento.Límite: exige rehacer las plantillas.

Los frameworks habituales ofrecen estos modos de forma nativa: Next.js, Nuxt, SvelteKit y Angular disponen de renderizado en el servidor y de generación estática; Astro está construido en torno a las islas. La migración no obliga a cambiar de framework; obliga a decidir, plantilla por plantilla, qué modo de renderizado se aplica, y a trasladar al servidor las llamadas de datos que alimentan el contenido citable.

Queda el renderizado dinámico: servir a los robots una versión prerrenderizada por un navegador sin interfaz, y a los usuarios la aplicación tal cual. Google lo describe como una solución provisional, aceptable mientras el contenido servido sea idéntico. Tiene dos debilidades propias de los motores generativos. La lista de agentes que hay que reconocer debe actualizarse con cada nuevo agente, y el renderizado sigue a las páginas con retraso. Sigue siendo una opción razonable para ganar tiempo en una aplicación que no se puede rehacer a corto plazo.

Priorizar: qué páginas primero

No todo el sitio necesita ser legible para un motor generativo. Una aplicación de negocio, un área de cliente o un configurador nunca serán citados, y no tienen por qué serlo. Las páginas que hay que tratar son las que responden a las preguntas de sus compradores: guías, comparativas, FAQ, fichas de producto con sus características, páginas de tarifas, páginas locales. El panel de prompts que sirve para medir la cuota de citación da la lista: cada pregunta designa la página que debería responderla, y esa página pasa el test.

Esquema 4Un plan de recuperación de la legibilidad en diez semanas, del diagnóstico a las plantillas, con la medición que valida cada fase.
  1. Semana 1Diagnóstico
    • Test del HTML inicial en veinte páginas extraídas del panel de prompts
    • Clasificación por plantilla y por patrón de ausencia
    • Comprobación de que el bloqueo no está en otra parte: robots.txt, cortafuegos
  2. Semanas 2 a 4Correcciones puntuales
    • JSON-LD en la plantilla, FAQ y precios renderizados en el servidor
    • Prerrenderizado de las diez páginas prioritarias
    • Primera medición: paso de los robots en los logs
  3. Semanas 5 a 10Plantillas
    • Renderizado en el servidor o islas para las plantillas de contenido
    • Validación: el test del HTML inicial en cada plantilla
    • Lectura de la cuota de citación, motor por motor

La medición valida cada fase. Tras las correcciones, los logs deben mostrar a los robots de búsqueda de IA volviendo a las páginas corregidas con respuestas 200 de tamaño normal; unas semanas después, la cuota de citación en las preguntas correspondientes debe moverse, motor por motor. Si los logs no muestran ningún paso, el problema no es el renderizado sino el acceso, y hay que mirar del lado del robots.txt o de una regla del cortafuegos, lo que cubre nuestro artículo sobre los bloqueos involuntarios.

Las trampas tras la migración

Pasar al renderizado en el servidor no garantiza nada mientras no se haya validado con el test del HTML inicial. Los errores siguientes se repiten en nuestras auditorías de sitios migrados recientemente.

  • Una plantilla renderizada en el servidor cuyo componente principal sigue cargando su texto mediante una llamada a la API al montarse: el cascarón está completo, el cuerpo llega después.
  • Bloques «esqueleto» de carga servidos en el HTML inicial en lugar del contenido, y sustituidos después en la ejecución.
  • Una hidratación que sustituye el contenido renderizado por una versión distinta, y un HTML inicial que ya no se corresponde con lo que ve el usuario.
  • Una caché de CDN que sigue sirviendo el antiguo cascarón vacío a las peticiones sin cabeceras de navegador.
  • Un renderizado dinámico cuya lista de agentes ignora OAI-SearchBot, Claude-SearchBot o PerplexityBot, más recientes que la lista.
  • Un desafío JavaScript impuesto por el cortafuegos a las peticiones no humanas: un robot que no ejecuta nada nunca lo superará, y recibe una página de desafío en lugar del contenido.
  • Un tiempo de respuesta del servidor degradado por el renderizado, que lleva a los robots a abandonar las páginas lentas.
Punto de atención

El renderizado en el servidor no exime de la política de acceso. Una página perfectamente legible sigue siendo invisible si el robots.txt la cierra a los robots de búsqueda de IA; la política por agente y por ruta es el objeto de nuestro artículo sobre la estrategia robots.txt en dos niveles. Las dos condiciones se verifican juntas, en las mismas páginas.

Qué recordar

Lo esencial
  • Que sepamos, los robots de ChatGPT, Claude y Perplexity no ejecutan el JavaScript: lo que no está en el HTML inicial no existe para ellos.
  • Google y Bing renderizan las páginas, con retraso; una buena presencia en AI Overviews no dice nada de la legibilidad para los demás motores.
  • El test cabe en un comando: recuperar la página con la cadena de un robot de búsqueda de IA y comprobar que el contenido citable está ahí.
  • Los patrones más frecuentes no son las aplicaciones de página única, sino los precios, reseñas, FAQ y JSON-LD inyectados a posteriori en sitios clásicos.
  • Entregar el contenido en el HTML inicial y reservar el JavaScript para la interactividad: primero correcciones puntuales; después prerrenderizado, renderizado en el servidor o islas.

Preguntas frecuentes

¿Ejecutan JavaScript los robots de ChatGPT, Claude y Perplexity?

Que sepamos, no. Ninguno de estos proveedores documenta la ejecución de JavaScript por parte de sus agentes, y tanto las observaciones publicadas como nuestras propias pruebas muestran robots que leen el HTML devuelto por el servidor sin ejecutarlo. Este comportamiento puede evolucionar; la regla de trabajo sigue siendo entregar el contenido citable en el HTML inicial, lo que no perjudica a ningún motor, Google incluido.

Mi sitio en React está bien posicionado en Google: ¿es visible para los motores generativos?

No necesariamente. Googlebot renderiza el JavaScript en una segunda pasada e indexa el resultado, que alimenta también AI Overviews y AI Mode. Los robots de ChatGPT, Claude y Perplexity no disponen de esa pasada de renderizado: si el contenido se construye en el cliente, reciben un cascarón vacío. El test del HTML inicial, página por página, es la única forma de saberlo.

¿El prerrenderizado reservado a los robots es cloaking?

No, siempre que el contenido servido a los robots sea idéntico al que ven los usuarios tras la ejecución. Google describe este renderizado dinámico como una solución provisional aceptable, no como una arquitectura objetivo. Sus debilidades frente a los motores generativos son prácticas: la lista de agentes que hay que reconocer debe mantenerse con cada nuevo robot, y las instantáneas deben seguir las actualizaciones de las páginas.

¿Hay que reescribirlo todo en renderizado en el servidor?

No. Solo las páginas susceptibles de ser citadas deben entregar su contenido en el HTML inicial: guías, FAQ, fichas de producto, tarifas, páginas locales. Una aplicación de negocio o un área de cliente pueden seguir renderizándose en el cliente. En la mayoría de los casos, correcciones puntuales, como el JSON-LD escrito en la plantilla o las respuestas de FAQ renderizadas en el servidor, resuelven lo esencial antes de cualquier migración de plantillas.

¿Cómo comprobar rápidamente que una página es legible para un robot de IA?

Recupere la página con un cliente HTTP declarando la cadena de un robot de búsqueda de IA y busque después en el archivo obtenido una frase visible en pantalla, un precio, una respuesta de FAQ y el bloque JSON-LD. Cada elemento está presente o ausente. En el navegador, «ver código fuente» ofrece la misma vista; el inspector, en cambio, muestra el documento tras la ejecución y no debe servir de referencia.

Retrato de Kamel Malek
Kamel Malek
Fundador y director de la agencia

Profesional del posicionamiento desde 2001, Kamel Malek dirige SEO360 (Alicante, Valencia, Madrid, París). Ha publicado tres libros sobre la visibilidad en los motores generativos, entre ellos Generative Engine Optimization y Rétablir les faits.