Guide complet SSR Astro : 3 étapes pour activer le rendu côté serveur

Votre blog Astro tourne à fond, Lighthouse à 95+, et le patron demande soudain une connexion utilisateur. Panique : comment gérer l’authentification sur un site statique ? La doc officielle déverse SSR, SSG, Hybrid, adapter — de quoi perdre le fil.
Ma première rencontre avec le SSR Astro, c’était pareil. Astro mise sur la vitesse : ajouter du rendu serveur, est-ce que tout ralentit ? Vercel, Netlify, Node.js — lequel choisir ? Et dans la config, output, prerender, ça veut dire quoi exactement ?
En réalité, configurer le SSR Astro est moins intimidant qu’il n’y paraît. Cet article explique clairement : quand le SSR est indispensable (plutôt que de rester en SSG), comment configurer rapidement les adaptateurs, et comment combiner SSR et SSG dans un même projet (mode hybride). À la fin, vous saurez juger si votre projet en a besoin — et vous pourrez être opérationnel en une trentaine de minutes.
Chapitre 1 : Concepts SSR et choix technique
Quand préférer le SSR au SSG ?
Le critère le plus simple : le contenu est-il figé au build, ou peut-il changer à chaque visite ?
Le SSG (Static Site Generation), c’est le menu préparé le matin : les plats sont prêts, le client est servi tout de suite — ultra rapide. Articles de blog, pages produit, À propos : contenu stable, le SSG est idéal.
Le SSR (Server-Side Rendering), c’est la cuisine à la commande : le plat est préparé selon la demande du client. « Bon retour, Zhang San » après connexion, cours boursiers en direct, quantité du panier — chaque visiteur voit autre chose, il faut du SSR.
Votre projet en a-t-il besoin ? Voici cinq scénarios : si l’un vous concerne, envisagez le SSR.
1. Authentification et contenu personnalisé
L’exemple classique : la connexion. Au build, vous ne savez pas qui se connectera ni quel nom afficher. Sur une plateforme d’apprentissage, j’avais « Reprendre : leçon 5 » sur l’accueil — impossible en SSG pur ; il faut du SSR selon la progression de l’utilisateur.
2. Données en temps réel
Météo, bourse, scores sportifs. Les données changent chaque minute ; rebuilder le site en continu n’a pas de sens. Avec le SSR, chaque visite récupère la version à jour.
3. Requêtes base de données
Recherche produits e-commerce : chaque mot-clé donne des résultats différents. Impossible de pré-générer toutes les combinaisons. Le SSR interroge la base au moment de la recherche.
4. Routes API
Formulaires, uploads, appels API tiers — logique backend requise. En mode SSR, Astro permet des routes API (src/pages/api/xxx.js) sans serveur backend séparé.
5. Tests A/B et recommandations
Contenu selon géolocalisation, heure, historique. Sur une grande marketplace, la page d’accueil diffère par utilisateur — personnalisation = SSR.
Question fréquente : « Et la page détail d’un article de blog en SSR ? » Possible, mais inutile. Le contenu est fixe ; le SSG génère du HTML statique, CDN plus rapide, coût serveur plus bas. Le SSR n’est pas une fin en soi.
Mode hybride : les deux approches
Le mode hybride d’Astro 2.0 permet SSG et SSR dans un même projet. Exemple e-commerce :
- Accueil, À propos, aide → SSG (chargement rapide)
- Connexion, espace utilisateur, panier → SSR (dynamique)
- Fiche produit → SSG (contenu fixe)
- Résultats de recherche → SSR (requête temps réel)
Les pages statiques gardent leur vitesse ; les fonctions dynamiques fonctionnent. Un ami gère son blog ainsi : liste et articles en SSG, zone commentaires en SSR — Lighthouse toujours autour de 95+.
Chapitre 2 : Démarrage rapide — 3 étapes pour activer le SSR
Configurer le SSR Astro from scratch (adaptateur Node.js)
Une fois le besoin SSR confirmé, passons à la configuration. Je commence par l’adaptateur Node.js — le plus polyvalent, adapté à un serveur ou VPS auto-hébergé.
Étape 1 : installer l’adaptateur en une commande
Astro fournit une commande de configuration automatique, à lancer à la racine du projet :
npx astro add node
Cette commande fait trois choses :
- Installe le paquet
@astrojs/node - Modifie
astro.config.mjs - Met à jour les dépendances dans
package.json
À la fin, le terminal affiche des coches vertes : configuration OK. Installation manuelle possible si vous devez figer une version :
npm install @astrojs/node
Puis modification manuelle du fichier de config (étape suivante).
Étape 2 : modifier la configuration
Ouvrez astro.config.mjs à la racine. Après la commande automatique, vous devriez voir :
// astro.config.mjs
import { defineConfig } from 'astro/config';
import node from '@astrojs/node';
export default defineConfig({
output: 'server', // Active le mode SSR
adapter: node({
mode: 'standalone' // Mode serveur autonome
}),
});
Deux options importantes :
output :
'static'(défaut) : toutes les pages en SSG, HTML statique pur'server': toutes les pages en SSR, génération à chaque requête'hybrid': SSG par défaut, SSR page par page (recommandé)
mode :
'standalone': Astro lance un serveur Node.js dédié, idéal pour déploiement direct'middleware': génère un middleware intégrable à Express, Koa, etc.
J’utilise en général standalone : le serveur intégré d’Astro suffit. Si vous avez déjà un backend Express et voulez y brancher Astro, choisissez middleware.
Étape 3 : build et exécution
npm run build
Après le build, dist/ contient un dossier server/ avec entry.mjs — point d’entrée du serveur SSR.
Lancer le serveur :
node ./dist/server/entry.mjs
Par défaut : http://localhost:4321. Toutes les pages passent en SSR.
Débogage en développement
Pas besoin de rebuild à chaque fois :
npm run dev
Le serveur de dev gère le SSR ; les modifications sont prises en compte à chaud.
Dépannage courant
-
Port occupé : si 4321 est pris :
PORT=3000 node ./dist/server/entry.mjs -
Module adaptateur introuvable : vérifiez
@astrojs/node, relanceznpm install -
Page 404 : vérifiez
src/pages/— les règles de routage Astro s’appliquent aussi en SSR
En pratique, ma première config SSR a pris moins de cinq minutes. Sur Vercel ou Netlify, des adaptateurs dédiés simplifient encore le déploiement — chapitre suivant.
Chapitre 3 : Adaptateurs principaux en détail
Vercel, Netlify, Cloudflare : comment choisir ?
Si le projet est hébergé sur Vercel, Netlify ou Cloudflare, le SSR se configure souvent plus vite. Chaque plateforme a un adaptateur officiel Astro, avec déploiement quasi sans friction.
Adaptateur Vercel — référence en serverless
Vercel est ma plateforme la plus utilisée : quota gratuit correct pour les projets perso, config minimale :
npx astro add vercel
Tout est configuré automatiquement. Exemple de fichier :
// astro.config.mjs
import { defineConfig } from 'astro/config';
import vercel from '@astrojs/vercel/serverless';
export default defineConfig({
output: 'server',
adapter: vercel(),
});
Fonctionnalité Vercel : ISR (Incremental Static Regeneration)
Propre à Vercel : une page SSR peut se comporter comme du SSG en cache. Premier accès → rendu SSR ; puis cache pendant un délai ; régénération à l’expiration.
adapter: vercel({
isr: {
expiration: 60, // Cache 60 secondes
},
}),
Pour un site d’actualités, une mise à jour par minute suffit souvent — pas besoin de requête base à chaque hit. ISR combine flexibilité SSR et vitesse proche du statique.
Déploiement Vercel :
- Configurer l’adaptateur
- Pousser le code sur GitHub
- Importer le projet dans la console Vercel
- Commande de build :
npm run build(détection auto) - Déployer
Adaptateur Netlify — Edge Functions
Netlify convient bien au duo site statique + fonctions dynamiques.
npx astro add netlify
Configuration :
// astro.config.mjs
import { defineConfig } from 'astro/config';
import netlify from '@astrojs/netlify';
export default defineConfig({
output: 'server',
adapter: netlify({
edgeMiddleware: true, // Active le middleware Edge
}),
});
Qu’est-ce que edgeMiddleware ?
Exécuter la logique middleware (auth, redirections) sur les nœuds edge — latence réduite. Utile pour la géolocalisation (langue selon la région de l’utilisateur).
Redirections Netlify
Créez un fichier _redirects à la racine, par exemple :
/old-page /new-page 301
Les redirections s’appliquent au déploiement, sans toucher au code.
Adaptateur Cloudflare — CDN mondial
Pour une audience mondiale, Cloudflare Workers tournent dans 300+ datacenters — latence très basse.
npx astro add cloudflare
Configuration :
// astro.config.mjs
import { defineConfig } from 'astro/config';
import cloudflare from '@astrojs/cloudflare';
export default defineConfig({
output: 'server',
adapter: cloudflare(),
});
Limites Cloudflare
L’environnement Workers n’est pas Node.js complet : certaines API Node (ex. fs) ne sont pas disponibles. Si le projet en dépend fortement, Cloudflare peut ne pas convenir.
Tableau comparatif des adaptateurs
| Adaptateur | Cas d’usage | Atouts | Limites |
|---|---|---|---|
| Node.js | Serveur auto-hébergé, VPS | Contrôle total, sans restriction | Ops à votre charge, coût plus élevé |
| Vercel | Projets perso, petites équipes | Quasi zéro config, ISR | Quota gratuit (100 Go bande passante/mois) |
| Netlify | Statique + dynamique | Edge Functions rapides | Limite de build (300 min/mois en gratuit) |
| Cloudflare | Audience mondiale, faible latence | Edge, prix bas | Environnement Workers, API Node partielles |
Recommandations :
- Blog, documentation : Vercel ou Netlify en priorité — gratuit souvent suffisant, déploiement simple
- E-commerce, SaaS : Vercel (ISR) ou Node.js auto-hébergé (contrôle total)
- Produit international : Cloudflare (accélération globale)
- Entreprise : Node.js auto-hébergé (données, souveraineté)
Pas de choix absolu : ça dépend du trafic, du budget et des contraintes. Mon blog est sur Vercel ; certains sites clients tournent en Node.js auto-hébergé — les deux fonctionnent bien.
Chapitre 4 : Mode hybride en pratique
SSR et SSG dans un même projet
Après le SSR pur, le point fort : le mode hybride. C’est là qu’Astro brille — vitesse SSG et flexibilité SSR ensemble.
Configurer le mode hybride
Changez output en 'hybrid' :
// astro.config.mjs
import { defineConfig } from 'astro/config';
import node from '@astrojs/node';
export default defineConfig({
output: 'hybrid', // SSG par défaut, SSR à la demande
adapter: node(),
});
Par défaut, toutes les pages restent en SSG. Pour une page dynamique, une ligne dans le frontmatter suffit.
Contrôle au niveau page
Comment activer le SSR sur une page ? Dans le frontmatter :
// src/pages/dashboard.astro (SSR)
---
export const prerender = false; // Pas de pré-rendu → SSR
const user = Astro.cookies.get('user');
---
<h1>Bon retour, {user?.name}</h1>
<p>Vous avez {user?.notifications} messages non lus</p>
prerender = false signifie : ne pas générer au build, rendre à la visite.
À l’inverse, avec output: 'server' (tout en SSR), pour forcer le SSG sur une page :
// src/pages/about.astro (SSG)
---
export const prerender = true; // Génération au build
---
<h1>À propos</h1>
<p>Contenu fixe, pré-généré, chargement très rapide.</p>
Récapitulatif (à ne pas inverser) :
output | Comportement par défaut | Changer une page |
|---|---|---|
'hybrid' | Toutes les pages SSG | export const prerender = false → SSR sur cette page |
'server' | Toutes les pages SSR | export const prerender = true → SSG sur cette page |
Au début j’inversais souvent ; la règle : hybrid = SSG d’abord, server = SSR d’abord.
Cas pratique : blog + espace utilisateur
Structure type pour un blog avec connexion :
Arborescence :
src/pages/
├── index.astro // Accueil (SSG)
├── about.astro // À propos (SSG)
├── blog/
│ ├── [slug].astro // Article (SSG)
│ └── index.astro // Liste articles (SSG)
├── login.astro // Connexion (SSR)
├── dashboard.astro // Espace utilisateur (SSR)
└── api/
└── comments.js // API commentaires (SSR)
Configuration :
// astro.config.mjs
export default defineConfig({
output: 'hybrid', // SSG par défaut
adapter: vercel(), // Déploiement Vercel
});
Page statique (sans config spéciale) :
// src/pages/blog/[slug].astro
---
// Pas de prerender → SSG par défaut en mode hybrid
import { getCollection } from 'astro:content';
export async function getStaticPaths() {
const posts = await getCollection('blog');
return posts.map(post => ({
params: { slug: post.slug },
props: { post },
}));
}
const { post } = Astro.props;
---
<article>
<h1>{post.data.title}</h1>
<div set:html={post.body} />
</article>
Page dynamique (SSR) :
// src/pages/dashboard.astro
---
export const prerender = false; // Active le SSR
// Vérifier la connexion
const token = Astro.cookies.get('token')?.value;
if (!token) {
return Astro.redirect('/login');
}
// Récupérer l'utilisateur depuis l'API
const user = await fetch(`https://api.example.com/user`, {
headers: { Authorization: `Bearer ${token}` }
}).then(res => res.json());
---
<div>
<h1>Bienvenue, {user.name}</h1>
<p>E-mail : {user.email}</p>
<p>Dernière connexion : {user.lastLogin}</p>
</div>
Route API (SSR automatique) :
// src/pages/api/comments.js
export async function POST({ request }) {
const { articleId, content } = await request.json();
// Enregistrer le commentaire
await db.comments.insert({
articleId,
content,
createdAt: new Date(),
});
return new Response(JSON.stringify({ success: true }), {
status: 200,
headers: { 'Content-Type': 'application/json' }
});
}
export async function GET({ url }) {
const articleId = url.searchParams.get('articleId');
const comments = await db.comments.findMany({
where: { articleId },
orderBy: { createdAt: 'desc' }
});
return new Response(JSON.stringify(comments), {
headers: { 'Content-Type': 'application/json' }
});
}
Bénéfices :
- Pages statiques (articles, accueil) : toujours très rapides, Lighthouse 95+, CDN
- Pages dynamiques (espace utilisateur) : données fraîches par utilisateur
- Routes API : backend intégré sans serveur séparé
- Build court : seules les pages statiques sont pré-rendues
Sur un projet récent — une cinquantaine d’articles + espace membre — le build a pris environ 20 secondes. Pages statiques instantanées, pages dynamiques souvent sous 100 ms. Le hybride est vraiment le bon compromis par défaut.
Chapitre 5 : Problèmes fréquents et bonnes pratiques
Pièges de configuration SSR et solutions
Voici les erreurs que j’ai rencontrées, avec les correctifs, pour éviter les mêmes écueils.
Problème 1 : Astro.clientAddress is only available when using output: 'server'
Cause : utilisation de Astro.clientAddress (IP client) alors que output reste 'static'.
Solution :
// astro.config.mjs
export default defineConfig({
output: 'server', // ou 'hybrid'
adapter: node(),
});
Astro.clientAddress, Astro.cookies, Astro.redirect() ne fonctionnent qu’en mode SSR (ou hybride avec page non pré-rendue).
Problème 2 : 404 en production, OK en local
Cause : mauvais adaptateur ou commande de build / répertoire de sortie incorrect sur la plateforme.
Solutions :
Vercel :
- Build :
npm run build - Sortie :
.vercel/output(automatique) - Ne pas surcharger les routes dans
vercel.json— laisser Astro gérer
Netlify :
- Build :
npm run build - Publication :
dist(statique) ou.netlify(SSR) - Si 404 persiste, vérifier
netlify.toml:[build] command = "npm run build" publish = "dist"
Problème 3 : page SSR lente (> 2 s)
Cause : serveur sous-dimensionné ou requêtes base lentes.
Solutions :
-
Cache :
// src/pages/api/news.js export async function GET() { const cached = await redis.get('news'); if (cached) { return new Response(cached, { headers: { 'Content-Type': 'application/json', 'Cache-Control': 'public, max-age=60' // Cache 60 s } }); } const news = await fetchNewsFromDB(); await redis.set('news', JSON.stringify(news), 'EX', 60); return new Response(JSON.stringify(news), { headers: { 'Content-Type': 'application/json', 'Cache-Control': 'public, max-age=60' } }); } -
Optimiser les requêtes :
- Index sur les colonnes filtrées
- Moins de JOIN inutiles
- Sélectionner uniquement les champs nécessaires
-
ISR sur Vercel :
adapter: vercel({ isr: { expiration: 300 } // Cache 5 minutes }),
Problème 4 : variables d’environnement absentes côté client
Cause : Astro distingue variables serveur et client.
Solution :
Côté serveur (pages SSR, routes API) :
const secret = import.meta.env.SECRET_KEY; // Toute variable d'env
Côté client (JavaScript dans le navigateur) :
const apiUrl = import.meta.env.PUBLIC_API_URL; // Préfixe PUBLIC_ obligatoire
Fichier .env :
SECRET_KEY=abc123 # Serveur uniquement
PUBLIC_API_URL=https://api.example.com # Client et serveur
Problème 5 : adapter.setApp is not a function
Cause : versions Astro et adaptateur incompatibles.
Solution :
# Mettre à jour
npm update astro @astrojs/node
# Ou versions alignées (voir la doc officielle)
npm install astro@latest @astrojs/node@latest
En général, garder Astro et l’adaptateur à jour suffit.
Synthèse des bonnes pratiques
- Hybride par défaut : sauf projet 100 % dynamique,
output: 'hybrid' - SSR ciblé :
prerender = falseseulement où c’est nécessaire - Assets statiques via CDN :
public/pour images, CSS, JS - Cache / ISR : listes peu volatiles (actualités) pour soulager le serveur
- Séparer les secrets : variables sensibles côté serveur ; config publique avec
PUBLIC_ - Surveiller : Vercel Analytics ou Google Analytics sur le temps de réponse SSR
Conclusion
En trois idées :
1. Le SSR n’est pas universel — utilisez-le à bon escient
Ne vous précipitez pas sur le SSR ni ne déclarez le SSG obsolète. Statique en SSG, dynamique en SSR ; pour la plupart des projets, le hybride est le meilleur équilibre. J’ai vu des blogs entièrement passés en SSR : performances en baisse, alors que le contenu ne change pas — le SSG via CDN reste plus rapide.
2. L’adaptateur suit la plateforme — la config est simple
Sur Vercel/Netlify/Cloudflare : npx astro add [platform]. En auto-hébergé : npx astro add node, environ cinq minutes. La pratique est plus directe que la doc ne le suggère.
3. Le mode hybride combine vitesse et personnalisation
C’est l’essence d’Astro : pages statiques avec Lighthouse 95+, pages dynamiques personnalisées, build et coûts maîtrisés. Pour mes nouveaux projets, le hybride est le premier choix.
Prochaines étapes
Après cette lecture :
- Essayer tout de suite :
npx astro add nodesur votre projet Astro — cinq minutes pour toucher au SSR - Lister vos besoins : quelles pages doivent être dynamiques, lesquelles restent statiques
- Aller plus loin : les Server Islands d’Astro permettent d’embarquer des composants SSR dans une page SSG — encore plus flexible
En cas de blocage, la communauté Discord Astro répond vite et accueille bien les questions.
Dernier rappel : évitez la sur-ingénierie. Avec un trafic modeste (< 10 000 PV/jour), un site statique peut suffire — le SSR ajoute de la complexité sans gain métier évident. La technique doit servir le produit, pas l’inverse.
Bon déploiement — et n’hésitez pas à laisser un commentaire si vous bloquez sur un point précis.
Guide complet SSR Astro : 3 étapes pour activer le rendu côté serveur
Comprendre SSR/SSG, configurer les adaptateurs Vercel/Netlify/Node.js et maîtriser le mode hybride — de l'initiation à la mise en production en 30 minutes
⏱️ Estimated time: 30 min
- 1
Step 1: Comprendre SSR vs SSG : quand activer le SSR
Critères de décision :
SSG (génération de site statique)
• Le contenu est déterminé au moment du build
• Articles de blog, pages produit, page À propos
• Contenu peu changeant : le SSG convient parfaitement
SSR (rendu côté serveur)
• Le contenu peut changer à chaque visite
• Après connexion : « Bon retour, Zhang San »
• Cours boursiers en temps réel, quantité dans le panier
• Chaque visiteur voit quelque chose de différent → SSR obligatoire
5 scénarios où le SSR est indispensable :
1. Authentification et contenu personnalisé
• L'exemple typique : la connexion
• Impossible de savoir au build qui se connectera et quel nom afficher
• Page d'accueil d'une plateforme d'apprentissage : « Reprendre : leçon 5 »
• Il faut du SSR, généré selon la progression de l'utilisateur connecté
2. Données en temps réel
• Météo, bourse, scores sportifs
• Ces données changent chaque minute
• Rebuilder le site chaque minute n'a pas de sens
• Avec le SSR, chaque visite récupère les données les plus récentes
3. Requêtes base de données
• Recherche produits sur un site e-commerce
• Chaque mot-clé donne des résultats différents
• Impossible de pré-générer toutes les pages de résultats possibles
• Le SSR interroge la base à la volée lors de la recherche
4. Routes API
• Soumission de formulaires, upload de fichiers, appels API tiers
• Tout cela nécessite une logique backend
• Le mode SSR d'Astro permet src/pages/api/xxx.js
• Sans serveur backend séparé
5. Tests A/B et recommandations personnalisées
• Contenu selon géolocalisation, heure de visite, historique
• Page d'accueil type marketplace : recommandations différentes par utilisateur
• Cette personnalisation exige le SSR - 2
Step 2: 3 étapes pour activer le SSR : adaptateur et configuration
Étape 1 : installer un adaptateur
Adaptateur Vercel :
• Commande : npx astro add vercel
• Pour déploiement sur Vercel
Adaptateur Netlify :
• Commande : npx astro add netlify
• Pour déploiement sur Netlify
Adaptateur Node.js :
• Commande : npx astro add node
• Pour serveur auto-hébergé ou déploiement Docker
Étape 2 : configurer astro.config.mjs
• Ajouter output: 'server' (mode SSR)
• Ajouter la configuration adaptateur :
import vercel from '@astrojs/vercel/serverless';
export default {
output: 'server',
adapter: vercel()
}
Étape 3 : déployer sur la plateforme
Vercel :
• Connecter le dépôt GitHub
• Vercel détecte automatiquement la config SSR Astro
• Déploiement en un clic
Netlify :
• Connecter le dépôt GitHub
• Configurer le répertoire functions si besoin
• Déploiement automatique
Node.js :
• npm run build → dossier dist
• node dist/server/entry.mjs pour démarrer le serveur
• Ou déploiement Docker - 3
Step 3: Mode hybride : SSR et SSG ensemble
Avantages du mode hybride :
• SSR et SSG dans un même projet
• Pages statiques en SSG (articles de blog, Lighthouse 95+, CDN plus rapide)
• Pages dynamiques en SSR (espace utilisateur, personnalisation)
• Temps de build maîtrisé, coûts serveur contenus
Configuration :
• astro.config.mjs : output: 'hybrid'
• Frontmatter par page : prerender: true/false
- Pages statiques : prerender: true
- Pages dynamiques : prerender: false ou non défini
Bonnes pratiques :
Hybride par défaut
• Sauf si toutes les pages exigent le SSR, output: 'hybrid' est le meilleur choix
SSR à la demande
• prerender = false uniquement sur les pages vraiment dynamiques
Assets statiques via CDN
• Images, CSS, JS dans public/
• Servis par le CDN, pas par le SSR
Stratégie de cache
• Pour contenu dynamique peu volatile (liste d'actualités), cache ou ISR pour alléger le serveur
FAQ
Quand choisir le SSR plutôt que le SSG ?
• Contenu figé au build → SSG (articles, pages produit, À propos — peu changeant)
• Contenu variable à chaque visite → SSR (message de bienvenue après connexion, cours boursiers, panier — chaque visiteur voit autre chose)
5 scénarios SSR obligatoires :
1) Authentification et personnalisation :
• Connexion : impossible de savoir au build qui se connecte
• « Reprendre : leçon 5 » sur une plateforme d'apprentissage → SSR selon la progression
2) Données temps réel :
• Météo, bourse, scores — changent chaque minute
• Rebuild permanent impossible ; le SSR récupère les données à chaque visite
3) Requêtes base de données :
• Recherche e-commerce : chaque mot-clé = résultats différents
• Impossible de tout pré-générer ; requête en temps réel au SSR
4) Routes API :
• Formulaires, uploads, API tiers — logique backend
• Routes src/pages/api/xxx.js en mode SSR, sans backend séparé
5) Tests A/B et recommandations :
• Contenu selon géo, heure, historique
• Recommandations différentes par utilisateur → SSR
Comment configurer le SSR Astro ? Quelles étapes ?
1 — Installer l'adaptateur :
• Vercel : npx astro add vercel
• Netlify : npx astro add netlify
• Node.js : npx astro add node (auto-hébergé ou Docker)
2 — astro.config.mjs :
• output: 'server' pour le mode SSR
• Exemple adaptateur :
import vercel from '@astrojs/vercel/serverless';
export default { output: 'server', adapter: vercel() }
3 — Déploiement :
• Vercel : dépôt GitHub, détection auto, un clic
• Netlify : dépôt GitHub, répertoire functions si besoin
• Node.js : npm run build, node dist/server/entry.mjs ou Docker
Quel adaptateur choisir ? Vercel, Netlify, Node.js ?
Vercel :
• @astrojs/vercel/serverless, déploiement Vercel
• npx astro add vercel
• GitHub + détection auto + déploiement simple
Netlify :
• @astrojs/netlify/functions, déploiement Netlify
• npx astro add netlify
• GitHub + répertoire functions si besoin
Node.js :
• @astrojs/node, serveur ou Docker
• npx astro add node
• npm run build puis node dist/server/entry.mjs
Conseil : sur Vercel/Netlify/Cloudflare, npx astro add [platform] suffit. En auto-hébergé, npx astro add node prend environ 5 minutes. La pratique est plus simple que la doc ne le laisse croire.
Qu'est-ce que le mode hybride ? Comment le configurer ?
• SSR et SSG dans un même projet
• Statique en SSG (blog, Lighthouse 95+, CDN)
• Dynamique en SSR (espace utilisateur)
• Build et coûts serveur maîtrisés
Configuration :
• output: 'hybrid' dans astro.config.mjs
• prerender: true/false par page
- Statique : prerender: true
- Dynamique : prerender: false ou absent
Bonnes pratiques :
• Hybride par défaut (sauf projet 100 % dynamique)
• SSR seulement où nécessaire (prerender = false)
• Assets dans public/ → CDN
• Cache ou ISR pour listes peu volatiles
C'est l'essence d'Astro : pages statiques rapides, pages dynamiques personnalisées.
Le SSR dégrade-t-il les performances ? Quand s'en passer ?
• Le SSR est un peu plus lent que le SSG (rendu à chaque requête)
• Serveurs et CDN modernes : écart souvent acceptable
Évitez la sur-ingénierie :
• Trafic modeste (< 10 000 PV/jour) : un site statique peut suffire
• Pas besoin de SSR pour ajouter de la complexité
• La technique doit servir le métier
Le SSR n'est pas universel. SSG pour le statique, SSR pour le dynamique, hybride pour la plupart des projets.
J'ai vu des blogs entièrement passés en SSR : performances en baisse, alors que le contenu ne change pas — le SSG via CDN reste plus rapide.
13 min de lecture · Publié le: 2 déc. 2025 · Mis à jour le: 27 juil. 2026
Guide Astro
Si vous arrivez depuis la recherche, le plus rapide est de passer à l’article précédent ou suivant de cette série.
Précédent
Astro View Transitions : 2 lignes de code pour une expérience fluide digne d'une app
L'API View Transitions apporte à votre site Astro des transitions de page dignes du natif, sans React/Vue — 2 lignes de code suffisent pour une expérience fluide type SPA. Guide complet avec cas pratique et bonnes pratiques.
Partie 9 sur 18
Suivant
Astro vs Next.js : la vérité technique derrière 40 % de performance en plus sur les sites statiques
Comparaison approfondie d'Astro et Next.js pour les sites statiques : performance, fonctionnalités et écosystème. Astro ~40 % plus rapide, ~90 % de JS en moins ; Next.js avantageux pour le contenu dynamique et l'écosystème React. Données de benchmark, arbre de décision et guide de déploiement.
Partie 11 sur 18



Commentaires
Connectez-vous avec GitHub pour laisser un commentaire