Changer le thème

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

Easton editorial illustration: hydration gauge console

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èreGiscusWalineTwikoo
StockageGitHub DiscussionsLeanCloud/PostgreSQL/MySQLDivers clouds (Tencent, Vercel, etc.)
CoûtGratuitGratuit (LeanCloud dev 1 Go)Gratuit
Accès lecteurCompte GitHubAnonyme ou socialAnonyme
FonctionsCommentaires + ReactionsMarkdown, emojis, admin, statsNotifications, anti-spam
DifficultéFaible (frontend)Moyenne (backend)Moyenne (fonction cloud)
Idéal pourBlogs techniques, open sourceBlogs perso, forumsBlogs 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.

10 min
Temps de config
Du choix à la mise en ligne
5 min
Config Giscus
Solution 100 % frontend
Giscus
Coût zéro
Entièrement gratuit

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ûtGiscus (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 giscushttps://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 :

  1. Dépôt : utilisateur/nom-du-depot
  2. Mapping : pathname (une Discussion par URL)
  3. Catégorie : celle créée ci-dessus
  4. Thème : light, dark ou preferred_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

  1. https://console.leancloud.cn/ (version internationale recommandée)
  2. Créer une application « Development » (1 Go gratuit)
  3. Noter App ID, App Key, Master Key

Étape 2 : déployer Waline sur Vercel

  1. https://vercel.com/new/clone?repository-url=https://github.com/waline/waline/tree/main/example
  2. Nom du projet, Create
  3. Variables : LEAN_ID, LEAN_KEY, LEAN_MASTER_KEY
  4. Redeploy après ajout des variables
  5. 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 walinecname.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
  1. Compte Cloudflare → Workers & Pages → Create Worker
  2. Nom (my-twikoo), Deploy
  3. Quick Edit : coller le code fonction Twikoo (https://twikoo.js.org/)
  4. 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. 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. 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. 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 ?
Giscus :
• 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 ?
Étapes :
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 ?
Problème : lors du changement de page, le composant commentaires ne se recharge pas et les commentaires disparaissent — lié au routage View Transitions d'Astro.

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 ?
Anti-spam :
• 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

Commentaires

Connectez-vous avec GitHub pour laisser un commentaire

Easton BlogEaston Blog