Giscus 是一个基于 GitHub Discussions 的评论系统,评论数据完全存储在 GitHub,无需额外的数据库或第三方平台。适合托管在 GitHub Pages、Cloudflare Pages 等静态站点。
工作原理
Giscus 把每篇页面的评论映射到 GitHub Discussions 中的一个 Discussion,通过在页面嵌入 <script> 标签加载评论组件。
页面与 Discussion 的映射方式:
| 映射方式 | 说明 |
|---|---|
pathname(推荐) |
按页面 URL 路径匹配,最通用 |
title |
按文章标题匹配 |
og:title |
按 Open Graph 标题匹配 |
前置条件
- GitHub 仓库需开启 Discussions 功能:仓库 Settings → Features → Discussions ✓
- 安装 Giscus GitHub App:github.com/apps/giscus → Install → 选择目标仓库
获取配置参数
访问 giscus.app,填写仓库名和配置选项,页面底部会生成完整的 <script> 标签,从中获取:
data-repo-id(格式R_kgDO...):仓库 Node IDdata-category-id(格式DIC_kwDO...):Discussion 分类 ID
Discussion 分类推荐选 Announcements:只有维护者能在 GitHub 网页直接新建 Discussion,普通用户只能通过 Giscus 组件留言,防止垃圾内容。
在 Hugo + PaperMod 中集成
PaperMod 主题已内置评论机制,layouts/single.html 中有:
{{- if (.Param "comments") }}
{{- partial "comments.html" . }}
{{- end }}
需要做两步修改:
1. 创建 comments.html override
在 layouts/_partials/ 目录创建 comments.html(会覆盖主题的空占位文件):
<div class="comments">
<script src="https://giscus.app/client.js"
data-repo="your-user/your-repo"
data-repo-id="R_kgDO..."
data-category="Announcements"
data-category-id="DIC_kwDO..."
data-mapping="pathname"
data-strict="1"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="bottom"
data-theme="preferred_color_scheme"
data-lang="zh-CN"
crossorigin="anonymous"
async>
</script>
</div>
关键参数说明:
| 参数 | 值 | 说明 |
|---|---|---|
data-strict |
1 |
严格匹配 pathname,URL 不变则评论不丢失 |
data-theme |
preferred_color_scheme |
跟随系统深色/浅色模式 |
data-input-position |
bottom |
输入框在评论列表下方 |
data-lang |
zh-CN |
界面语言中文 |
2. 开启评论
在 config.toml 中将 comments = false 改为 comments = true,全局开启所有文章的评论区。
如需对个别文章关闭,可在该文章 front matter 添加 comments: false。
回退
全局关闭:将 config.toml 中 comments = true 改回 false。评论数据保留在 GitHub Discussions,不会丢失。
维护记录
| 时间 | 修改内容 | 原因 |
|---|---|---|
| 2026-06-16 | 新建文章,记录 Giscus 集成方法 | 参考 TASK-SPEC-giscus-comments.md |