Migration d'un React SPA vers SSG : pourquoi et comment
Vous avez livré une application React rapide, fluide, soignée. Lighthouse Performance affiche 95. Et pourtant, trois semaines plus tard, Google Search Console signale des Soft 404 sur la moitié de vos routes. Vos pages produits, vos articles, vos services : indexés au compte-gouttes, parfois pas du tout. Le problème n'est pas votre code, c'est le rendu. Une SPA classique sert un HTML quasi-vide que Googlebot doit hydrater lui-même, avec un budget JavaScript limité et imprévisible.
La bonne nouvelle : passer en Static Site Generation (SSG) ne demande pas de refondre toute l'application. Sur trois projets clients migrés début 2026, j'ai gardé la même base Vite + React, en ajoutant uniquement une étape de pré-rendu route par route. Voici la méthode et les pièges.
Pourquoi Googlebot ignore votre React SPA
Une SPA livre un fichier index.html qui contient
en gros
<div id="root"></div> et un bundle
JS. Le contenu réel est injecté côté client après hydration.
Googlebot sait exécuter du JS, mais avec un budget contraint
et asynchrone : la page passe d'abord par une file d'attente
de rendu, parfois plusieurs jours. Si votre TTFB ou votre
bundle dépasse certains seuils, Google indexe le HTML brut,
donc rien. Résultat : Soft 404, snippets vides dans les
résultats, partages OpenGraph cassés sur LinkedIn et iMessage.
Le SSG inverse la logique. Chaque route est pré-rendue en HTML complet au moment du build. Googlebot, Bingbot, les crawlers sociaux et les lecteurs RSS reçoivent un document immédiatement lisible, sans exécuter une ligne de JavaScript. L'hydratation côté client reste, pour conserver l'interactivité React habituelle.
Le SSG sans refondre toute l'application
Pour un projet Vite + React existant,
vite-react-ssg est l'option la plus directe. On
garde le routeur, les composants, les hooks, les appels
Supabase. On remplace simplement le point d'entrée
main.tsx par un export
ViteReactSSG qui liste les routes à pré-rendre,
et on remplace dans
package.json le script
vite build par
vite-react-ssg build. Le reste du code applicatif
ne bouge pas.
Au build, chaque route génère un dossier avec son
index.html propre :
dist/contact/index.html,
dist/portfolio/z-depannage/index.html, etc. Côté
Vercel, on règle
cleanUrls: true dans vercel.json et
on retire toute règle de rewrite SPA qui renverrait tout vers
index.html, sinon le pré-rendu est masqué.
vite-react-ssg vs Next.js vs Astro : que choisir ?
vite-react-ssg est le bon choix quand la base existe déjà en Vite + React et qu'on veut juste l'étape pré-rendu. Migration en une journée sur un projet de taille moyenne, zéro refonte du code métier.
Next.js est un framework complet avec son propre routeur, ses conventions, son App Router. Excellent pour un nouveau projet, mais une migration depuis Vite implique de réécrire le routage, les layouts, les conventions de fichiers et souvent l'authentification. Plusieurs jours à plusieurs semaines selon la taille.
Astro brille sur les sites éditoriaux purs (blogs, docs, landing). Sur une application riche en interactions React, son modèle d'islands force à découper l'interface en composants isolés hydratés à la demande, ce qui complique le partage d'état global.
Checklist de validation post-migration
Trois vérifications non négociables après chaque build.
Premièrement, le dossier
dist/ doit contenir un
index.html par route, et chaque fichier doit
faire plusieurs kilo-octets, pas seulement la coquille SPA.
Deuxièmement, ouvrir un de ces HTML et confirmer la présence
de
data-server-rendered="true" sur la racine, ainsi
que des sections sémantiques pleines (main,
article, section) contenant le texte
réel. Troisièmement, valider via curl ou
l'inspecteur Google Search Console que la version servie en
production correspond bien au HTML pré-rendu.
Trois pièges récurrents. Le bug
manifest-undefined de
vite-react-ssg casse les pages 404 en SEO :
workaround simple, créer un fichier vide
public/static-loader-data-manifest-undefined.json
contenant {}. La directive CSP
script-src doit garder
'unsafe-inline' car l'hydration injecte des
scripts inline obligatoires. Enfin, vérifier que le script
build de
package.json est bien
vite-react-ssg build et non
vite build, sinon Vercel déploie une version CSR
sans s'en apercevoir.
Résultats sur 3 sites
Trois migrations livrées : Z-Dépannage et Milena Glow Up, plus un portfolio personnel. Scores Lighthouse passés de 60-70 à 95-100 sur les quatre catégories. Délai d'indexation Google divisé par cinq : de 1-4 semaines à 3-7 jours en moyenne, mesuré sur Search Console. OpenGraph fiable sur tous les partages sociaux, snippets corrects dans les résultats, plus aucun Soft 404 signalé.
Si votre projet React commence à recevoir du trafic organique
et que vos métriques d'indexation stagnent, le SSG via
vite-react-ssg est probablement le levier au
meilleur rapport effort/impact. Quelques heures d'intégration,
des gains durables sur le référencement et la performance
perçue. Pour un audit ou un accompagnement migration, la page
contact reste le point d'entrée le plus
direct.
Questions fréquentes
-
Pourquoi migrer un React SPA vers SSG ?
Un SPA renvoie un HTML quasi-vide à Googlebot, classé en Soft 404. Le SSG pré-rend chaque route en HTML complet : indexation immédiate, Core Web Vitals au plafond, hébergement Vercel gratuit. -
vite-react-ssg ou Next.js : que choisir ?
vite-react-ssg pour un projet Vite + React Router existant (migration en 1 journée, zéro refonte). Next.js pour un nouveau projet ou si on veut Server Components et API routes intégrées. -
Comment valider qu'un build SSG est correct ?
3 contrôles : (1) dist/ contient un index.html par route, (2) chaque HTML a data-server-rendered="true" sur la racine, (3) HTML inclut des sections sémantiques pleines avec le texte réel.
Articles liés
Développeur web freelance à Morsang-sur-Orge et en Essonne (91)
Pourquoi choisir un freelance local plutôt qu'une agence parisienne, mes services pour les PME de l'Essonne, communes couvertes, projets 2026 et tarifs transparents.
Création de site vitrine PME avec React + Vite : standards 2026
Pourquoi React + Vite + SSG bat WordPress sur la performance, la sécurité et le coût d'hébergement, avec deux études de cas Clad-Primeco et Milena Glow Up.