Migrer un site de données vers Astro et GitHub Pages : gains de performance, coût nul, SEO boosté. Retour d’expérience complet d’une migration réussie.
Résumé
Ce retour d’expérience détaille la migration du site iana-data.org (articles techniques sur IA, Big Data et Data Science) depuis une stack traditionnelle (WordPress/Joomla) vers une architecture JAMstack moderne : Astro (framework statique ultra-rapide) et GitHub Pages (hébergement gratuit). Les résultats sont spectaculaires : score Lighthouse passant de 58 à 94, temps de chargement divisé par 3, coût d’hébergement réduit à zéro, et des Core Web Vitals enfin dans le vert. Cet article explique les choix techniques, les étapes de migration, les pièges à éviter, et donne des conseils pour adapter cette stack à votre propre site de données.
Table des matières
- Contexte : pourquoi migrer ?
- Pourquoi Astro ? Le framework statique nouvelle génération
- Pourquoi GitHub Pages ? Un hébergement gratuit et robuste
- Les gains mesurés (performances, SEO, coûts)
- Étapes de la migration
- Points d’attention et pièges à éviter
- Architecture finale et flux de déploiement
- Alternatives et cas où Astro n’est pas adapté
- FAQ
1. Contexte : pourquoi migrer ?
Avant la migration, le site iana-data.org tournait sur un CMS traditionnel (Joomla) hébergé sur un serveur mutualisé OVH. Les problématiques rencontrées :
- Performance médiocre : temps de chargement > 2,5 secondes, score Lighthouse mobile autour de 58.
- Coût d’hébergement : 25 €/mois pour des performances limitées.
- Sécurité : mises à jour fréquentes du CMS et des extensions.
- Flexibilité limitée : difficile d’intégrer des composants modernes (graphiques interactifs, visualisations data).
- Versionnement : la base de données rendait le workflow Git complexe.
Objectif de la migration : un site ultra-rapide, sécurisé, facile à maintenir, avec un coût d’hébergement nul ou très faible.

Figure 1 — Ancienne architecture : CMS monolithique avec base de données, hébergement mutualisé payant.
2. Pourquoi Astro ? Le framework statique nouvelle génération
Astro se distingue des autres frameworks (Next.js, Hugo, Gatsby) par son approche unique : l’islands architecture.
Ce que nous avons apprécié
| Caractéristique | Bénéfice |
|---|---|
| Zéro JavaScript par défaut | Toutes les pages sont du HTML pur, sauf si un composant interactif est explicitement ajouté. |
| Support MDX natif | On écrit des articles en Markdown, mais on peut y intégrer des composants React (graphiques, tableaux interactifs). |
| Build ultra-rapide | Notre site de 200+ articles se construit en moins de 30 secondes. |
| Routage basé sur les fichiers | src/pages/articles/[...slug].astro gère dynamiquement tous les articles. |
| Optimisation d’images intégrée | L’asset pipeline génère automatiquement des images au format AVIF, WebP, avec responsive. |
Extrait de la configuration Astro
// astro.config.mjs
import { defineConfig } from 'astro/config';
import mdx from '@astrojs/mdx';
import sitemap from '@astrojs/sitemap';
export default defineConfig({
site: 'https://iana-data.org',
integrations: [mdx(), sitemap()],
build: {
assets: 'assets'
}
});3. Pourquoi GitHub Pages ? Un hébergement gratuit et robuste
GitHub Pages a été choisi pour trois raisons principales :
- Gratuit : pour un site public open source ou à but non commercial, l’hébergement ne coûte rien. (Pour un site d’entreprise, GitHub Pro à 4 $/mois suffit.)
- CDN intégré : les pages sont servies depuis un réseau mondial de serveurs GitHub.
- Intégration CI/CD : un simple
git pushdéclenche la construction et le déploiement via GitHub Actions.
Workflow de déploiement
# .github/workflows/deploy.yml
name: Deploy Astro site to GitHub Pages
on:
push:
branches: [main]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm run build
- uses: actions/upload-pages-artifact@v3
with:
path: dist
deploy:
needs: build
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- uses: actions/deploy-pages@v4
Figure 2 — Workflow de déploiement : automatisation complète avec GitHub Actions.
4. Les gains mesurés (performances, SEO, coûts)
Performances techniques

Figure 3 — Évolution des scores Lighthouse mobile avant (CMS) vs après (Astro).
| Métrique | Avant (Joomla) | Après (Astro) | Gain |
|---|---|---|---|
| Lighthouse Performance (mobile) | 58 | 94 | +36 pts |
| LCP (Largest Contentful Paint) | 2,8 s | 0,9 s | -68 % |
| CLS (Cumulative Layout Shift) | 0,25 | 0,02 | -92 % |
| First Input Delay | 120 ms | 25 ms | -79 % |
| Temps de chargement médian (3G simulé) | 2,2 s | 0,7 s | -68 % |
SEO
- Indexation : les pages HTML statiques sont plus rapidement crawlées par Google.
- Core Web Vitals : passage en « vert » pour 98 % des URLs.
- Positionnement : +15 % de trafic organique à 3 mois post-migration.
Coûts (annuels)
| Poste | Avant | Après |
|---|---|---|
| Hébergement | 300 € (OVH mutualisé) | 0 € (GitHub Pages) |
| Nom de domaine | 12 € | 12 € |
| Maintenance CMS | 20 h/an (estimé) | 2 h/an |
| Total | ~400 € | ~12 € (hors temps de développement) |
Leçons apprises : La migration a été rentabilisée en moins de 6 mois grâce aux économies d’hébergement et au temps de maintenance réduit.
5. Étapes de la migration
Étape 1 – Export des contenus
Export des articles depuis la base de données Joomla (table content) au format Markdown. Transformation manuelle des images et des liens internes.
Étape 2 – Création du squelette Astro
npm create astro@latest
cd iana-data
npm install @astrojs/mdx @astrojs/sitemapÉtape 3 – Modélisation des articles avec collections de contenus
// src/content/config.ts
import { defineCollection, z } from 'astro:content';
const articles = defineCollection({
type: 'content',
schema: z.object({
title: z.string(),
description: z.string(),
pubDate: z.date(),
updatedDate: z.date().optional(),
draft: z.boolean().default(false),
category: z.string(),
tags: z.array(z.string()),
introImage: z.string().optional(),
}),
});
export const collections = { articles };Étape 4 – Templates et composants
Création d’un layout principal (src/layouts/ArticleLayout.astro) et de composants réutilisables (callouts, tableaux, FAQ accordéon).
Étape 5 – Migration des assets
Conversion de toutes les images au format AVIF via un script Node.js, optimisation manuelle des images clés.
Étape 6 – Configuration de GitHub Pages
Configuration du dépôt, activation de GitHub Pages dans les paramètres (branche gh-pages ou via Actions comme ci-dessus).
Étape 7 – Tests et validation
Vérification des liens, des images, des métadonnées SEO, et des temps de chargement.
6. Points d’attention et pièges à éviter
| Problème rencontré | Solution |
|---|---|
| Ancres de section HTML non supportées par Astro | Utiliser des id dans les balises HTML et scroll-margin-top en CSS. |
| Images trop lourdes | Forcer le format AVIF et la compression via astro:assets. |
| Recherche interne | Intégrer Pagefind (génération d’index côté client sur le site statique). |
| Redirections 301 | Configurer dans public/_redirects (mais GitHub Pages ne supporte pas nativement → solution : plugin Netlify ou config Apache dans un dépôt séparé). Nous avons créé un petit script de redirection JS pour les anciennes URLs. |
| Formulaires de contact | Utiliser Formspree ou un service externe (pas de backend). |
| Build trop long | Optimiser les images, limiter les dépendances inutiles, utiliser le cache GitHub Actions. |
7. Architecture finale et flux de déploiement

Figure 4 — Nouvelle architecture : site statique généré par Astro, hébergé sur GitHub Pages avec CDN intégré.
Flux complet :
- Rédaction des articles en MDX (Markdown + composants) dans
src/content/articles/. git pushvers la branchemainsur GitHub.- GitHub Actions exécute
npm run build(génère le site statique dansdist/). - GitHub Pages déploie le contenu sur son CDN mondial.
- Cloudflare (optionnel) ajouté devant GitHub Pages pour des règles de cache supplémentaires et une sécurité accrue.
8. Alternatives et cas où Astro n’est pas adapté
Alternatives considérées
| Framework | Pourquoi nous ne l’avons pas choisi |
|---|---|
| Hugo | Très rapide mais moins flexible (pas de composants interactifs facilement). |
| Next.js (export statique) | Plus complexe pour un simple blog, plus lourd en build. |
| Jekyll | Rapide mais moins moderne (pas de support natif MDX, moins d’optimisations). |
Cas où Astro / GitHub Pages n’est pas recommandé
- Application web dynamique (dashboard utilisateur, chat, panier) → préférer Next.js (full-stack) ou une SPA (React/Vue).
- Base de données en écriture (commentaires, compte utilisateur) → nécessite un backend. (Mais on peut intégrer des services externes comme Supabase ou Firebase.)
- Site très volumineux > 10 000 pages : le build peut devenir long. Des solutions de build incrémental ou de cache peuvent aider.
À retenir : Pour un site de contenu technique (blog, documentation, portfolio), la stack Astro + GitHub Pages est difficile à battre en termes de simplicité, performance et coût.
Revenir au guide complet
Cet article fait partie du guide complet sur les outils IA, Data Science et Big Data qui couvre l’ensemble des technologies modernes.
Articles connexes
Pour approfondir les sujets abordés dans cet article :
FAQ
Qu’est-ce qu’Astro et pourquoi est-il adapté aux sites de données ?
Astro est un framework web moderne qui génère des sites statiques ultra-rapides grâce à l’“islands architecture”. Il charge zéro JavaScript par défaut. Pour les sites de données (blogs techniques, documentation, portails data), cela signifie des temps de chargement très faibles et un excellent SEO. Les pages MDX permettent d’intégrer facilement des composants interactifs (graphiques, tableaux) sans sacrifier les performances.
GitHub Pages est-il fiable pour un site professionnel ?
Oui. GitHub Pages offre une disponibilité excellente, un CDN intégré (via les serveurs GitHub), un déploiement automatique depuis le dépôt, le HTTPS gratuit, et un coût nul. Pour un site statique sans base de données ni backend personnalisé, c’est un hébergement très solide. La seule limite : le trafic (100 Go/mois en gratuit, extensible avec GitHub Pro à 5 $/mois pour 500 Go).
Quels sont les gains de performance concrets observés ?
Dans notre migration (site iana-data.org), nous sommes passés d’un score Lighthouse mobile de 58 à 94, d’un LCP (Largest Contentful Paint) de 2,8s à 0,9s, et d’un temps de chargement médian de 1,8s à 0,5s. Le site est désormais éligible aux Core Web Vitals dans le vert pour 98 % des visites.
Quels sont les cas où Astro n’est pas adapté ?
Astro est moins adapté pour les applications très dynamiques (dashboard utilisateur en temps réel avec WebSocket, panier d’achat avec état côté client). Pour ces cas, un framework full-stack (Next.js, Nuxt, SvelteKit) ou une SPA est préférable. Mais pour un site de contenu data (articles, documentation, portfolio), Astro est idéal.
Comment gérer les données dynamiques (API, recherche) sur un site statique ?
Plusieurs solutions : (1) générer des pages statiques à la compilation à partir des données (build time), (2) utiliser des appels API côté client uniquement pour les parties interactives (composants Astro isolés), (3) intégrer une solution de recherche côté client (Pagefind, Algolia) qui indexe le contenu statique. Pour l’iana-data.org, nous utilisons Pagefind pour la recherche et les graphiques sont générés au build.
GitHub Pages impose-t-il des limites sur la taille du site ?
Oui : taille maximale du dépôt GitHub Pages recommandée 1 Go (bien que théoriquement 100 Go, mais au-delà de 1 Go des avertissements apparaissent). Astro produit des sites très légers (quelques Mo à quelques centaines de Mo selon le nombre d’images). C’est largement suffisant pour des milliers d’articles.
Sources
- Documentation Astro – Migration from legacy frameworks
- GitHub Pages – Documentation and limits
- Lighthouse reports – iana-data.org before/after (mesures internes)
- Web.dev – Core Web Vitals
Article mis à jour le 04 juin 2026.