Aller au contenu
Halloween : rien ne fait plus peur qu'un noindex oublié en prod. Livraison offerte dès 59 € Imprimé à la commande à Barjac, dans le Gard

Comment j’ai construit 200 000 pages en Python

Quand j’ai décidé de créer un site de 200 000 pages statiques, la première question a été : quel générateur utiliser ? Après avoir évalué Hugo, Eleventy et Jekyll, j’ai opté pour un générateur maison en Python. Voici pourquoi, et comment ça s’est passé.

Pourquoi un générateur maison

Les générateurs de sites statiques classiques sont conçus pour des sites de quelques centaines à quelques milliers de pages. À 200 000 pages, ils montrent leurs limites : temps de build excessifs, consommation mémoire explosive et manque de souplesse pour les pipelines de données complexes.

Python offrait exactement ce dont j’avais besoin : un écosystème riche pour le traitement de données (pandas, json), une gestion fine de la mémoire avec les générateurs et la possibilité de paralléliser le build avec multiprocessing.

Architecture du pipeline

Le pipeline se décompose en trois étapes : import des données (CSV DATAtourisme vers JSON structuré), enrichissement (scores, descriptions, géocodage) et génération (gabarits HTML avec emplacements). Chaque étape est indépendante et idempotente. Pour explorer les approches de génération statique, Docteur Jekyll est une ressource précieuse sur les générateurs statiques et leurs architectures.

Le défi de la mémoire

Charger 200 000 fiches en mémoire n’est pas anodin. La première version du script tentait de tout garder en RAM : résultat, plantage à 8 Go. La solution : traiter les fiches par lots de 10 000, écrire les fichiers au fur et à mesure et libérer la mémoire entre chaque lot.

Les générateurs Python (yield) ont été essentiels. Au lieu de construire une liste de 200 000 éléments, le script génère les pages une par une, en ne gardant en mémoire que la page en cours.

Performance du build

Le build complet prend environ 12 minutes sur un MacBook Pro M3. C’est long, mais acceptable pour un build complet. En mode incrémental (uniquement les fiches modifiées), il tombe à moins de 30 secondes grâce à un système d’empreinte du contenu.

La parallélisation avec multiprocessing.Pool a divisé le temps de build par quatre sur une machine à 8 cœurs. Chaque processus génère un sous-ensemble de pages de façon indépendante.

Les erreurs à éviter

Ne sous-estimez pas la gestion des caractères spéciaux. Avec les données DATAtourisme, les accents, les guillemets et les caractères spéciaux dans les noms de lieux créent des bugs subtils. Un pipeline de nettoyage robuste est indispensable avant la génération.

Autre piège : les slugs en double. Sur 200 000 lieux, les collisions de noms sont fréquentes. Un système de dédoublonnage avec suffixe (nom-commune) est nécessaire.

Le résultat

200 000 pages HTML statiques, chacune avec son Schema.org, ses métadonnées uniques et son maillage interne. Le tout déployable par FTP sur un hébergement mutualisé. Zéro serveur, zéro base de données, zéro maintenance.

Pendant que vous êtes là

Des t-shirts sur le même sujet. Moins de 2 000 mots, plus de 100 % coton.

Pas encore commandableErreur critique – T-shirts
seoaddict.co › T-shirts

Erreur critique

33,90 € Niveau de jargon 4/5 : Très initié
Pas encore commandable47 mises à jour – T-shirts
seoaddict.co › T-shirts

47 mises à jour

33,90 € Niveau de jargon 4/5 : Très initié
Pas encore commandable/wp-admin – T-shirts
seoaddict.co › T-shirts

/wp-admin

33,90 € Niveau de jargon 5/5 : Hardcore
Pas encore commandableBonjour tout le monde ! – T-shirts
seoaddict.co › T-shirts

Bonjour tout le monde !

33,90 € Niveau de jargon 4/5 : Très initié

← Tous les articles

Votre panier