Le rendu JavaScript (ou JavaScript rendering) désigne le processus par lequel un moteur de recherche exécute le code JavaScript d’une page web pour en extraire le contenu final. Quand une page s’appuie sur du JS pour afficher ses textes, ses liens ou sa structure, Googlebot doit « faire tourner » ce JavaScript pour voir ce que l’utilisateur verrait dans son navigateur. C’est une étape critique pour l’indexation des sites modernes.
Comment Google traite le JavaScript
Google utilise un processus en deux phases pour traiter les pages qui dépendent du JavaScript :
- Phase de crawl : Googlebot télécharge le HTML brut de la page. À ce stade, il voit uniquement ce qui est présent dans le code source initial, avant l’exécution de tout script.
- Phase de rendu : la page est placée dans une file d’attente, puis le Web Rendering Service (WRS) de Google exécute le JavaScript avec une version de Chromium. C’est à ce moment que le contenu généré dynamiquement devient visible pour Google.
Le problème réside dans le délai entre ces deux phases. La file d’attente de rendu dépend des ressources que Google alloue à votre site, autrement dit, de votre crawl budget. Pour un petit site, le rendu peut intervenir en quelques secondes. Pour un gros site avec des milliers de pages JS, le décalage peut atteindre plusieurs jours, voire plus.
Pourquoi le rendu JavaScript pose problème en SEO
Si votre contenu principal (texte, liens internes, données structurées) dépend du JavaScript pour s’afficher, vous prenez plusieurs risques :
- Indexation retardée : le contenu n’apparaît dans l’index qu’après le rendu, pas après le crawl. Les nouvelles pages ou les mises à jour de contenu mettent plus de temps à être prises en compte.
- Contenu invisible : si le rendu échoue (erreur JS, timeout, ressource bloquée par le robots.txt), Google indexe une page vide ou incomplète.
- Liens internes non détectés : les liens générés dynamiquement en JS ne sont découverts qu’au moment du rendu. Cela peut créer des pages orphelines du point de vue du crawl initial.
- Coût en crawl budget : Google doit à la fois télécharger le HTML, les fichiers JS, les appels API, puis exécuter le tout. C’est beaucoup plus coûteux qu’une page HTML statique.
Les stratégies de rendu pour le SEO
Trois approches principales existent pour gérer le rendu JavaScript dans une optique SEO :
Server-Side Rendering (SSR)
Le serveur exécute le JavaScript et envoie le HTML complet au navigateur (et à Googlebot). C’est la solution la plus fiable pour le SEO : le contenu est immédiatement visible dans le code source, sans attendre de phase de rendu. Des frameworks comme Next.js (React) ou Nuxt (Vue) facilitent la mise en place du SSR.
Static Site Generation (SSG)
Les pages sont pré-générées en HTML au moment du build, puis servies comme des fichiers statiques. Idéal pour les sites dont le contenu ne change pas à chaque requête (blogs, documentations, catalogues stables). Les performances sont excellentes et le crawl est optimal.
Dynamic Rendering
Le serveur détecte si la requête vient d’un bot ou d’un utilisateur, et sert une version pré-rendue aux robots de recherche. Google a longtemps recommandé cette approche comme solution de contournement, mais la considère désormais comme un palliatif temporaire. Le SSR ou le SSG restent préférables à long terme.
| Stratégie | SEO | Complexité | Cas d’usage |
|---|---|---|---|
| SSR | Excellent | Moyenne | Applications web dynamiques |
| SSG | Excellent | Faible | Blogs, docs, sites vitrines |
| Dynamic Rendering | Bon (temporaire) | Élevée | Migration progressive |
| Client-Side Rendering seul | Risqué | Faible | Apps privées (derrière login) |
Vérifier si Google rend correctement votre JavaScript
Pour savoir ce que Google voit réellement sur vos pages, utilisez l’outil d’inspection d’URL dans Google Search Console. Cliquez sur « Afficher la page explorée » puis comparez l’onglet HTML et la capture d’écran rendue. Si le contenu principal est absent du HTML mais visible sur la capture, votre contenu dépend du rendu JavaScript.
Autre test rapide : désactivez JavaScript dans votre navigateur et rechargez votre page. Ce que vous voyez correspond approximativement à ce que Googlebot voit lors de la phase de crawl initiale. Si la page est vide ou incomplète, il y a un problème de dépendance au JS.