SEO técnico
SEO técnico para sitios JavaScript: rastreo, renderizado e indexación
Una checklist práctica para garantizar que contenido, enlaces, metadata y estados de aplicaciones JavaScript estén disponibles para buscadores.
Lectura ejecutiva
Conclusiones principales
- El contenido crítico debe estar disponible sin interacción obligatoria.
- Los enlaces necesitan un elemento a con href resoluble.
- Estado, canonical y robots deben ser coherentes en el HTML inicial.
- Prueba origen, DOM renderizado e inspección del buscador.
Las aplicaciones JavaScript pueden aparecer en buscadores, pero el camino entre URL y contenido tiene más puntos de fallo. El crawler debe acceder, recibir una respuesta adecuada, descubrir recursos, ejecutar código cuando sea necesario, construir contenido y evaluar la versión renderizada.
La guía de JavaScript SEO de Google describe rastreo, renderizado e indexación. Google usa Chromium, pero el renderizado puede entrar en una cola, los recursos bloqueados pueden impedir contenido y otros bots tienen capacidades diferentes.
Entiende qué llega en el HTML inicial
Inspecciona la respuesta sin ejecutar JavaScript:
- title y meta description;
- canonical y robots;
h1y contenido principal;- enlaces internos;
- datos estructurados;
- información de producto o artículo;
- estados de error;
- hreflang cuando corresponda.
Si el HTML contiene solo un contenedor vacío y scripts, toda comprensión depende del renderizado. Puede funcionar para Google, pero aumenta complejidad, tiempo y diferencias entre crawlers.
Renderizado en servidor, generación estática o un enfoque híbrido hacen que el contenido crítico esté disponible antes.
Usa URLs reales para cada contenido
Cada página descubrible necesita una URL estable y compartible. Filtros, pestañas y estados solo necesitan URL propia cuando representan contenido útil e indexable.
Evita cargar páginas distintas solo con fragmentos como #/producto. Usa History API para el enrutamiento cliente y mantén el servidor capaz de responder directamente a cada URL.
Prueba acceso directo, actualización, compartir y navegación sin depender de una sesión anterior.
Crea enlaces rastreables
El patrón más confiable es:
<a href="/es/blog/core-web-vitals-campo-laboratorio">Datos de campo y laboratorio</a>
Un div con onClick, un botón que cambia la ruta o un enlace sin href puede funcionar para una persona y fallar en descubrimiento, teclado o apertura en nueva pestaña.
Usa botón para acción y enlace para navegación. Garantiza que el destino exista en el HTML renderizado sin necesitar scroll o clic.
Devuelve estados HTTP significativos
Las SPA a veces devuelven 200 para todas las rutas, incluso productos eliminados y errores. Esto crea soft 404.
El servidor debe devolver 200 para contenido disponible, redirecciones adecuadas, 404 para recursos inexistentes, 410 para eliminación permanente intencional, códigos de acceso para contenido restringido y 5xx para fallos reales.
Un mensaje “no encontrado” dentro de una respuesta 200 no sustituye el estado.
Define metadata estable
Title, description, canonical y robots deben representar la URL actual. En navegación cliente, confirma que se actualicen y no hereden valores anteriores.
La canonical debe ser absoluta y coherente entre HTML inicial, renderizado, sitemap y enlaces. No la uses como solución universal para paginación o filtros.
Evita comenzar con noindex y retirarlo por JavaScript. Google advierte que puede omitir el renderizado después de encontrar noindex.
No escondas contenido detrás de interacción
Google no desplaza ni hace clic como una persona. Lazy-loading debe cargar al entrar en el viewport, no solo después de un botón o gesto.
Contenido principal, productos y enlaces no deben depender exclusivamente de scroll infinito sin URLs, “cargar más” sin enlaces alternativos, hover, gesto de carrusel o API llamada solo tras una interacción.
La guía de lazy-loading de Google recomienda implementaciones sin acciones del usuario para exponer contenido relevante.
Trata renderizado y rendimiento juntos
Enviar todo por el cliente aumenta red y CPU. Aunque el crawler ejecute el código, usuarios pueden sufrir LCP lento e INP alto.
Pregunta por componente si necesita interactividad, si puede renderizarse en servidor, cargarse después, evitar hidratación, si está en el camino crítico o depende de terceros.
Server Components, islas de interactividad y generación estática reducen JavaScript. La arquitectura debe responder a datos, personalización y experiencia.
Mantén contenido consistente
El contenido del crawler debe corresponder al del usuario. Diferencias legítimas por dispositivo, ubicación o login deben preservar la intención.
Evita contenido completo en servidor que desaparece después de hidratar, títulos divergentes, canonical cambiada por el cliente, errores de API que eliminan contenido, skeleton permanente y datos estructurados sobre información ausente.
Los problemas de hidratación pueden dejar correcto el HTML inicial y romper la interfaz final. Inspecciona ambas capas.
Prueba origen y renderizado
- solicita la URL y registra estado y HTML;
- desactiva JavaScript como diagnóstico;
- renderiza en navegador limpio;
- compara contenido, enlaces, metadata y schema;
- revisa consola y red;
- prueba mobile y desktop;
- usa inspección de URL y HTML renderizado;
- valida páginas correctas, vacías, eliminadas y con error de API.
Una captura no prueba que los enlaces sean rastreables. Un HTML correcto no prueba que la hidratación preservó el contenido.
Monitorea deploys y regresiones
Cambios de framework, rutas, middleware y consentimiento pueden afectar todo el sitio. Automatiza estado, title, canonical, robots, h1, contenido, enlaces, schema, errores de hidratación y sitemap para templates críticos.
Integra la checklist de lanzamiento y prueba la URL publicada.
Observación: categorías devuelven un shell vacío; productos y enlaces aparecen solo después de una API cliente. Si falla, la respuesta sigue en
200y sin contenido. Acción: renderizar título, descripción, primera página de productos y paginación en servidor; devolver error adecuado cuando no haya datos. Aceptación: contenido y enlaces existen en el HTML inicial, la navegación cliente funciona y los errores usan estados coherentes.
SEO para JavaScript no exige abandonar aplicaciones modernas. Exige reducir dependencias innecesarias, usar patrones de la plataforma y verificar lo que cada agente recibe.
Respuestas directas
Preguntas frecuentes
¿Google ejecuta JavaScript?
Sí. La documentación de Google describe fases de rastreo, renderizado e indexación con Chromium. Aun existen colas y limitaciones, y otros bots pueden no ejecutar la aplicación.
¿SSR garantiza SEO?
No. SSR mejora disponibilidad inicial, pero URLs, canonical, estados, enlaces, contenido y calidad siguen necesitando implementación correcta.
¿Puedo definir canonical con JavaScript?
Google puede procesarla, pero recomienda consistencia y prefiere definirla en HTML cuando sea posible.