Outils et technologies

Pourquoi migrer un site de données vers Astro et GitHub Pages ? Retour d'expérience 2026

Migration site statique Astro et GitHub Pages : gains de performance, SEO, coûts. Retour d'expérience complet d’une migration réussie.

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.

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.

Schéma de l’ancienne stack : CMS (Joomla) + base de données MySQL + serveur mutualisé

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éristiqueBénéfice
Zéro JavaScript par défautToutes les pages sont du HTML pur, sauf si un composant interactif est explicitement ajouté.
Support MDX natifOn écrit des articles en Markdown, mais on peut y intégrer des composants React (graphiques, tableaux interactifs).
Build ultra-rapideNotre site de 200+ articles se construit en moins de 30 secondes.
Routage basé sur les fichierssrc/pages/articles/[...slug].astro gère dynamiquement tous les articles.
Optimisation d’images intégréeL’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 push dé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
Schéma du workflow : git push → GitHub Actions (build) → GitHub Pages (CDN)

Figure 2 — Workflow de déploiement : automatisation complète avec GitHub Actions.

4. Les gains mesurés (performances, SEO, coûts)

Performances techniques

Graphique comparatif des métriques Lighthouse avant/après migration

Figure 3 — Évolution des scores Lighthouse mobile avant (CMS) vs après (Astro).

MétriqueAvant (Joomla)Après (Astro)Gain
Lighthouse Performance (mobile)5894+36 pts
LCP (Largest Contentful Paint)2,8 s0,9 s-68 %
CLS (Cumulative Layout Shift)0,250,02-92 %
First Input Delay120 ms25 ms-79 %
Temps de chargement médian (3G simulé)2,2 s0,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)

PosteAvantAprès
Hébergement300 € (OVH mutualisé)0 € (GitHub Pages)
Nom de domaine12 €12 €
Maintenance CMS20 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 AstroUtiliser des id dans les balises HTML et scroll-margin-top en CSS.
Images trop lourdesForcer le format AVIF et la compression via astro:assets.
Recherche interneIntégrer Pagefind (génération d’index côté client sur le site statique).
Redirections 301Configurer 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 contactUtiliser Formspree ou un service externe (pas de backend).
Build trop longOptimiser les images, limiter les dépendances inutiles, utiliser le cache GitHub Actions.

7. Architecture finale et flux de déploiement

Schéma de la nouvelle stack : Astro (build statique) → GitHub Actions → GitHub Pages (CDN)

Figure 4 — Nouvelle architecture : site statique généré par Astro, hébergé sur GitHub Pages avec CDN intégré.

Flux complet :

  1. Rédaction des articles en MDX (Markdown + composants) dans src/content/articles/.
  2. git push vers la branche main sur GitHub.
  3. GitHub Actions exécute npm run build (génère le site statique dans dist/).
  4. GitHub Pages déploie le contenu sur son CDN mondial.
  5. 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

FrameworkPourquoi nous ne l’avons pas choisi
HugoTrès rapide mais moins flexible (pas de composants interactifs facilement).
Next.js (export statique)Plus complexe pour un simple blog, plus lourd en build.
JekyllRapide 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.