JavaScript SEO en 2026 : SSR, SSG, CSR — ce que Googlebot et les bots IA voient vraiment
Le rendu JavaScript est devenu l'angle mort numéro un du SEO technique. Tu déploies une app Next.js moderne, tout semble parfait dans ton navigateur, et pourtant Googlebot ne voit qu'une page vide. Pire : les crawlers IA qui alimentent ChatGPT, Perplexity ou Claude n'exécutent même pas le JS — ton contenu est littéralement invisible pour eux.
En 2026, avec la montée des AI Overviews et des moteurs de recherche génératifs, cette invisibilité a un coût direct sur ta croissance. Pas de rendu serveur = pas d'indexation = pas de citations IA. Voilà pourquoi le mode de rendu de ton app n'est plus un choix purement technique, c'est un choix SEO.
Les 3 modes de rendu : CSR, SSR, SSG
CSR — Client-Side Rendering
Tout le rendu se passe dans le navigateur. Le serveur envoie un HTML quasi-vide avec un bundle JS. Le contenu n'apparaît qu'après exécution du JavaScript par le client.
Problème SEO : Googlebot doit mettre ta page en queue de rendu avant de voir le contenu. Les bots IA n'exécutent pas JS du tout.
SSR — Server-Side Rendering
Le HTML est généré à la volée côté serveur à chaque requête. Le bot reçoit une page complète immédiatement.
Avantage : contenu frais, indexation fiable. Inconvénient : latence plus élevée, infrastructure plus lourde.
SSG — Static Site Generation
Le HTML est pré-généré au moment du build. Le bot reçoit un fichier statique stocké sur CDN.
Avantage : vitesse maximale, indexation immédiate, parfait pour les bots IA. Inconvénient : contenu potentiellement périmé si pas de revalidation.
Tableau comparatif
| Critère | CSR | SSR | SSG |
|---|---|---|---|
| Vitesse d'indexation | Lente (queue de rendu) | Rapide | Immédiate |
| Core Web Vitals | Variable (souvent mauvais) | Bon | Excellent |
| Support crawlers IA | Très faible | Bon | Excellent |
| Complexité infra | Faible | Élevée | Faible |
| Contenu dynamique | Natif | Natif | Limité (ISR) |
| Recommandation SEO | À éviter | Acceptable | Prioritaire |
Comment Googlebot rend le JavaScript
Google utilise un système appelé WRS (Web Rendering Service). Voici ce qui se passe quand Googlebot crawle une page JS :
- Fetch HTTP — Googlebot télécharge le HTML brut de ta page.
- Mise en queue — Si le HTML brut ne contient pas de contenu, la page est mise dans une file d'attente de rendu JS. Cette queue peut introduire un délai de quelques heures à plusieurs jours.
- Rendu Chromium — Google exécute le JavaScript dans un moteur Chromium headless pour obtenir le DOM final.
- Indexation — Le contenu rendu est enfin indexé.
Le problème ? Ce délai. Sur un site CSR, ton contenu peut mettre des jours à être indexé après publication. Et si tu changes souvent ton contenu, il sera presque toujours en retard dans l'index.
Comment tester : dans Google Search Console, va dans URL Inspection → entre ton URL → clique sur "Tester l'URL en ligne". Tu verras la version HTML que Google voit après rendu. Si ton contenu est absent, tu as un problème de CSR.
Tu peux aussi simuler Googlebot avec curl :
curl -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" https://tonsite.com/page
Si la réponse HTML ne contient pas tes textes principaux, Googlebot ne les voit pas non plus.
Ce que voient les crawlers IA
C'est là que ça devient critique pour ta visibilité GEO.
GPTBot, ClaudeBot, PerplexityBot, Bingbot — ces robots font dans la majorité des cas un simple fetch HTTP sans exécuter le JavaScript. Ils lisent le HTML brut que le serveur renvoie. Point.
Si tu utilises du CSR (React vanilla, Vue sans SSR, Nuxt/Next en mode client only), voilà ce que ces bots récupèrent :
<!DOCTYPE html>
<html>
<head><title>Mon SaaS</title></head>
<body>
<div id="root"></div>
<script src="/bundle.js"></script>
</body>
</html>
Contenu = zéro. Tes pages de fonctionnalités, tes comparatifs, tes articles de blog — tout est invisible pour l'entraînement IA et les réponses génératives.
Conséquence directe : tu n'apparaîtras pas dans les AI Overviews, les réponses Perplexity ou les citations ChatGPT, même si tu as du super contenu.
Next.js : les options clés pour le SEO
Next.js est aujourd'hui le framework React de référence. Voici les paramètres qui impactent directement ton rendu et ton SEO.
App Router vs Pages Router
- Pages Router : SSG par défaut avec
getStaticProps, SSR avecgetServerSideProps. Comportement prévisible. - App Router : Server Components par défaut (excellent pour le SEO). Mais attention aux
'use client'intempestifs qui repassent en CSR.
Les paramètres critiques
generateStaticParams : génère les pages dynamiques en statique au build. Indispensable pour tes routes /blog/[slug].
revalidate : en ISR (Incremental Static Regeneration), revalide ta page toutes les N secondes. Bon compromis entre fraîcheur et performance.
dynamic = 'force-static' : force le rendu statique même pour des routes dynamiques. Utilise-le quand ton contenu ne dépend pas de la session utilisateur.
dynamic = 'force-dynamic' : force le SSR à chaque requête. Nécessaire pour les pages avec données utilisateur temps réel, mais moins optimal pour le SEO.
Partial Pre-Rendering (PPR) : disponible depuis Next.js 14+, PPR permet de pré-rendre le shell statique et d'injecter les parties dynamiques après. Excellent compromis pour les pages mixtes (landing page + données personnalisées).
Diagnostiquer un problème de rendu
Voici le protocole en 4 étapes.
1. Curl avec user-agent bot
curl -A "Googlebot" https://tonsite.com/ma-page | grep -i "mon contenu clé"
Si la commande ne retourne rien, ton contenu n'est pas dans le HTML serveur.
2. URL Inspection dans GSC
Google Search Console → URL Inspection → "Tester l'URL en ligne". Compare le HTML rendu avec ce que tu vois dans ton navigateur.
3. Vérifie le header Cache
curl -I https://tonsite.com/ma-page
Un header x-vercel-cache: HIT ou cf-cache-status: HIT indique que le CDN sert un HTML pré-rendu. C'est bon signe.
4. Screaming Frog en mode JS désactivé
Dans Screaming Frog → Configuration → Spider → Rendering → sélectionne "None (HTML Only)". Crawle ton site. Si le nombre de mots dans les pages chute drastiquement, tu as du contenu CSR.
Obtiens ton score /100 sur seaudit.fr pour un audit automatisé de ton rendu et de ta performance GEO.
Checklist : 8 points à vérifier
- SSR ou SSG activé — vérifie que tes pages critiques (home, blog, features) ne sont pas en CSR pur.
- HTML brut contient le contenu — fais un curl sans JS et lis le résultat.
generateStaticParamssur toutes les routes dynamiques — chaque[slug]doit être pré-généré.- Pas de
'use client'inutile — chaque composant Server par défaut dans App Router est un gain SEO. - ISR configuré sur les pages qui changent —
revalidate: 3600pour un refresh horaire. - Core Web Vitals au vert — le SSG CDN-servi est presque toujours plus rapide. Vérifie LCP < 2,5s.
- GPTBot et ClaudeBot non bloqués dans robots.txt — si tu veux des citations IA, laisse ces bots passer.
- Test URL Inspection GSC après chaque déploiement majeur — confirme que le contenu est bien indexable.
Voir un exemple de rapport de rendu JS pour comprendre ce que l'audit détecte.
CTA
Si tu veux savoir précisément ce que Googlebot et les bots IA voient sur ton site, obtiens ton score /100 en 2 minutes. L'audit détecte les pages en CSR pur, analyse ton rendu HTML, vérifie ta configuration Next.js et mesure ta visibilité dans les moteurs IA.
Tu veux le rapport complet avec recommandations priorisées ? Télécharge le rapport PDF.
À retenir
CSR = invisible pour les bots IA. Si tu utilises React sans SSR, tes pages n'existent pas pour ChatGPT, Perplexity ou les AI Overviews.
SSG est le meilleur choix SEO par défaut. HTML statique sur CDN = indexation immédiate + Core Web Vitals excellents + support IA natif.
Next.js App Router est bon pour le SEO — à condition de ne pas abuser des composants client. Les Server Components sont rendus côté serveur par défaut, c'est exactement ce qu'on veut.
Le WRS de Google introduit un délai. Même Googlebot met du temps à rendre le JS. Avec SSG, ce délai disparaît.
Diagnostique avant d'optimiser. Un simple curl -A "Googlebot" te dit en 5 secondes si tu as un problème. Fais ce test maintenant.
