
Blog statique avec Hexo : mes astuces SEO, performance et dark mode
J’utilise Hexo pour ce blog depuis plusieurs mois. C’est un générateur de site statique rapide et flexible, mais j’ai dû l’optimiser au fil du temps pour obtenir de bonnes performances et un référencement correct. Voici mes astuces.
Pourquoi Hexo ?
Avant de plonger dans les optimisations, un mot sur le choix d’Hexo plutôt que Hugo, Jekyll ou 11ty :
- Node.js : mon écosystème de prédilection, facile à étendre avec des plugins npm
- Thèmes EJS : des templates JavaScript, puissants et familiers
- Écosystème : une bonne collection de plugins pour le SEO, les sitemaps, les flux RSS
- Déploiement : rsync, GitLab Pages, GitHub Pages, tout est possible
SEO : les plugins indispensables
Génération de sitemaps
# _config.yml |
J’utilise hexo-generator-seo-friendly-sitemap qui génère un sitemap organisé par type de contenu (posts, pages, tags, catégories) avec des priorités bien définies. Google aime ça.
Balises meta et Schema.org
Dans mon layout principal, j’injecte des meta tags structurés :
<!-- head.ejs --> |
URLs propres
permalink: :title/ |
Pas de .html dans les URLs, pas de dates dans le chemin. Des URLs courtes et parlantes, meilleures pour le référencement.
Performance : minification et optimisations
Minification automatique
Mes deux alliés : hexo-all-minifier et hexo-filter-optimize.
filter_optimize: |
Résultat : mes pages HTML passent de ~50 KB à ~12 KB, et les images sont compressées automatiquement. Le score Lighthouse a gagné 15 points.
Images optimisées
Je stocke mes images dans source/images/ et les plugins les optimisent à la génération. Quelques règles :
- Couverture : une image PNG par article, dimension ~1200x630px (ratio Open Graph)
- Format : je convertis en WebP quand c’est pertinent
- Lazy loading : pas de plugin, je laisse le navigateur gérer avec l’attribut natif
<img src="<%= page.cover %>" alt="<%= page.title %>" loading="lazy"> |
Cache et CDN
J’ai configuré mon reverse proxy (Nginx) pour servir les assets statiques avec un cache agressif :
location /css/ { |
Dark mode
Mon blog supporte un thème sombre avec un bouton de bascule. Voici comment c’est implémenté :
Le bouton dans le template
<button id="theme-toggle" class="..."> |
Le JavaScript
const themeToggle = document.getElementById("theme-toggle"); |
Les styles CSS
Le dark mode est entièrement géré via TailwindCSS :
/* Les classes Tailwind sont appliquées en mode dark */ |
Important : évitez le flash de contenu non stylé. Le thème doit être appliqué avant le rendu, idéalement dans une balise
<script>en tête de page.
Déploiement automatisé
Mon pipeline Giwi-CD exécute la séquence suivante :
npm install— installation des dépendancesnpm run clean— nettoyage du cachenpm run style— compilation TailwindCSSnpm run build— génération du site statiquehexo deploy— synchronisation rsync vers le serveur
"scripts": { |
Conclusion
Hexo est un excellent générateur de blog statique, à condition de l’équiper des bons plugins SEO et performance. Avec quelques optimisations bien placées (sitemaps structurés, minification automatique, cache CDN, dark mode) vous obtenez un blog rapide, bien référencé et agréable à lire.
Le tout tient dans un dépôt Git avec un pipeline CI/CD. Un workflow simple et efficace.
Et vous, quels plugins Hexo recommanderiez-vous ?