Intégrer des commentaires sur un blog Astro : guide Giscus, Waline et Twikoo

Ajouter des commentaires à mon blog Astro m’a pris bien plus de temps que prévu.
Au départ, ça semblait simple : intégrer un système de commentaires, c’est tout. En pratique, les options se multiplient — Giscus, Waline, Twikoo, Disqus… Chacune promet la simplicité, mais la configuration diffère complètement. Pire encore : après avoir suivi un tutoriel, les commentaires s’affichent correctement… jusqu’au clic vers un autre article, où ils disparaissent.
C’est le routage View Transitions d’Astro : lors du changement de page, le composant commentaires ne se recharge pas — des « commentaires de Schrödinger » dont on ne connaît l’état qu’après navigation.
Si vous hésitez entre les solutions ou si vos commentaires disparaissent au changement de page, cet article compare Giscus, Waline et Twikoo, fournit le code d’intégration Astro complet et corrige la compatibilité View Transitions. Comptez environ 10 minutes pour passer à l’action.
Comparatif des systèmes de commentaires
J’ai testé les trois ; chacun a ses forces. Tableau synthétique :
| Critère | Giscus | Waline | Twikoo |
|---|---|---|---|
| Stockage | GitHub Discussions | LeanCloud/PostgreSQL/MySQL | Divers clouds (Tencent, Vercel, etc.) |
| Coût | Gratuit | Gratuit (LeanCloud dev 1 Go) | Gratuit |
| Accès lecteur | Compte GitHub | Anonyme ou social | Anonyme |
| Fonctions | Commentaires + Reactions | Markdown, emojis, admin, stats | Notifications, anti-spam |
| Difficulté | Faible (frontend) | Moyenne (backend) | Moyenne (fonction cloud) |
| Idéal pour | Blogs techniques, open source | Blogs perso, forums | Blogs perso |
Mes recommandations
Blog orienté développeurs (tutos, documentation open source) → Giscus. Vos lecteurs ont déjà GitHub ; connexion native, zéro backend, configuration en environ 5 minutes.
Blog grand public (lifestyle, photo, voyage) → Waline ou Twikoo. Commentaires anonymes sans inscription ; Waline offre un admin plus complet, Twikoo reste plus léger.
Zéro coût → Giscus (GitHub gratuit, pas de base ni de serveur). Waline reste gratuit en dev LeanCloud (1 Go), mais un fort trafic peut imposer un passage payant.
Admin puissant (modération, stats, anti-spam) → Waline, proche d’un plugin WordPress.
En bref : technique → Giscus ; lifestyle → Waline ; minimalisme → Twikoo.
Tutoriel Giscus : la solution la plus simple
Giscus convient surtout aux blogs techniques : pas de backend, pas de base, tout repose sur GitHub.
Prérequis
1. Dépôt GitHub public — le dépôt du blog ou un dépôt dédié (blog-comments). Les dépôts privés ne fonctionnent pas.
2. Activer Discussions — Settings → Features → cocher Discussions.
3. Installer l’app giscus — https://github.com/apps/giscus , autoriser le dépôt.
4. Catégorie Discussion — créer une catégorie type Announcements (« Comments ») : seuls vous et le bot créent les fils, les autres répondent.
Paramètres de configuration
Sur https://giscus.app :
- Dépôt :
utilisateur/nom-du-depot - Mapping :
pathname(une Discussion par URL) - Catégorie : celle créée ci-dessus
- Thème :
light,darkoupreferred_color_scheme
Notez data-repo, data-repo-id, data-category-id, etc.
Code d’intégration Astro
Créez src/components/Giscus.astro :
---
// src/components/Giscus.astro
---
<div class="giscus"></div>
<script>
function loadGiscus() {
const script = document.createElement('script');
script.src = 'https://giscus.app/client.js';
script.setAttribute('data-repo', 'your-username/your-repo'); // Votre dépôt
script.setAttribute('data-repo-id', 'your-repo-id');
script.setAttribute('data-category', 'Comments');
script.setAttribute('data-category-id', 'your-category-id');
script.setAttribute('data-mapping', 'pathname');
script.setAttribute('data-reactions-enabled', '1');
script.setAttribute('data-emit-metadata', '0');
script.setAttribute('data-input-position', 'bottom');
script.setAttribute('data-theme', 'light');
script.setAttribute('data-lang', 'fr');
script.setAttribute('crossorigin', 'anonymous');
script.async = true;
const container = document.querySelector('.giscus');
if (container) {
container.innerHTML = '';
container.appendChild(script);
}
}
loadGiscus();
document.addEventListener('astro:page-load', loadGiscus);
</script>
<style>
.giscus {
margin-top: 2rem;
}
</style>
La ligne document.addEventListener('astro:page-load', loadGiscus) évite la disparition des commentaires lors des transitions.
Utilisation sur les pages article
---
import Giscus from '@/components/Giscus.astro';
---
<article>
<h1>{title}</h1>
<div>{content}</div>
</article>
<Giscus />
Lancez npm run dev, ouvrez un article, naviguez entre les pages : les commentaires doivent rester visibles.
Tutoriel Waline : le plus complet
Pour des commentaires anonymes sans compte GitHub, Waline offre admin, stats et notifications — avec un backend à déployer.
Backend (Vercel + LeanCloud)
Étape 1 : application LeanCloud
- https://console.leancloud.cn/ (version internationale recommandée)
- Créer une application « Development » (1 Go gratuit)
- Noter App ID, App Key, Master Key
Étape 2 : déployer Waline sur Vercel
- https://vercel.com/new/clone?repository-url=https://github.com/waline/waline/tree/main/example
- Nom du projet, Create
- Variables :
LEAN_ID,LEAN_KEY,LEAN_MASTER_KEY - Redeploy après ajout des variables
- Domaine du type
my-waline.vercel.app
Étape 3 : domaine personnalisé (important)
Le domaine .vercel.app peut être inaccessible depuis la Chine. Ajoutez un CNAME waline → cname.vercel-dns.com, puis liez waline.votredomaine.com dans Vercel → Domains.
Intégration frontend Astro
npm install @waline/client
src/components/Waline.astro :
---
// src/components/Waline.astro
---
<div id="waline"></div>
<script>
import { init } from '@waline/client';
import '@waline/client/style';
function loadWaline() {
const walineInstance = init({
el: '#waline',
serverURL: 'https://waline.yourdomain.com',
path: window.location.pathname,
lang: 'fr',
dark: 'auto',
emoji: [
'//unpkg.com/@waline/emojis@latest/weibo',
'//unpkg.com/@waline/emojis@latest/bilibili'
],
meta: ['nick', 'mail'],
requiredMeta: ['nick'],
pageSize: 10,
});
return walineInstance;
}
let walineInstance = null;
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', () => {
walineInstance = loadWaline();
});
} else {
walineInstance = loadWaline();
}
document.addEventListener('astro:page-load', () => {
if (walineInstance && walineInstance.destroy) {
walineInstance.destroy();
}
walineInstance = loadWaline();
});
</script>
<style>
#waline {
margin-top: 2rem;
}
</style>
Importez <Waline /> dans le template article.
Compte administrateur
https://waline.yourdomain.com/ui/register — le premier compte est admin. Tableau de bord : /ui (modération, export).
Tutoriel Twikoo : léger et épuré
Twikoo se déploie sur Tencent Cloud, Vercel, Cloudflare Workers, etc. Interface sobre ; moins d’admin que Waline.
Fonction cloud (Cloudflare Workers)
npm install twikoo
- Compte Cloudflare → Workers & Pages → Create Worker
- Nom (
my-twikoo), Deploy - Quick Edit : coller le code fonction Twikoo (https://twikoo.js.org/)
- Noter le domaine Worker
Intégration Astro
src/components/Twikoo.astro :
---
// src/components/Twikoo.astro
---
<div id="twikoo"></div>
<script>
function loadTwikoo() {
import('twikoo').then((twikoo) => {
twikoo.init({
envId: 'https://my-twikoo.your-subdomain.workers.dev',
el: '#twikoo',
path: window.location.pathname,
lang: 'fr',
});
});
}
loadTwikoo();
document.addEventListener('astro:page-load', () => {
const container = document.getElementById('twikoo');
if (container) {
container.innerHTML = '';
loadTwikoo();
}
});
</script>
<style>
#twikoo {
margin-top: 2rem;
}
</style>
Importez <Twikoo /> sur la page article.
Compatibilité Astro : le piège View Transitions
Dans les trois intégrations :
document.addEventListener('astro:page-load', loadComment);
Sans cela, les commentaires ne se chargent qu’à la première visite.
Pourquoi ?
View Transitions remplace le contenu sans recharger la page (comportement proche d’une SPA). Les scripts commentaires ne se réexécutent pas → disparition apparente.
Solution
astro:page-load se déclenche à chaque chargement (première visite et navigation) :
document.addEventListener('astro:page-load', () => {
loadComment();
});
Autres approches (déconseillées)
transition:persist — conserve le bloc entre pages : risque d’afficher les commentaires de l’article A sur l’article B.
<!-- Déconseillé -->
<div id="comments" transition:persist>
<Giscus />
</div>
Désactiver View Transitions — rechargement complet, perte des animations fluides.
Thème clair / sombre
Exemple Giscus :
document.addEventListener('theme-change', (e) => {
const theme = e.detail.theme;
const iframe = document.querySelector('iframe.giscus-frame');
if (iframe) {
iframe.contentWindow.postMessage(
{ giscus: { setConfig: { theme } } },
'https://giscus.app'
);
}
});
Waline et Twikoo proposent des API similaires (voir la documentation officielle).
FAQ
Q1 : Vercel inaccessible ?
Le domaine .vercel.app peut être bloqué en Chine. Liez un domaine personnalisé (CNAME → cname.vercel-dns.com, puis Domains dans Vercel).
Q2 : Migration des données ?
- Giscus : export JSON via API GitHub
- Waline : CSV/JSON depuis l’admin
- Twikoo : sauvegarde locale
Entre systèmes : script de conversion de format.
Q3 : Anti-spam ?
- Giscus : anti-spam GitHub
- Waline : Akismet + modération
- Twikoo : mots-clés, captcha, IP
Activez la modération avant publication.
Q4 : Plusieurs systèmes en parallèle ?
Possible techniquement, mais inutile (performance, dispersion). Exportez avant de changer.
Q5 : Chargement lent ?
- Lazy load à l’entrée dans le viewport
- CDN pour Waline/Twikoo
- Réduire les packs d’emojis Waline
Résumé
Giscus — blog technique ou zéro maintenance : ~5 minutes, GitHub natif.
Waline — admin riche, commentaires anonymes, gros volume.
Twikoo — léger, interface soignée, sans admin complexe.
Mon blog technique utilise Giscus : GitHub n’est pas un frein pour mes lecteurs, et c’est gratuit.
Suivez le tutoriel choisi : environ 10 minutes. Les commentaires apportent l’interaction — messages, suggestions et retours motivent à continuer d’écrire.
Des questions ? Laissez un commentaire (une fois le système en place). Bonne configuration !
Processus complet d'intégration des commentaires sur un blog Astro
Configuration en 10 minutes, comparatif Giscus, Waline et Twikoo, résolution des problèmes de compatibilité View Transitions
⏱️ Estimated time: 10 min
- 1
Step 1: Choisir le système de commentaires adapté
Comparatif des trois systèmes :
Giscus
• Données stockées dans GitHub Discussions, entièrement gratuit
• Connexion via compte GitHub, configuration frontend simple en environ 5 minutes
• Idéal pour blogs techniques et projets open source
Waline
• Données sur LeanCloud/PostgreSQL/MySQL, offre gratuite 1 Go
• Commentaires anonymes ou connexion sociale, tableau de bord riche
• Idéal pour blogs personnels et forums
Twikoo
• Données sur divers services cloud, gratuit, commentaires anonymes
• Déploiement léger, idéal pour blogs personnels
Conseils :
• Blog orienté développeurs (tutos, doc open source) → Giscus
• Blog grand public (lifestyle, photo, voyage) → Waline ou Twikoo
• Zéro coût → Giscus (services GitHub gratuits)
• Besoin d'un admin puissant (modération, stats, anti-spam) → Waline
En résumé : blog technique → Giscus ; lifestyle → Waline ; minimalisme → Twikoo. - 2
Step 2: Intégration Giscus : la solution la plus simple
Étapes Giscus :
1. Créer un dépôt GitHub public
2. Installer l'app Giscus (giscus.app, autoriser GitHub, choisir le dépôt)
3. Récupérer repo, repo-id, category, category-id
4. Intégrer dans Astro (composant Comment.astro, script Giscus, paramètres)
5. Utiliser dans le layout (BlogLayout.astro)
Exemple de code :
• Créer src/components/Comment.astro
• Ajouter le script Giscus
• Configurer repo, repo-id, category, category-id
• Importer sur la page article
Compatibilité View Transitions :
• Lors du changement de page, le composant ne se recharge pas et les commentaires disparaissent
• Solution : réinitialiser le composant sur l'événement View Transitions
• Ou utiliser client:load pour forcer le rechargement - 3
Step 3: Intégration Waline et Twikoo
Waline :
• Déployer un backend (LeanCloud, Vercel, Railway, etc.)
• Configurer serverURL
• Intégrer le composant Waline dans Astro
• Commentaires anonymes et connexion sociale
Twikoo :
• Configurer une fonction cloud (Tencent Cloud, Vercel, etc.)
• Configurer envId
• Intégrer le composant Twikoo dans Astro
• Commentaires anonymes
View Transitions :
• Réinitialiser le composant sur astro:page-load
• Ou client:load pour garantir le rechargement
FAQ
Quelles différences entre Giscus, Waline et Twikoo ? Lequel choisir ?
• Données dans GitHub Discussions, gratuit
• Connexion GitHub obligatoire
• Configuration frontend en environ 5 minutes
• Idéal blogs techniques et open source
Waline :
• LeanCloud/PostgreSQL/MySQL, 1 Go gratuit
• Anonyme ou connexion sociale, admin riche
• Idéal blogs personnels et forums
Twikoo :
• Plusieurs clouds, gratuit, anonyme
• Déploiement léger
• Idéal blogs personnels
Conseils : développeurs → Giscus ; grand public → Waline ou Twikoo ; zéro coût → Giscus ; admin puissant → Waline.
Résumé : technique → Giscus ; lifestyle → Waline ; minimalisme → Twikoo.
Comment intégrer Giscus ?
1) Créer un dépôt GitHub public
2) Installer l'app sur giscus.app
3) Récupérer repo, repo-id, category, category-id
4) Créer Comment.astro avec le script Giscus
5) Importer dans le layout article
Giscus est 100 % frontend, sans backend : configuration en environ 5 minutes.
Comment résoudre les problèmes de compatibilité View Transitions ?
Solutions :
• Réinitialiser sur astro:page-load
• Ou client:load sur le composant
Implémentation : document.addEventListener('astro:page-load', () => { /* réinit */ })
Comment limiter le spam et exporter les commentaires ?
• Les trois systèmes ont des mécanismes intégrés
• Giscus s'appuie sur GitHub
• Waline : Akismet et modération manuelle
• Twikoo : filtres mots-clés, captcha, liste noire IP
Activez la modération : nouveaux commentaires visibles après validation.
Export :
• Giscus : API GitHub → JSON
• Waline : export CSV/JSON depuis l'admin
• Twikoo : sauvegarde locale
Migration entre systèmes : script de conversion de format, pas d'outil tout-en-un.
7 min de lecture · Publié le: 4 déc. 2025 · Mis à jour le: 27 juil. 2026
Guide Astro
Si vous arrivez depuis la recherche, le plus rapide est de passer à l’article précédent ou suivant de cette série.
Précédent
Migrer de Hugo/Hexo/Next.js vers Astro : guide détaillé en 3 jours
Vous voulez quitter Hugo, Hexo ou Next.js pour Astro ? Ce guide couvre les trois frameworks majeurs : étapes détaillées, pièges courants et bonnes pratiques pour une migration en 1 à 3 jours, gains de performance nets et SEO préservé.
Partie 17 sur 18
Suivant
C’est le dernier article publié dans cette série pour le moment.



Commentaires
Connectez-vous avec GitHub pour laisser un commentaire