前言
静态博客虽然快速、安全,但缺少评论功能一直是个痛点。今天我要介绍的 Giscus 是一个基于 GitHub Discussions 的评论系统,完美解决了这个问题。
为什么选择 Giscus?
相比其他评论系统,Giscus 有以下优势:
- ✅ 完全免费 - 基于 GitHub,无需付费
- ✅ 无广告 - 没有任何广告干扰
- ✅ 隐私友好 - 不跟踪用户数据
- ✅ 支持 Markdown - 代码高亮、表情、图片都支持
- ✅ 易于管理 - 所有评论在 GitHub Discussions 中统一管理
- ✅ 开源 - 代码完全开源,可自定义
- ✅ 主题适配 - 支持深色/浅色模式自动切换
前置要求
- 一个 Hugo 博客
- GitHub 账号
- 一个公开的 GitHub 仓库(用于存储评论)
第一步:创建评论仓库
首先需要创建一个专门用于存储评论的 GitHub 仓库。
1.1 创建新仓库
- 登录 GitHub,访问 https://github.com/new
- 填写仓库信息:
- Repository name:
blog-comments(可以自定义名称) - Description: “博客评论系统”
- Visibility: ⚠️ 必须选择 Public(公开仓库)
- Repository name:
- 点击 Create repository 创建
注意:Giscus 只支持公开仓库,私有仓库无法使用。
1.2 启用 Discussions 功能
- 进入刚创建的仓库
- 点击顶部的 Settings 标签
- 向下滚动找到 Features 部分
- ✅ 勾选 Discussions 选项
- 保存设置
此时你会在仓库顶部看到新增的 Discussions 标签。
第二步:安装 Giscus App
Giscus 需要通过 GitHub App 来访问你的仓库。
2.1 安装应用
- 访问 Giscus App 页面:https://github.com/apps/giscus
- 点击绿色的 Install 按钮
- 选择安装位置:
- 如果你有多个组织,选择你的个人账号或组织
- 选择仓库访问权限:
- 选择 Only select repositories(仅选择特定仓库)
- 在下拉列表中选择刚创建的
blog-comments仓库
- 点击 Install 完成安装
提示:安装后,Giscus 可以读取你的仓库信息和 Discussions,但无法修改代码。
第三步:配置 Giscus
现在需要获取 Giscus 的配置信息。
3.1 访问配置页面
打开 Giscus 官方配置页面:https://giscus.app/zh-CN
3.2 填写仓库信息
在 配置 部分填写:
仓库:你的用户名/blog-comments
例如:c-x-x/blog-comments
如果配置正确,会看到:
- ✅ 成功!此仓库满足所有条件。
如果出现 ❌ 错误,检查:
- 仓库是否为公开
- Discussions 是否已启用
- Giscus App 是否已安装
3.3 选择映射方式
Discussion 分类映射方式 决定了文章如何关联到 Discussions:
推荐选择:
- 🎯 pathname(路径名)- 使用文章的 URL 路径
其他选项:
url- 完整 URL(更改域名会断开关联)title- 文章标题(更改标题会断开关联)og:title- Open Graph 标题
推荐理由:pathname 最稳定,只要文章路径不变,评论就不会丢失。
3.4 选择 Discussion 分类
在 Discussion 分类 下拉框中选择:
推荐选择:
- 🎯 Announcements(公告)
特点:
- 只有仓库维护者可以创建新 Discussion
- 防止他人随意创建无关话题
- 保持评论区整洁
3.5 选择主题
在 主题 部分选择:
- 🎯 preferred_color_scheme(跟随系统偏好)
这样评论区会自动适配你的博客主题(深色/浅色)。
3.6 获取配置代码
滚动到页面底部 启用 giscus 部分,你会看到类似这样的代码:
<script src="https://giscus.app/client.js"
data-repo="c-x-x/blog-comments"
data-repo-id="R_kgDOS5n9Lw"
data-category="Announcements"
data-category-id="DIC_kwDOS5n9L84C_FGp"
...>
</script>
重要:记录下这两个 ID:
data-repo-id→ 仓库 IDdata-category-id→ 分类 ID
第四步:集成到 Hugo 博客
现在开始将 Giscus 集成到你的 Hugo 博客中。
4.1 创建评论组件
在你的主题目录下创建评论组件文件:
themes/你的主题名/layouts/partials/comments.html
粘贴以下代码:
<!-- Giscus Comments Component -->
{{ if .Site.Params.giscus.enabled }}
<div class="comments-section">
<div class="container" style="max-width: 900px; margin: 3rem auto; padding: 2rem;">
<h3 class="section-title" style="font-size: 1.5rem; margin-bottom: 2rem;">💬 评论</h3>
<div class="comments-wrapper">
<script src="https://giscus.app/client.js"
data-repo="{{ .Site.Params.giscus.repo }}"
data-repo-id="{{ .Site.Params.giscus.repoId }}"
data-category="{{ .Site.Params.giscus.category }}"
data-category-id="{{ .Site.Params.giscus.categoryId }}"
data-mapping="pathname"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="preferred_color_scheme"
data-lang="zh-CN"
data-loading="lazy"
crossorigin="anonymous"
async>
</script>
</div>
</div>
</div>
<style>
.comments-section {
margin-top: 4rem;
}
.comments-wrapper {
background: var(--color-bg-card, #ffffff);
border-radius: 16px;
border: 1px solid var(--color-border, #e5e7eb);
padding: 2rem;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
}
/* 如果你的主题支持毛玻璃效果 */
.comments-wrapper {
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
}
.giscus, .giscus-frame {
width: 100%;
}
@media (max-width: 768px) {
.comments-wrapper {
padding: 1rem;
}
}
</style>
<script>
// 监听主题切换,同步 Giscus 主题
function updateGiscusTheme() {
const theme = document.documentElement.getAttribute('data-theme');
const iframe = document.querySelector('iframe.giscus-frame');
if (!iframe) return;
const giscusTheme = theme === 'dark' ? 'dark' : 'light';
iframe.contentWindow.postMessage(
{
giscus: {
setConfig: {
theme: giscusTheme
}
}
},
'https://giscus.app'
);
}
// 监听主题变化
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
if (mutation.attributeName === 'data-theme') {
setTimeout(updateGiscusTheme, 500);
}
});
});
observer.observe(document.documentElement, {
attributes: true,
attributeFilter: ['data-theme']
});
// 首次加载后更新主题
window.addEventListener('load', () => {
setTimeout(updateGiscusTheme, 1000);
});
</script>
{{ end }}
4.2 在文章模板中引入评论
编辑文章单页模板:
themes/你的主题名/layouts/_default/single.html
在文章内容的底部添加:
<article>
<!-- 文章内容 -->
<div class="article-content">
{{ .Content }}
</div>
<!-- 添加评论组件 -->
{{ partial "comments.html" . }}
</article>
4.3 配置 Hugo 站点
编辑站点配置文件 hugo.toml(或 config.toml),添加 Giscus 配置:
[params.giscus]
enabled = true
repo = "你的用户名/blog-comments"
repoId = "R_kgDOS5n9Lw" # 替换为你的 repo-id
category = "Announcements"
categoryId = "DIC_kwDOS5n9L84C_FGp" # 替换为你的 category-id
重要:将 repoId 和 categoryId 替换为第三步获取的实际值。
第五步:测试评论系统
5.1 启动本地服务器
hugo server -D
5.2 访问文章页面
打开浏览器访问任意文章,滚动到底部,你应该能看到评论区。
5.3 发布评论
- 点击 Sign in with GitHub 登录
- 授权 Giscus 访问你的 GitHub 账号
- 输入评论内容(支持 Markdown)
- 点击 Comment 发布
5.4 查看评论
评论发布后,你可以在两个地方看到:
- 博客文章页面 - 评论直接显示在文章下方
- GitHub Discussions - 访问
https://github.com/你的用户名/blog-comments/discussions
高级配置
自定义主题同步
如果你的博客有自定义主题切换功能,可以监听主题变化并同步到 Giscus:
// 假设你的主题切换按钮会改变 data-theme 属性
document.querySelector('.theme-toggle').addEventListener('click', () => {
// 切换主题
const newTheme = toggleTheme();
// 同步到 Giscus
const iframe = document.querySelector('iframe.giscus-frame');
if (iframe) {
iframe.contentWindow.postMessage({
giscus: {
setConfig: {
theme: newTheme === 'dark' ? 'dark' : 'light'
}
}
}, 'https://giscus.app');
}
});
懒加载优化
为了提升页面加载速度,可以实现评论区懒加载:
// 仅当评论区进入视口时加载
const commentsSection = document.querySelector('.comments-section');
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
// 加载 Giscus 脚本
loadGiscus();
observer.unobserve(entry.target);
}
});
});
observer.observe(commentsSection);
自定义样式
根据你的博客主题调整评论区样式:
/* 调整评论区背景 */
.comments-wrapper {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border-radius: 20px;
}
/* 调整评论框边距 */
.giscus {
padding: 1rem;
}
/* 移动端适配 */
@media (max-width: 768px) {
.comments-section {
padding: 1rem;
}
}
常见问题
Q1: 评论区不显示?
检查清单:
- ✅ 仓库是否为公开
- ✅ Discussions 是否已启用
- ✅ Giscus App 是否已安装
- ✅
hugo.toml中的配置是否正确 - ✅
repoId和categoryId是否正确
Q2: 评论无法发布?
可能原因:
- GitHub 登录状态过期 - 重新登录
- Giscus App 权限不足 - 重新安装
- 网络问题 - 检查网络连接
Q3: 如何删除评论?
作为仓库管理员:
- 访问 GitHub Discussions
- 找到对应的评论
- 点击评论右上角的
...菜单 - 选择 Delete
Q4: 评论会丢失吗?
不会!评论存储在 GitHub Discussions 中,只要仓库不删除,评论就永久保存。
Q5: 可以导出评论吗?
可以!评论以 Discussion 形式存储在 GitHub,你可以:
- 通过 GitHub API 导出
- 手动复制保存
- 使用第三方工具备份
Q6: 支持匿名评论吗?
不支持。评论者必须有 GitHub 账号并登录。这也是优点,可以有效防止垃圾评论。
Q7: 如何接收评论通知?
- 进入 GitHub Settings → Notifications
- 确保勾选了 Discussions 相关通知
- 有新评论时会收到邮件通知
总结
通过本教程,你应该已经成功为 Hugo 博客添加了 Giscus 评论系统。这个方案:
- ✅ 完全免费
- ✅ 易于维护
- ✅ 数据安全
- ✅ 功能强大
优点总结
- 基于 GitHub - 利用已有生态,无需额外服务
- Markdown 支持 - 代码、图片、表情全支持
- 主题适配 - 自动跟随博客主题
- 易于管理 - GitHub Discussions 统一管理
- 数据安全 - 数据存储在 GitHub,永不丢失
下一步
- 🎨 自定义评论区样式,匹配你的博客主题
- 📧 配置邮件通知,及时收到评论提醒
- 🤖 考虑添加 GitHub Actions 自动化管理
- 📊 使用 GitHub API 统计评论数据
参考资源
- Giscus 官网:https://giscus.app/
- Giscus GitHub:https://github.com/giscus/giscus
- Hugo 文档:https://gohugo.io/
- GitHub Discussions:https://docs.github.com/discussions
如果这篇教程对你有帮助,欢迎在下方评论区留言!👇
看,评论系统已经在工作了!😄
💬 评论