Guide JavaScript Framework SEO
SEO pour JavaScript frameworks — React, Suivant.js, Vue, Nuxt, Angular, Svelte, et Astro. Comment rendu mode (SSR, SSG, CSR) determines ce que Google peut indexer, et qui frameworks handle SEO meilleur out de le box.
«JavaScript framework SEO comes down to rendering mode: SSG and SSR give Googlebot pre-built HTML; CSR requires JavaScript execution that may or may not succeed. Next.js and Nuxt have the most built-in SEO support (SSR, SSG, ISR, metadata APIs). Pure React and Vue in CSR mode are the riskiest for SEO. Astro's island architecture is excellent for SEO by default. Angular requires SSR via @angular/ssr (formerly Angular Universal) for reliable indexation.» _(Traduction)_ (Résumé en français du champ tldr : le texte source est conservé pour relecture francophone.)
TL;DR — La plupart JavaScript frameworks construire pages dans votre visitor’s navigateur (CSR). Ce fonctionne fine pour utilisateurs, mais moteur de recherches pourrait pas exécuter le JavaScript et miss votre contenu. Le corriger: utiliser a framework mode que construit pages on le serveur (SSR) or à construire temps (SSG). Suivant.js et Nuxt faire ce facile; pure React et Vue dans CSR mode exiger supplémentaire fonctionner.
Pourquoi JavaScript frameworks have SEO concerns
Google processes JavaScript via exploration, rendu, et indexation, et bloqué or failed resources peut modifier le rendu résultat. Preuve à l’appui de cette affirmation Primary standard or official documentation supporting the adjacent article claim. Portée : Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Niveau de confiance : élevé · Vérifié : Google: JavaScript SEO basics Rendu mode et metadata implementation matter plus que le framework brand alone. Preuve à l’appui de cette affirmation Primary standard or official documentation supporting the adjacent article claim. Portée : Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Niveau de confiance : élevé · Vérifié : web.dev: Rendering on the Web
Traditional sites web send complet HTML depuis le serveur. Moteur de recherche robots d’exploration download que HTML et indexer le contenu immédiatement. JavaScript frameworks souvent fonctionner differently: le serveur sends a minimal HTML fichier, et alors JavaScript exécute dans le navigateur à construire le réel page contenu.
Si a moteur de recherche robot d’exploration ne fait pas exécuter votre JavaScript (or exécute il mais quelque chose fails), il voit an vide page. c’est le CSR SEO problème.
Rendering modes explained
- SSG (static site generation) — pages sont construit as HTML à deploy temps. Robots d’exploration obtenir complet HTML avec aucun JavaScript requis. Meilleur pour le SEO.
- SSR (rendu côté serveur) — le serveur construit le HTML fresh pour chaque requête. Robots d’exploration obtenir complet HTML. Aussi excellent pour le SEO.
- CSR (rendu côté client) — JavaScript construit lune page dans le navigateur. Robots d’exploration doit exécuter JavaScript à voir contenu. Google peut faire ce, mais échecs se produire et discovery est slower.
Frameworks par SEO safety out de le box
«Safest: » (Traduction) (Résumé en français de la section onze, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- Astro — generates static HTML by default; JavaScript only where you opt in » (Traduction) (Résumé en français de la section onze, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- Next.js — offers SSG, SSR, and ISR; full metadata API; industry standard » (Traduction) (Résumé en français de la section onze, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.) «- Nuxt — same for the Vue ecosystem; excellent SSR/SSG support » (Traduction) (Résumé en français de la section onze, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.)
Exige configuration:
- Angular — CSR by par défaut; nécessite
@angular/ssr(formerly Angular Universal) pour safe SEO - React — CSR by par défaut; nécessite Suivant.js or React Router (framework mode) pour SSR/SSG
- Vue — CSR by par défaut; nécessite Nuxt pour SSR/SSG
- Svelte — CSR by par défaut; SvelteKit adds SSR/SSG prise en charge
TL;DR — À le technique level, JS framework SEO est à propos de: (1) rendu architecture pour le initial HTML payload, (2) metadata injection dans
<head>avant la réponse est sent, (3) comment le framework handles hydration et lien discovery, et (4) ISR cache staleness. Suivant.js a le la plupart complet built-dans SEO tooling (Metadata API, built-dansapp/sitemap.ts, image optimization). Astro est le la plupart SEO-sûr par architecture.
Rendu mode, metadata API, et ISR prise en charge par framework
«Framework capabilities and defaults change by version; verify them in each framework’s official documentation. Preuve à l’appui de cette affirmation Primary standard or official documentation supporting the adjacent article claim. Portée : Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Niveau de confiance : élevé · Vérifié : web.dev: Rendering on the Web No rendering mode guarantees indexing or rankings. Preuve à l’appui de cette affirmation Primary standard or official documentation supporting the adjacent article claim. Portée : Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Niveau de confiance : élevé · Vérifié : Google: JavaScript SEO basics When you’re comparing frameworks for a decision, test the same routes, content, deployment target and tooling for each candidate — a benchmark that swaps any of those isn’t measuring the framework, it’s measuring the difference in setup. » (Traduction) (Résumé en français de la section dix-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
| Framework | Par défaut rendering | Built-in metadata API | SSR/SSG prise en charge | Ecosystem SEO prise en charge |
|---|---|---|---|---|
| Astro | SSG (islands) | Yes (<head> in .astro fichiers, Content Collections pour données structurées) | Les deux | Strong |
| Suivant.js | SSR/SSG (configurable) | Yes (Metadata API in App Router) | Les deux + ISR | Excellent |
| Nuxt | SSR by par défaut | Yes (useHead, useSeoMeta) | Les deux + ISR | Excellent |
| SvelteKit | SSR by par défaut | Yes (svelte:head) | Les deux | Bon |
| React Router (framework mode) | SSR by par défaut | Yes (meta export) | SSR + Deferred | Bon |
| Angular | CSR by par défaut | Via Angular Meta/Title services | Via @angular/ssr | Moderate |
| React (bare) | CSR | Manual (react-helmet-async; react-helmet is unmaintained) | Via Suivant.js/Gatsby | Dépend on wrapper |
| Vue (bare) | CSR | Manual (@unhead/vue; vue-meta is unmaintained) | Via Nuxt | Dépend on wrapper |
«Remix v2 and React Router v7 merged — Remix’s server rendering and data-loading model now ships as React Router’s “framework mode,” and that’s the stable upgrade path for Remix v2 apps. Remix 3 is a separate, experimental React-less rewrite (beta), not the successor to Remix v2 — don’t treat it as a drop-in SSR option for a React codebase. » (Traduction) (Résumé en français de la section dix-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«## Metadata timing, crawlable links, and ISR cache staleness » (Traduction) (Résumé en français de la section vingt, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Metadata injection timing — Metadata (<title>, <meta>) must be in the
server response, not added by JavaScript after page load. Next.js’s Metadata API,
Nuxt’s useSeoMeta, and Astro’s <head> component handle this correctly.
document.title = '...' or React Helmet in CSR mode does not — it runs after the
initial HTML is served.
» (Traduction) (Résumé en français de la section vingt et un, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Link discovery — Googlebot discovers links by parsing HTML. Links added via
JavaScript (onClick, dynamic routing without <a> tags) may not be discovered.
Use real <a href> elements for important navigation.
» (Traduction) (Résumé en français de la section vingt-deux, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Hydration et contenu dupliqué — Si SSR et CSR rendre différent contenu (hydration mismatch), vous peut fin up avec indexé contenu que ne fait pas match ce que utilisateurs voir. Tester pour hydration erreurs dans le navigateur console.
Soft 404s — Client-side routers peut silently rendre a “page not found” UI pendant que returning a 200 HTTP status. Moteur de recherches indexer ces as réel pages. Assurez-vous votre 404 page renvoie a réel 404 status, et serveur-side redirections retourner 301.
ISR cache invalidation — Dans Suivant.js et Nuxt ISR setups, stale pages peut être
servi à robots d’exploration during le revalidation window. Définir a time-based revalidate
interval, et pour contenu que changements on a schedule vous ne pas contrôler (a CMS enregistrer,
Par exemple), pair il avec on-demand revalidation triggered depuis a webhook-backed
route handler — voir le Suivant.js ISR guide
pour le complet API.
// app/blog/[id]/page.tsx — time-based revalidation
export const revalidate = 3600 // re-check this page at most once an hour
// app/api/revalidate/route.ts — on-demand revalidation, called by a CMS webhook
import { revalidatePath } from 'next/cache'
import { NextRequest, NextResponse } from 'next/server'
export async function POST(request: NextRequest) {
const { path, secret } = await request.json()
if (secret !== process.env.REVALIDATE_SECRET) {
return NextResponse.json({ message: 'Invalid secret' }, { status: 401 })
}
revalidatePath(path) // e.g. '/blog/1' — next request regenerates fresh HTML
return NextResponse.json({ revalidated: true })
} JavaScript framework SEO est primarily determined par rendu mode. SSG (pages construit as static HTML à deploy temps) et SSR (pages rendu serveur-side per requête) sont les deux sûr pour moteur de recherche indexation. CSR (pages rendu entirely dans le navigateur via JavaScript) est riskier — Google peut execute JavaScript, mais échecs et delays sont courant, et discovery est slower.
Suivant.js (React meta-framework): La plupart complet built-dans SEO prise en charge. App Router Metadata API, SSG/SSR/ISR, image optimization, built-dans app/sitemap.ts (le next-sitemap package est maintenant seulement nécessaire pour extensions il ne fait pas cover), lien-level prefetching. Industry standard pour le SEO-sensitive React apps.
Nuxt (Vue meta-framework): Equivalent capabilities pour Vue. Built-dans useSeoMeta() et useHead() composables, SSR/SSG/ISR, Nuxt SEO module. Excellent pour Vue-based sites.
«Astro: Island architecture ships zero JavaScript by default. Pages are static HTML; interactivity added via explicit “islands.” Best SEO safety of any JS framework by default. Great for content-heavy sites. » (Traduction) (Résumé en français de la section trente-deux, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«SvelteKit: SSR by default, excellent metadata support via svelte:head. Solid SEO with minimal configuration.
» (Traduction) (Résumé en français de la section trente-trois, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Angular: CSR by default, requires @angular/ssr (formerly Angular Universal) for reliable indexation. Historically the most SEO-problematic of the major frameworks.
» (Traduction) (Résumé en français de la section trente-quatre, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«React (bare): CSR by default. Requires Next.js, React Router (framework mode), or Gatsby for SSR/SSG. Note: Remix v2’s server-rendering model has merged into React Router v7/v8 as “framework mode” — that’s the maintained upgrade path, not the separate, experimental React-less Remix 3 beta. Don’t use bare CRA/Vite-React for content that must rank. » (Traduction) (Résumé en français de la section trente-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Vue (bare): Même problème. Utiliser Nuxt pour le SEO-critical Vue applications.
Svelte (bare): CSR by par défaut. Utiliser SvelteKit pour SSR/SSG.
JavaScript framework SEO checklist
Universal (s’applique à tout frameworks)
- Vérifier rendu mode:
curl -s URL | grep "<title>"— titre doit apparaître dans raw HTML - Vérifier que
<title>et<meta name="description">sont dans le serveur réponse - Utiliser réel
<a href>balises pour tout navigable liens (pas simplement click handlers) - Garantir 404 pages retourner HTTP 404, pas 200
- Garantir redirections utiliser serveur-side 301/302, pas
window.location.href - Generate et submit an XML sitemap
- Ajouter
robots.txtà votre public directory
Suivant.js
- Utiliser le App Router Metadata API (
metadataexport orgenerateMetadata()) - Choisir SSG (
generateStaticParams) or SSR (dynamic = 'force-dynamic') per route - Ajouter an
app/sitemap.tsfichier (App Router’s built-dans sitemap prise en charge) pour la plupart sites; reach pour lenext-sitemappackage seulement si vous besoin cross-domain sitemaps or autre extensions le built-dansMetadataRoute.Sitemaptype ne fait pas model - Utiliser
next/imagepour tout images (automatic WebP, sizing, lazy-charger) - Vérifier ISR
revalidatevaleurs — définir court windows pour frequently-updated pages
Nuxt
- Utiliser
useSeoMeta()oruseHead()dans chaque page component - Install le
@nuxtjs/sitemapmodule - Utiliser Nuxt’s built-dans SSR (or
nuxt generatepour SSG) - Configurer
robots.txtvia@nuxtjs/robots
Astro
- Réussir SEO props to votre
<BaseHead>component on every page - Utiliser Astro’s
@astrojs/sitemapintegration - Garder JavaScript islands minimal — éviter converting static sections to islands
Angular
- Enable SSR via
ng add @angular/ssr - Utiliser
MetaandTitleservices pour metadata - Ajouter transfer state to prevent API double-fetching on hydration
Framework deep dives
Connexe reading
Journal des modifications
Mis à jour le 19 juil. 2026.
Résumé éditorial et détails enregistrés des changements.Détails des changements
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
Comparaison complète indisponible — aucun instantané antérieur n’a été archivé pour cette révision.