seojuice

SEO pour SPA en 2026 : Guide pratique HTML-First pour Next.js, Nuxt, SvelteKit et Astro

Vadim Kravcenko
Vadim Kravcenko
· Updated · 12 min read

TL ;DR : Les applications monopage (SPA) peuvent se positionner, mais seulement si les URL, codes d’état, métadonnées et contenu principal figurent dans la première réponse HTML. Google peut exécuter le JavaScript avec retard ; la plupart des crawleurs IA ne l’exécutent pas du tout. Choisissez un modèle de rendu par route, livrez d’abord les documents puis les états de l’application, et laissez ensuite le JavaScript hydrater par-dessus. Ci-dessous : un guide de terrain 2026 pour les équipes Next.js, Nuxt, SvelteKit et Astro.

Cessez de demander si Google « prend en charge JavaScript »

La question d’ouverture pour le SEO des SPA n’est plus « Googlebot peut-il exécuter JavaScript ? ». Oui, il le peut. Martin Splitt le répète depuis des années. Pourtant, des équipes déboguent encore leurs applications monopage en scrutant view-source: comme si c’était la page réellement indexée par Google.

« Beaucoup de gens regardent encore le code source. Ce n’est pas ce que nous utilisons pour l’indexation ; nous utilisons le HTML rendu. »

Martin Splitt, Developer Advocate chez Google

Cela élimine une mauvaise habitude. Si vous inspectez uniquement la source initiale d’une appli React, Vue, Angular, SvelteKit, Nuxt, Remix ou Next.js, vous manquez ce que Google finit par voir. Le DOM rendu compte.

Mais la vraie question en 2026 n’est plus de savoir si Google peut rendre du JS. C’est de savoir si le document arrive assez vite pour être utile à Googlebot, aux parseurs sociaux et aux crawleurs IA qui dominent de plus en plus le graphe de citations.

Le fossé des crawleurs IA a changé la donne

Pendant des années, j’ai traité le sujet comme un problème Google-centré (je me trompais). Puis les crawleurs IA sont arrivés avec une posture différente.

« Les résultats montrent systématiquement qu’aucun des principaux crawleurs IA ne rend actuellement le JavaScript. »

Engineering Vercel

GPTBot, ClaudeBot, PerplexityBot, le fetch d’entraînement Gemini : tous récupèrent le HTML brut. Si votre contenu le plus important se trouve derrière l’hydratation, ces crawleurs ne voient qu’une coquille vide là où devraient figurer votre tableau de prix, votre copy produit, votre FAQ ou vos pages comparatives. Testez notre AI Crawler Inspector sur quelques pages SPA et vous verrez ce qu’ils voient.

Chronologie comparant la façon dont Googlebot, les crawleurs sans JavaScript et les crawleurs IA perçoivent le contenu d’une SPA
Source : référence SPA-SEO de SEOJuice, basée sur la documentation de rendu Google et les mesures Vercel sur l’exécution JavaScript des crawleurs IA.

Classifiez les routes avant de choisir le rendu

La plupart des équipes zappent cette étape et se demandent si toute la SPA doit passer en SSR. Ce cadrage gaspille du temps d’ingénierie.

Une vraie SPA mélange deux éléments : des pages crawlables et des états privés d’application. Pages de tarifs, articles de blog, documentation, templates, intégrations, pages comparatives, pages produit sont des pages. Tableaux de bord, parcours d’onboarding, modales, filtres, écrans compte et rapports enregistrés sont des états d’application.

Commencez par la classification. Ne demandez pas aux développeurs de « corriger le SEO de l’app ». Demandez-leur d’indiquer quelles routes méritent du trafic search, puis choisissez rendu, indexation, canonicals et codes d’état par route.

Type de route Doit-elle se positionner ? Choix de rendu Règle d’indexation
Article de blog Oui SSG ou SSR Index, canonical sur elle-même
Page landing produit Oui SSG ou SSR Index, canonical sur elle-même
Résultats de recherche interne Généralement non CSR ou SSR Souvent noindex
Route tableau de bord Non CSR OK Protégée par auth ou noindex
URL de filtre à facettes Parfois SSR uniquement si sélectionnée Canonical ou noindex
Arbre de décision pour choisir le traitement SEO et le modèle de rendu des routes d’une SPA
Source : cadre de classification des routes SPA-SEO de SEOJuice.

Une SPA avec 40 URL publiques et 4 000 états de dashboard n’a pas 4 040 pages SEO. Elle en a 40 et une interface produit. Les routes publiques ont besoin d’URL stables, de canonicals auto-référencés, de métadonnées servies côté serveur, de liens crawlables, d’un HTML utile dès le premier octet et de codes d’état corrects. Les routes dashboard ont besoin d’interactions rapides, d’auth et de gestion d’état. Forcer les deux groupes dans un seul modèle de rendu dégrade souvent les deux.

Choisissez le modèle de rendu par route, pas par appli

La stratégie de rendu est une décision d’architecture, pas un simple réglage de plugin. Si vous choisissez le mauvais modèle, chaque ticket ultérieur devient un contournement.

Tableau comparatif des modèles de rendu SPA pour le SEO
Source : référence stratégie de rendu SEOJuice, basée sur la doc Google et le guide Next.js de Vercel.

CSR : parfait pour les dashboards, risqué pour les landing pages

Le rendu côté client convient parfaitement aux écrans logiciels authentifiés. Si l’utilisateur doit se connecter, les crawleurs ne devraient pas indexer la route de toute façon. Le CSR devient risqué lorsque la même coquille d’app sert des pages tarifs, docs, articles et produit où le contenu n’apparaît qu’après exécution du JS et réponse d’API.

SSG : ennuyeux, rapide et souvent la meilleure option

La génération statique produit le HTML à la build. Pour les blogs, docs, changelogs, glossaires, templates et la plupart des contenus marketing, le SSG est imbattable : rapide, cacheable, peu coûteux, crawler-friendly. Astro 5 pousse cette approche avec son architecture « islands » et son principe zéro JS par défaut.

SSR : utile quand le contenu public change souvent

Le rendu côté serveur convient lorsque le contenu public varie selon la requête, la géo, le stock, les permissions ou la fraîcheur. Lee Robinson a résumé le modèle Next.js de base :

« Next.js pré-rend la page en HTML sur le serveur à chaque requête. »

Lee Robinson, VP Developer Experience chez Vercel

Le SSR donne du HTML aux crawleurs sans attendre le bundle client tout en reflétant des données fraîches.

ISR et PPR : le juste milieu pour les grands sites

L’Incremental Static Regeneration régénère les pages statiques après publication. Pour le SEO programmatique, la doc et les grandes bibliothèques de templates, l’ISR évite la douleur des rebuilds sans retomber sur le CSR complet. Next.js 15 a stabilisé le Partial Prerendering : vous livrez une coquille statique et streamez les zones dynamiques depuis la même route. C’est plus proche du comportement réel des pages produit.

Dynamic rendering : le contournement qui doit mourir

Le dynamic rendering sert une version aux crawleurs et une autre aux utilisateurs. Il peut sauver une SPA legacy quand une migration n’est pas prête, mais je ne bâtirais pas une nouvelle stratégie search dessus.

« Je vois cela comme un correctif temporaire – où temporaire peut durer quelques années – mais ça reste limité dans le temps. »

John Mueller, Search Advocate chez Google

Utilisez-le comme pont. Remplacez-le par des routes publiques SSR ou statiques.

Points spécifiques aux frameworks en 2026

Le bon modèle de rendu est aussi une conversation framework. Les valeurs par défaut ont bougé ces douze derniers mois, et certaines de ces évolutions influencent les décisions SEO des SPA.

  • Next.js 15. React 19 stable, Turbopack stable en dev, fetch et gestionnaires GET non mis en cache par défaut. L’ancien cache masquait les bugs de contenu obsolète ; les nouveaux réglages vous obligent à déclarer le cache par route. Le PPR est la vedette SEO : une coquille statique avec trous dynamiques streamés, ce qui garde les pages produit crawlables sans sacrifier la fraîcheur. Pour un tour complet, voir notre guide SEO Next.js, React et Nuxt.
  • Nuxt 4. Le code applicatif vit désormais dans app/. Des projets TypeScript séparés pour app, server, shared et builder réduisent les fuites de types serveur vers le client. Nuxt 4.4 (mars 2026) a ajouté vue-router v5 et des props de layout typées, deux petits plus pour livrer des métadonnées route-spécifiques proprement.
  • SvelteKit 2 avec Svelte 5 runes. Les pages sont SSR par défaut ; le pré-rendu est opt-in par route. Le modèle mental devient « chaque route est SSR sauf si je dis statique », inversant le piège SPA-by-default. Les bundles restent assez légers pour que le coût d’hydratation ne bloque presque jamais le first paint.
  • Astro 5 (et 6). Zéro JS par défaut, architecture islands, support multi-framework. Après le rachat par Cloudflare (janv. 2026), le déploiement edge s’est encore simplifié. Astro est l’option facile pour les SPA riches en contenu qui n’ont besoin de composants React ou Vue que sur certaines pages.

Le framework compte moins que la discipline par route. Tous les quatre peuvent livrer une SPA crawlable. Tous les quatre peuvent en livrer une invisible si le contenu public se cache derrière l’hydratation.

Les pièges de crawl qui cassent encore l’indexation

Les échecs SPA SEO les plus durs sont souvent ennuyeux. Pas de mystérieuses pénalités : des bugs de livraison.

Premier piège : la coquille universelle. Chaque URL renvoie le même 200, la même racine vide, le même bundle. Le routeur décide plus tard si /pricing, /docs/api ou /totally-fake-url existe. Les crawleurs travaillent trop, et cela crée le deuxième piège : les soft 404.

« Au lieu de répondre 404, ça répond 200 … en affichant toujours une page basée sur l’exécution JavaScript. »

Martin Splitt, Developer Advocate chez Google

Les routes invalides doivent renvoyer de vrais codes 404 ou 410. Un composant client-side “page not found” servi en 200 gaspille encore le crawl budget et brouille les signaux d’indexation.

Diagramme montrant la différence entre réponses soft 404 d’une SPA et vrais codes 404
Source : référence pièges de crawl SPA-SEO SEOJuice, basée sur la doc Google soft 404 et les conseils publics de Martin Splitt.

Troisième piège : une navigation que les crawleurs ne peuvent suivre. Boutons, click-handlers et events router sont parfaits pour l’interaction, mais la découverte interne a toujours besoin d’ancres avec de vrais href. Si vos pages clés ne sont accessibles qu’après un handler JS, votre crawlabilité est plus faible qu’il n’y paraît.

Les métadonnées posent aussi problème. Beaucoup de SPA mettent à jour titres, descriptions, canonicals, robots, Open Graph et schema après le changement de route. Ça marche visuellement dans l’onglet, mais échoue pour les crawleurs, parseurs sociaux et bots IA. Les métadonnées route-spécifiques doivent être dans le HTML renvoyé.

Les canonicals méritent un avertissement à part. J’ai vu des apps hydratées écraser un canonical correct par un domaine de staging, une URL racine ou la route précédente. Le bug reste discret jusqu’à ce que les URL dupliquées s’agrègent ou qu’une mauvaise page se positionne.

L’infinite scroll cache le contenu derrière l’état client. Si les pages deux, trois et suivantes n’ont pas d’URL crawlables, les moteurs ne les découvriront jamais. Utilisez des URL paginées de secours pour les archives et catégories importantes.

Le contenu principal chargé via API est fragile. Si le H1, la copy, les détails produit, les avis ou liens internes nécessitent des appels API après hydratation, vous multipliez les points de défaillance. Le trafic bot déclenche des rate-limits. Les API bloquent les user-agents inconnus. Les timeouts laissent un DOM rendu vide.

Ce que les AI Overviews citent réellement dans une SPA

Voici la nouveauté 2026. Les AI Overviews de Google résument les réponses au-dessus de l’organique et citent les sources utilisées. Ces citations sont le nouveau sommet du funnel et récompensent une forme HTML précise.

Le système de citation s’appuie sur des signaux clairs et statiques : texte visible, headings, listes, tableaux, HTML sémantique disponible dès la première réponse. Il n’attend pas l’hydratation. Si votre paragraphe le plus cit-able n’apparaît qu’après un useEffect, l’AI Overview ne le verra pas.

Trois points comptent pour être cité :

  1. Paragraphes-réponses en HTML d’abord. Les 300-400 premiers mots de toute route indexable doivent répondre à la question principale sans JS. La plupart des citations AIO vivent là.
  2. Structure sémantique pour listes et tableaux. Listes à puces, listes ordonnées et tableaux HTML sont extraits tels quels. Les divs déguisés en tableaux ne le sont pas.
  3. URL stables que le bot IA peut recharger. Les Overviews revérifient les sources. Les routes hash, uniquement query ou en rendu dynamique rendent le refetch instable.

Même logique pour les citations Perplexity, les réponses ChatGPT Browsing et les lectures web de Claude. Leurs crawleurs récupèrent le HTML brut ; si la réponse n’y est pas, la page n’est pas citée. Optimiser pour les citations AI Overview va plus loin, et notre analyse d’impact AIO explique pourquoi la perte d’impressions semble pire que la perte de clics.

Livrez chaque route indexable comme un document d’abord

La règle à laquelle je reviens toujours : si la route mérite du trafic search, la première réponse doit ressembler à une page.

Chaque URL publique doit donc renvoyer un HTML utile avec les signaux clés déjà présents :

  • <title> correct,
  • Méta description,
  • Canonical auto-référencé,
  • Un H1 clair,
  • Contenu principal,
  • Liens internes crawlables,
  • Données structurées le cas échéant,
  • Code d’état correct,
  • Balises Open Graph et Twitter si le partage importe.
Structure d’une page SPA orientée HTML-first avec hydratation JavaScript après les éléments SEO clés
Source : playbook d’architecture SPA-SEO HTML-first de SEOJuice pour routes publiques.

Le JavaScript peut ensuite hydrater les composants, personnaliser des éléments, tracer des events, enrichir l’expérience. Il ne devrait pas être indispensable pour que le crawler comprenne la page.

L’architecture de site compte aussi. Une route publique sans liens internes crawlables reste faible — même rendue côté serveur. Un document parfaitement rendu mais enfoui à cinq clics derrière une navigation client-only ne performe pas comme s’il était dans un système de maillage interne clair.

Testez le SEO d’une SPA avec le HTML rendu, pas avec de l’espoir

Si vous ne testez que l’expérience navigateur, vous testez le chemin heureux. Le SEO des SPA nécessite des tests plus rugueux.

  1. Récupérez l’URL avec JavaScript désactivé et vérifiez si le contenu reste cohérent.
  2. Inspectez l’URL dans la Search Console et examinez le HTML rendu.
  3. Comparez le HTML initial au DOM rendu dans Chrome DevTools.
  4. Testez les codes d’état via curl -I https://exemple.com/route-inexistante.
  5. Crawlez le site avec un crawler JS et un non-JS.
  6. Confirmez que titres, canonicals, robots, schema et liens internes existent avant hydratation.
  7. Vérifiez les logs serveur : hits bot, APIs bloquées, timeouts, redirections inattendues.
  8. Validez les données structurées avec le Rich Results Test après rendu.

Le test inconfortable est celui du H1. Si Googlebot a besoin de cinq étapes et deux appels API pour le trouver, la page est fragile même si elle finit indexée. Faites le même test avec GPTBot, ClaudeBot et PerplexityBot : si ces crawleurs ne voient pas le H1 dans le HTML brut, la route ne sera pas citée.

Checklist SPA SEO pour 2026

Appliquez-la au niveau des routes. Un « OK sitewide » masque trop d’échecs SPA.

  • Rendu : Pages publiques en SSG, SSR, ISR ou PPR. Écrans privés en CSR.
  • Routing : Chaque URL indexable a une route unique, un contenu unique, un canonical auto-référencé.
  • Codes d’état : Pages manquantes renvoient 404 ou 410, pas 200.
  • Liens : La navigation interne utilise des ancres crawlables avec de vrais href.
  • Métadonnées : Titres, descriptions, canonicals, robots, Open Graph et schema sont spécifiques à la route et présents dans le HTML.
  • Contenu : Copy principale, H1, infos produit et liens clés existent sans attendre des données client-only.
  • Performance : Bundle, coût d’hydratation, scripts tiers et découpage code par route sont maîtrisés.
  • Contrôle index : Dashboards, routes privées, filtres low-value et pages search minces sont bloqués ou noindex.
  • Tests : HTML initial, DOM rendu et contenu indexé sont comparés sur les templates importants.
  • Visibilité IA : Paragraphes-réponses, listes et tableaux citables apparaissent dans le HTML brut pour que les AI Overviews et moteurs IA les réutilisent.

Recherche, réponses IA, aperçus de liens et systèmes de découverte dépendent tous de l’accès. Le ranking arrive après.

L’architecture SPA SEO la plus simple que je livrerais aujourd’hui

Si je lançais une SPA moderne avec le search en tête, je ne la rendrais pas entièrement côté serveur. Je segmenterais.

Zone du site Approche recommandée
Site marketing Génération statique
Blog et docs Génération statique ou ISR
Pages produit SSR, ISR ou PPR Next.js
Pages SEO programmatiques Génération statique avec pruning fort
Dashboard CSR derrière auth
Pages search / filtres Noindex sauf curation manuelle
Routes invalides Vrais 404 ou 410
Layout partagé Métadonnées et navigation rendues serveur

Les pages marketing et articles doivent être HTML-first. Les surfaces produit qui nécessitent de la fraîcheur utilisent SSR, ISR ou PPR. Le dashboard reste une app, inutile de le faire ranquer. Les pages SEO programmatiques demandent de la retenue : la génération statique produit des milliers de pages, y compris celles que personne ne devrait indexer. Générez seulement les pages avec une vraie demande search, un contenu utile et des liens internes. Supprimez le reste avant que Google doive décider pour vous.

La SPA gagnante n’est pas celle qui prouve que les crawleurs peuvent exécuter du JavaScript. C’est celle qui ne leur fait pas faire de travail inutile.

FAQ

Une application monopage peut-elle se positionner sur Google en 2026 ?

Oui. Une SPA peut se positionner si ses routes indexables renvoient du contenu crawlable, des métadonnées correctes, des liens internes et des codes d’état valides dans la première réponse HTML. Google peut exécuter le JS, mais s’y reposer pour tout rend le site fragile et invisible pour les crawleurs IA qui ne le rendent pas.

Le rendu côté serveur est-il obligatoire pour le SEO des SPA ?

Pas pour chaque route. Le SSR convient aux pages publiques à contenu changeant. Le SSG ou l’ISR est souvent meilleur pour le contenu stable. Le Partial Prerendering de Next.js 15 mélange les deux dans une même route. Le CSR convient aux dashboards privés et états d’app qui ne doivent pas être indexés.

Les routes avec hash sont-elles mauvaises pour le SEO ?

Oui pour les pages indexables. Elles peuvent servir pour des ancres internes, mais le contenu public doit avoir des URL propres, des métadonnées route-spécifiques et des codes d’état gérés côté serveur.

Faut-il indexer les pages de résultats de recherche interne d’une SPA ?

Généralement non. Les pages search internes et filtres facettés créent souvent des URL minces ou dupliquées. On peut indexer des filtres sélectionnés quand ils répondent à une demande unique, ont un contenu stable et une stratégie canonical claire.

Comment savoir si ma SPA a un problème de soft 404 ?

Demandez une URL factice et vérifiez le code d’état. Si /cette-page-ne-devrait-pas-exister renvoie 200 avec un message not-found client-side, vous risquez un soft 404 qui gaspille le crawl budget.

Les AI Overviews citeront-elles une SPA rendue en JavaScript ?

Uniquement si le contenu cité existe dans le HTML brut. La plupart des crawleurs IA n’exécutent pas le JavaScript. Rendu serveur ou pré-rendu des paragraphes, listes et tableaux que vous voulez voir cités.

Besoin d’aide pour rendre votre SPA crawlable ?

SEOJuice aide les équipes à renforcer les liens internes crawlables et les signaux HTML-first sur les pages publiques qui méritent le trafic search. Si votre SPA a des routes orphelines, des templates enfouis ou des pages que Google atteint rarement, l’automatisation du maillage interne peut rendre la couche document plus accessible aux crawleurs et bots IA.

<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "Une application monopage peut-elle se positionner sur Google en 2026 ?", "acceptedAnswer": { "@type": "Answer", "text": "Oui. Une SPA peut se positionner si ses routes indexables renvoient du contenu crawlable, des métadonnées correctes, des liens internes et des codes d’état valides dans la première réponse HTML. Google peut exécuter JavaScript, mais s’y reposer pour tout rend le site plus fragile et invisible pour les crawleurs IA qui ne l’exécutent pas." } }, { "@type": "Question", "name": "Le rendu côté serveur est-il obligatoire pour le SEO des SPA ?", "acceptedAnswer": { "@type": "Answer", "text": "Pas pour chaque route. Le SSR convient aux pages publiques dont le contenu change. Le SSG ou l’ISR est souvent meilleur pour le contenu stable. Le Partial Prerendering de Next.js 15 combine les deux dans une même route. Le CSR est adapté aux dashboards privés et états d’application qui ne doivent pas être indexés." } }, { "@type": "Question", "name": "Les routes avec hash sont-elles mauvaises pour le SEO ?", "acceptedAnswer": { "@type": "Answer", "text": "Les routes hash sont un mauvais choix pour les pages indexables. Elles peuvent servir pour des ancres internes, mais le contenu public doit disposer d’URL propres, de métadonnées spécifiques à la route et de codes d’état gérés côté serveur." } }, { "@type": "Question", "name": "Faut-il indexer les pages de résultats de recherche interne d’une SPA ?", "acceptedAnswer": { "@type": "Answer", "text": "Généralement non. Les pages de recherche interne et filtres facettés créent souvent des URL minces ou dupliquées. Les filtres sélectionnés peuvent être indexés s’ils répondent à une demande unique, proposent un contenu stable et disposent d’une stratégie canonical claire." } }, { "@type": "Question", "name": "Comment savoir si ma SPA a un problème de soft 404 ?", "acceptedAnswer": { "@type": "Answer", "text": "Demandez une URL factice et vérifiez le code d’état. Si /cette-page-ne-devrait-pas-exister renvoie 200 avec un message not-found côté client, vous avez un risque de soft 404 qui gaspille le crawl budget." } }, { "@type": "Question", "name": "Les AI Overviews citeront-elles une SPA rendue en JavaScript ?", "acceptedAnswer": { "@type": "Answer", "text": "Uniquement si le contenu cité existe dans le HTML brut. La plupart des crawleurs IA n’exécutent pas JavaScript. Rendez ou pré-rendez les paragraphes, listes et tableaux que vous voulez voir cités." } } ] } </script>
SEOJuice
Stay visible everywhere
Get discovered across Google and AI platforms with research-based optimizations.
Works with any CMS
Automated Internal Links
On-Page SEO Optimizations
Get Started Free

no credit card required

More articles

No related articles found.