静态站上的评论:提交、审核与回写
为什么静态站也能有评论
单页是静态 HTML,但评论区不必是静态的。
渲染单页时,模板里会留一段标记:
<!--CFSE-COMMENTS-START id=123-->...<!--CFSE-COMMENTS-END-->
Worker 在返回 HTML 之前,按这个 id 查一次 D1 的 comments 表,把标记区间替换成最新评论。所以:
- 页面主体仍然来自 R2,快;
- 评论是请求时注入的,新评论、审核结果立即生效;
- 不需要为了几条评论重建整页。
三条数据流
1. 读者在静态站提交
主题自带的评论表单会被改写成 action="/comments",提交时走 fetch:
- 蜜罐字段:机器人填了就静默丢弃;
- 最小停留时间:少于 3 秒直接拒绝;
- 内容校验:少于 2 个字、链接超过 2 个会被拒;
- IP 限流:isolate 级滑窗。
写入 D1 时标记 origin='worker'、wp_comment_id=0、状态按站点设置(off / pending / auto)。
2. 在 Worker 后台审核
后台 → 评论,可以按"未回拉 / 待审核 / 全部"筛选。
对未回拉的评论可以直接通过或删除;已经由 WordPress 接管的评论是只读的。
3. 回写到 WordPress
如果站点同时跑 WordPress,可以开启定时回拉(默认每小时):
- 拉取
unpulled的评论; - 在 WP 里创建评论(保留父子层级);
- 回写 D1 的
wp_comment_id和origin='wp'; - 下次不会再被拉一次。
WordPress 后台的评论也会通过钩子同步回 D1,保持两边一致。
开关
站点设置里的 comments 有三个字段:
| 字段 | 值 | 含义 |
|---|---|---|
mode |
off / embed / native |
关闭 / 注入自定义片段 / 用内置评论系统 |
accept |
off / pending / auto |
是否接受站外提交,以及是否需要审核 |
embed |
HTML | mode=embed 时注入的第三方评论代码 |
已知限制
- 没有验证码,强反垃圾需要接第三方;
- 评论不分页,一次最多渲染 500 条;
- 没有邮件通知(Worker 里发信需要额外服务)。
对个人站来说,蜜罐 + 停留时间 + 限流已经能挡掉绝大多数垃圾评论。