Génération de site statique pour site indépendant : JAMstack, temps de build, déploiement CDN et SEO
1. Quel problème JAMstack résout-il vraiment ?
Les trois lettres de JAMstack désignent JavaScript, API et Markup. L’architecture traditionnelle suit le schéma “requête utilisateur → le serveur exécute une requête en base de données → rendu du HTML → réponse”, et chaque étape prend du temps. JAMstack effectue ces trois étapes en amont, au moment du build, puis déploie les fichiers HTML générés sur un CDN mondial : à la visite, le CDN renvoie directement le fichier, sans passer par aucun backend.
Un constat contre-intuitif : le principal bénéfice de JAMstack n’est ni la sécurité ni le coût, mais le SEO et la vitesse du premier écran. Pour une page générée dynamiquement depuis une base de données, le TTFB se situe généralement entre 300 et 800 millisecondes, sans compter le téléchargement et l’exécution du JavaScript ; le HTML statique, lui, est renvoyé directement par le CDN, avec un TTFB souvent inférieur à 100 millisecondes, et le crawler reçoit un contenu déjà entièrement rendu. Pour savoir comment mesurer les Core Web Vitals, voir Optimiser les Core Web Vitals.
Mais statique ne veut pas dire “figé”. Les parties de la page qui ont besoin d’interaction (formulaire de demande, stock en temps réel, conversion de devises) sont prises en charge côté navigateur par JavaScript qui appelle des API, sans affecter la distribution statique du HTML. C’est le sens de “compléter le dynamique par API”. Pour choisir un CDN, voir Accélération mondiale par CDN.
| Type d’architecture | TTFB | Contenu reçu par le crawler | Coût serveur (mois) | Types de pages adaptés |
|---|---|---|---|---|
| HTML statique + CDN | 50 à 100 millisecondes | HTML entièrement rendu | 0 à 50 yuans | Articles, fiches produit, page À propos |
| SSG + ISR (Next.js) | 100 à 300 millisecondes | HTML complet | 200 à 800 yuans | Articles + pages de liste à actualiser régulièrement |
| Rendu dynamique SSR | 300 à 800 millisecondes | Attente du rendu nécessaire | 1 000 à 5 000 yuans | Pages personnalisées par utilisateur, pages de données en temps réel |
| Rendu purement front-end SPA | 20 à 50 millisecondes (coquille vide) | HTML vide + JS | 0 à 200 yuans | Back-office d’administration, inadapté aux pages marketing |
2. Temps de build : le premier goulot d’étranglement quand les pages se multiplient
Quand un site compte peu de pages, le temps de build n’est pas un problème : Hugo génère 50 pages en quelques secondes. Mais au-delà de 500 pages, les écarts se creusent entre frameworks : Hugo reste sous les 30 secondes, Next.js peut monter à 3-5 minutes, et Gatsby dépasse même les 10 minutes. Le temps de build joue sur deux choses : l’attente avant qu’un contenu soit en ligne, et l’expérience de développement quand corriger une faute de frappe prend plusieurs minutes.
Cas 1 : un blog B2B avec 300 articles accumulés en deux ans, construit avec Next.js. Chaque modification du titre d’un article déclenche un build complet de 4 minutes, et l’équipe commence à éviter de toucher au contenu. La solution : activer l’Incremental Static Regeneration (ISR) de Next.js ou passer à un cache de couche contenu pour ne reconstruire que les routes concernées, ce qui fait tomber le build de 4 minutes à 20 secondes.
Cas 2 : un site catalogue produit avec 2000 SKU, une page de détail par SKU. Un build complet Next.js prend 12 minutes, lancé automatiquement une fois par jour. À ce volume, mieux vaut passer directement à Hugo ou Eleventy : le build descend sous la minute. Pour compresser les images en masse, voir SEO des images et WebP.
| Volume de pages | Temps de build Hugo | Temps de build Next.js SSG | Solution recommandée |
|---|---|---|---|
| Moins de 100 pages | 2 à 5 secondes | 30 à 60 secondes | Peu importe, la différence est minime |
| 100 à 500 pages | 5 à 20 secondes | 1 à 3 minutes | Next.js reste acceptable, activez le build incrémental |
| 500 à 2000 pages | 20 à 60 secondes | 3 à 8 minutes | Privilégiez Hugo, Next.js demande une lourde optimisation |
| Plus de 2000 pages | 1 à 3 minutes | Plus de 10 minutes | Hugo obligatoire ou build fragmenté |
3. Déploiement CDN : combien de temps entre le commit et la mise en ligne mondiale
Le déploiement JAMstack est simple : git push → build automatique par la plateforme → génération des fichiers statiques → diffusion sur les nœuds CDN mondiaux. Vercel et Netlify prennent en charge Next.js et Eleventy nativement, Cloudflare Pages gère bien Hugo et les fichiers purement statiques. Du commit à l’accessibilité mondiale, le déploiement prend généralement entre 30 secondes et 3 minutes.
Un piège fréquent : l’expiration du cache CDN. Si vous modifiez le prix d’un produit et redéployez, certains nœuds de périphérie peuvent encore servir l’ancienne version, pendant 24 heures au maximum. La solution : déclencher manuellement un rafraîchissement complet du CDN après le déploiement, ou ajouter un hash de contenu dans l’URL (nom de fichier avec hash, par exemple style.abc123.css), le nouveau fichier remplaçant alors automatiquement l’ancien. Pour configurer la stratégie de cache, voir Stratégie de cache du site.
Exemple concret : une marque de luminaires à l’international utilise Next.js SSG, et le build complet de 200 pages produit prend 3 minutes. Un collègue du marketing modifie une photo produit : après le commit, il faut attendre 3 minutes de build puis 1 minute de propagation CDN avant que les utilisateurs voient la nouvelle image. Après activation de l’ISR avec une revalidation toutes les 60 secondes par page, la nouvelle version est visible en 60 secondes maximum, et le build est passé de 3 minutes à 40 secondes.
| Plateforme de déploiement | Quota gratuit | Nombre de nœuds mondiaux | Limite de temps de build | Cas d’usage |
|---|---|---|---|---|
| Vercel | 100 Go de bande passante/mois | 300+ | 6 minutes/build | Projet Next.js, travail en équipe |
| Netlify | 100 Go de bande passante/mois | 100+ | 30 minutes/build | Hugo/Eleventy, fonctionnalités de formulaire |
| Cloudflare Pages | Bande passante illimitée | 300+ | Aucune limite stricte | Gros volume de pages, coût sensible |
| Auto-hébergé + Cloudflare CDN | CDN gratuit, origine facturée à part | 300+ | Contrôle total | Nécessite un pipeline de build personnalisé |
4. Point de vue SEO : pourquoi les sites statiques ont un avantage naturel
Les robots de Google savent exécuter JavaScript, mais leur temps d’exécution et leurs ressources sont limités. Le HTML statique renvoie le contenu complet dès la première requête : le robot n’attend pas l’exécution du JS et ne rate rien si le JS échoue. Les bénéfices SEO sont directs : indexation plus rapide, moins d’erreurs de rendu, données structurées toujours lues.
Autre atout : le sitemap et la structure d’URL se génèrent une fois pour toutes au build, sans requête dynamique à la base de données. Nommage des fichiers, arborescence, balises canonical : tout se fige dans le script de build, sans le classique « contenu dupliqué entre pages tag et pages article » des sites dynamiques. Pour optimiser votre sitemap, voir Optimisation du sitemap XML.
Mais un point contre-intuitif : le statique n’est pas meilleur sur tous les indicateurs SEO. Si votre contenu change souvent (tarifs ou stocks mis à jour chaque jour), la version statique se périme : l’utilisateur ouvre une page et découvre un prix vieux de 24 heures, ce qui fait grimper le taux de rebond. Ces pages doivent récupérer les données en temps réel via une API côté client, pas être figées dans le HTML statique.
Autre détail pratique : le traitement des images. WordPress génère automatiquement plusieurs tailles à l’upload, alors que Hugo et 11ty demandent de l’écrire dans le script de build. Si vous oubliez cette étape, l’utilisateur télécharge une image originale de 4000 pixels de large sur son mobile et le LCP passe de 1,5 seconde à 4 secondes. Pour configurer la compression et la conversion de format, voir SEO des images et format WebP.
| Critère SEO | Site statique | Site dynamique | Cause de l’écart |
|---|---|---|---|
| Complétude du contenu au premier écran pour le robot | 100 % | 60 % à 90 % (selon l’exécution du JS) | Aucune attente de rendu |
| TTFB | 50 à 100 millisecondes | 300 à 800 millisecondes | Aucune requête à la base de données |
| LCP | 1,0 à 1,8 seconde | 2,0 à 4,0 secondes | Diffusion directe par le CDN + aucun backend |
| Fraîcheur du contenu | Faible (instantané au build) | Élevée (dernière version à chaque requête) | Le statique est une arme à double tranchant |
| Fiabilité des données structurées | 100 % | 80 % à 95 % | Écrites dans le HTML au build |
FAQ — Questions fréquentes
JAMstack face à WordPress classique : quel avantage SEO concret ?
Que faire si le build est trop long, 8 minutes pour 500 pages Next.js ?
Comment pousser les mises à jour de contenu d’un site statique vers le CDN ? Faut-il vider le cache manuellement ?
Quelles pages ne faut-il pas rendre statiques ?
Hugo ou Next.js SSG : comment choisir ?
Déployer un site JAMstack sur Cloudflare Pages, ça coûte quelque chose ?
Pour conclure
Le JAMstack n’a rien d’un concept nouveau : en substance, il s’agit de « faire à l’avance tout ce qui peut l’être ». Pour un site B2B indépendant principalement dédié à l’affichage de contenu, cette architecture est avantageuse sur les trois plans à la fois — performance, coût et SEO — et il n’y a presque aucune raison de la refuser. Le seul obstacle, c’est que l’équipe doit accepter ce mode de travail « généré au build » : modifier du contenu implique d’attendre le build, on ne voit pas le résultat immédiatement comme avec WordPress.
Commencez petit : migrez d’abord la partie blog vers un site statique avec Hugo ou Eleventy, en laissant le site WordPress principal en place. Au bout d’un mois, comparez le LCP, la vitesse d’indexation et le coût serveur avant et après la migration. Si le gain est net, migrez ensuite progressivement les pages produit et la page d’accueil. L’avantage de cette migration progressive : vous pouvez revenir en arrière à tout moment.
Une phrase à retenir : l’avantage d’un site statique n’est pas d’être « statique », mais que le crawler et l’utilisateur reçoivent au même instant la même version complète du contenu — un luxe rare à l’ère du rendu dynamique.
