Google puede ejecutar JavaScript, pero eso no garantiza la indexación de todas las páginas o secciones que dependen de él. El contenido importante debe poder recuperarse, aparecer en el resultado renderizado y presentar señales de indexación coherentes. Compara la respuesta del servidor, la página renderizada en el navegador y la inspección de Google antes de atribuir el problema al renderizado, al descubrimiento o a otra causa.
Para contenido público, el renderizado servidor o la generación estática suelen hacer la entrega más fiable porque reducen los pasos necesarios antes de que existan texto y enlaces. El renderizado cliente también puede funcionar. Lo importante es si esa ruta concreta funciona en las condiciones del rastreador, no si su framework tiene fama de ser adecuado para SEO.
Sigue la secuencia de rastreo, renderizado e indexación
Google describe tres fases principales para las páginas JavaScript: rastreo, renderizado e indexación. Durante el rastreo, Googlebot solicita una URL permitida y procesa la respuesta. Puede descubrir enlaces en el HTML inicial. El servicio de renderizado web de Google ejecuta JavaScript mediante Chromium sin interfaz gráfica, y el HTML resultante aporta contenido y más enlaces al procesamiento.
La cola de renderizado no tiene un plazo fijo publicado. Evita afirmar que el contenido JavaScript siempre aparece al instante o siempre espera un número concreto de días. Google indica que las páginas 200 aptas se ponen en cola, incluso sin JavaScript, salvo que una instrucción de indexación altere ese procesamiento. Los errores y recursos bloqueados pueden cambiar lo que ocurre después.
Renderizar e indexar son resultados distintos. Una página puede renderizarse correctamente y no ser seleccionada para el índice por duplicación, calidad u otros motivos. No encontrar una frase en búsqueda no demuestra que Google sea incapaz de ejecutar JavaScript. Determina qué muestra realmente la inspección.
Usa la guía de fundamentos de SEO técnico para comprobar acceso, canonical y estados antes de considerar cada exclusión un fallo de renderizado. La documentación de SEO JavaScript de Google es la referencia principal del modelo descrito aquí.
Compara tres versiones de una ruta importante
Elige una ruta donde la ausencia de contenido importe, como una ficha de producto o una guía sustancial. Anota el título esperado, texto propio, enlaces principales, canonical e instrucción de indexación. Después compara respuesta original y resultado renderizado, sin basarte solo en la apariencia.
Primero recupera HTML y cabeceras del servidor. Luego abre la URL directamente en una sesión nueva, inspecciona el DOM y revisa fallos de red y excepciones. Por último, inspecciona la URL en Search Console y realiza una prueba en directo cuando corresponda. El informe almacenado y la prueba actual responden a preguntas distintas y pueden reflejar versiones diferentes.
Cada evidencia tiene un uso concreto:
| Evidencia | Permite examinar | No demuestra |
|---|---|---|
| Respuesta HTTP y HTML inicial | Contenido inicial, cabeceras y estado | El DOM renderizado completo |
| DOM local y traza de red | Comportamiento de esa sesión | Qué indexó Google anteriormente |
| Información indexada de la inspección | Datos almacenados de rastreo e indexación | El comportamiento tras un nuevo despliegue |
| Inspección en directo o Prueba de resultados enriquecidos | Renderizado actual y controles compatibles | Indexación o posiciones garantizadas |
Busca en el HTML renderizado el texto real y los enlaces de destino. Una captura ayuda con el diseño, pero no revela todos los metadatos ni la semántica de enlaces. Superar una prueba de resultados enriquecidos tampoco sustituye la comprobación de que aparece la explicación principal.
Registra versión desplegada y hora de la prueba. Si permanece un paquete antiguo en caché mientras el servidor devuelve marcado nuevo, el fallo puede existir solo durante la transición. Repite una carga directa y una navegación cliente a la misma ruta: llegar desde la portada no demuestra que la URL profunda funcione por sí sola.
Elimina dependencias de interacción, almacenamiento y credenciales
Googlebot no actúa como un comprador identificado que recorre una interfaz. El contenido público no debería exigir un clic, un evento de desplazamiento o un valor concreto de almacenamiento local para descargarse. Una descripción obtenida solo al pulsar un desplegable es distinta de un texto ya presente en el DOM y mostrado mediante una interfaz compacta.
Examina la solicitud de datos de la sección ausente. Comprueba si funciona sin cookies de sesión, credenciales privadas ni una visita anterior. Una sesión con caché llena puede ocultar una inicialización fallida. Las API y los scripts esenciales deben ser accesibles en las condiciones necesarias para renderizar la página pública.
No presupongas que todas las API del navegador funcionan igual en el servicio de renderizado. Detecta las capacidades opcionales y ofrece alternativas útiles. Mantén el texto esencial independiente de permisos como geolocalización. Cada versión regional o lingüística debe tener una URL directa estable, no existir solo después de guardar una preferencia cliente.
Elimina también dependencias ajenas al contenido. Si un fallo de analítica impide mostrar los datos del producto, has acoplado trabajos que no se necesitan mutuamente. Renderiza el contenido principal de forma independiente y trata las integraciones opcionales por separado. Así mejoras la resistencia de la página para visitantes y rastreadores.
Haz que enlaces y rutas funcionen sin un recorrido programado
Utiliza elementos de enlace con href válido para navegar. Un botón con onClick sirve para una acción, pero no sustituye un enlace rastreable hacia otro documento. JavaScript puede mejorar los enlaces normales conservando sus destinos.
Este enlace de paginación mantiene una URL real aunque la interfaz intercepte después la navegación para agilizarla:
<nav aria-label="Catalog pages">
<a href="/catalog/?page=2">Next catalog page</a>
</nav>El destino también debe funcionar al solicitarlo directamente. Configura servidor y router para que la URL profunda devuelva el contenido previsto y un estado adecuado. Algunas arquitecturas necesitan una estructura general de aplicación, pero no deberían convertir cada ruta inválida en una página aparentemente correcta.
Usa History API para navegar en cliente entre URL significativas. No dependas de fragmentos como #/products para identificar documentos indexables diferentes. Los fragmentos pueden señalar lugares dentro de un documento; no sustituyen de forma fiable la estrategia de URL descrita por Google.
Prueba productos inexistentes, rutas caducadas y parámetros incorrectos. Un mensaje de error cliente dentro de una respuesta 200 puede convertirse en soft 404. Prefiere el estado adecuado del servidor cuando sea posible. Google documenta alternativas para aplicaciones exclusivamente cliente, pero una alternativa no justifica ignorar la respuesta del servidor.
Mantén coherentes los metadatos iniciales y renderizados
Cada ruta indexable necesita un título descriptivo, una descripción pertinente y un canonical coherente. Incluirlos en el HTML del servidor reduce dependencias y simplifica la inspección. JavaScript puede establecer metadatos, pero cambiar después un canonical existente por otra dirección genera señales contradictorias.
Esta cabecera de producto ilustrativa contiene un único canonical y metadatos específicos:
<title>Oak desk specifications and dimensions</title>
<meta name="description" content="Dimensions, materials and assembly information for the oak desk.">
<link rel="canonical" href="https://example.com/products/oak-desk/">La biblioteca de metadatos debe actualizar los elementos previstos, no acumular varios canonical o instrucciones robots contradictorias. Inspecciona el DOM final tras cambiar de ruta, no solo la plantilla original. El estado de la ruta anterior puede dejar un título o canonical incorrecto en la siguiente vista.
Ten especial cuidado con noindex. Google puede omitir el renderizado si el HTML inicial prohíbe indexar. Enviar noindex y esperar que JavaScript lo elimine no es fiable. Si una página pública debe indexarse, mantén esa intención desde la respuesta inicial.
Los datos estructurados también pueden generarse mediante JavaScript, pero deben describir contenido visible y exacto. Comprueba que aparecen tras renderizar y coinciden con la página. Un marcado válido no compensa una descripción o un precio que no se cargaron ni garantiza resultados enriquecidos.
Difiere recursos sin ocultar el documento
Cargar de forma diferida una imagen fuera de pantalla reduce transferencias innecesarias. Obtener el artículo principal solo después de un evento de desplazamiento puede impedir que aparezca en el resultado usado para indexar. Distingue optimización de recursos y retención del contenido que define la página.
Google recomienda cargar el contenido pertinente cuando es visible en la ventana y evitar dependencias de acciones del usuario. Para imágenes, usa carga nativa compatible o una implementación de visibilidad probada, con URL reales disponibles al renderizar el elemento. Reserva espacio para evitar que la llegada tardía desplace el contenido.
En desplazamiento infinito, proporciona URL paginadas, enlaces accesibles y subconjuntos útiles. Aunque el visitante prefiera una secuencia continua, cada tramo necesita dirección recuperable y vía de descubrimiento. Prueba directamente una página posterior: desplazarte repetidamente en tu navegador no demuestra que el buscador cubra todo.
No apliques carga diferida a la imagen LCP de la primera pantalla solo porque todos los componentes compartan un valor predeterminado. La entrega afecta tanto al rendimiento como a la búsqueda. Primero comprueba que el contenido llega de forma fiable y luego ajusta cuándo deben consumir ancho de banda los recursos secundarios.
Elige el renderizado por las dependencias que elimina
La generación estática produce HTML antes de las solicitudes. El renderizado servidor lo produce al atenderlas. Ambos pueden incluir texto y enlaces importantes en la respuesta. El renderizado cliente crea contenido después de cargar scripts y, con frecuencia, datos. La hidratación añade interactividad al HTML existente.
Las opciones pueden coexistir. Un artículo público puede ser estático, una cuenta personalizada dinámica y un filtro pequeño interactivo. La guía de rendimiento de Next.js explica la relación entre estas decisiones y los límites de componentes servidor y cliente.
El renderizado servidor no garantiza velocidad. Una dependencia de datos lenta puede retrasar toda la respuesta, y un paquete cliente grande puede hacer costosa la hidratación después de aparecer el texto. El streaming puede adelantar secciones útiles, pero comprueba si el contenido principal sigue esperando una dependencia lenta.
La hidratación debe conservar el contenido inicial, no sustituirlo por un estado de carga contradictorio. Las diferencias entre salida servidor y cliente pueden causar errores y cambios inesperados. Prueba durante la carga de scripts y después, incluidas solicitudes lentas o fallidas.
Google describe el renderizado dinámico, que detecta rastreadores y les entrega una versión procesada aparte, como solución provisional, no como recomendación a largo plazo. Añade infraestructura y obliga a mantener equivalentes las salidas. Siempre que sea viable, prefiere una arquitectura coherente; no presentes contenido sustancialmente distinto a los rastreadores como técnica de optimización.
Relaciona los fallos de renderizado con evidencia de rendimiento
Un paquete JavaScript grande puede aumentar descarga, análisis y ejecución. Eso retrasa contenido para usuarios y complica la cadena de dependencias del renderizado. Sin embargo, una puntuación baja no demuestra que Google omitiera el contenido, ni una alta demuestra indexabilidad.
Traza la secuencia real: documento, script, solicitud API, actualización del DOM y pintado. Si lo esencial depende de toda la cadena, decide qué pasos pueden pasar al servidor o desaparecer. Si una tarea bloquea interacciones después de mostrarse el contenido, la guía de ejecución de JavaScript es el siguiente diagnóstico pertinente.
Usa el analizador de PageSpeed para rendimiento y las herramientas de inspección de Google para renderizado de búsqueda. Separa ambos resultados en el registro del problema. «El título del producto falta en el HTML renderizado de la prueba en directo» permite actuar; «JavaScript perjudica el SEO» es demasiado general.
Verifica la corrección en toda la plantilla
Después del cambio, repite la ruta que fallaba y otra generada con la misma plantilla. Incluye una URL profunda directa, un recurso ausente, pantalla móvil y navegación cliente. Confirma contenido principal, enlaces, metadatos y estado; no te limites a observar que la página parece normal.
Usa nombres con huellas de contenido para JavaScript y CSS modificados, de modo que cada versión tenga una URL distinta. Google advierte que su servicio de renderizado puede almacenar recursos agresivamente. Los archivos versionados también ayudan a identificar el despliegue responsable, aunque no sustituyen una estrategia coherente de publicación y caché.
Documenta qué se corrigió y qué demuestra la evidencia. Un renderizado en directo correcto confirma disponibilidad en esa prueba; indexación y posicionamiento necesitan observaciones separadas. Añade el caso fallido a las comprobaciones de tu proceso de SEO técnico para que un cambio posterior no restaure silenciosamente la dependencia eliminada.