WordPress 垃圾评论拦截实操:Akismet 配置与服务器层屏蔽方案

为什么垃圾评论越删越多

垃圾评论拦截封面图:评论区被护盾保护免受脚本侵扰

开着评论功能的 WordPress 站点,几乎都经历过这个循环:手动删掉一批垃圾评论,第二天又冒出几十条。为什么删了还来?因为手动删除对发评论的一方没有任何成本——它们大多是自动化脚本(俗称 comment spam bot),提交一次只要几百毫秒,而站点默认对评论内容照单全收。解决这个问题的正确思路是提高机器发评的成本:程序层用内容识别把垃圾评论自动送进回收站,服务器层对反复提交的来源直接拒绝连接。本文按”Akismet 内容识别 → 审核规则 → 服务器层屏蔽”三步展开,帮助你在 15 分钟内让评论区恢复干净,而且不再需要每天手动清理。

开始前先确认评论设置的基本盘:在后台”设置 → 讨论”里,勾选”评论必须经人工批准”作为兜底(后面配好自动识别后可以放宽为”无需批准”),同时取消勾选”任何人都可以发表评论”以外的开放注册选项。这些设置决定了垃圾评论是先落地再清理,还是根本进不来。

第一步:配置 Akismet 内容识别

Akismet 是 WordPress 官方自带的反垃圾服务(Automattic 出品,基于全网垃圾内容特征库做识别),配置一次长期有效:

  • 后台”插件”页启用 Akismet(WordPress 预装,无需下载),按提示点击”设置您的 Akismet 账户”
  • 申请免费 API 密钥:个人博客选择 Basic 套餐,把报价滑块调到 0 美元即可,只需要一个 WordPress.com 账号关联
  • 粘贴密钥完成验证后,在设置里勾选”自动丢弃最严重的垃圾评论”,让最恶劣的样本不占用回收站空间
  • 验证效果:运行一两周后查看 Akismet 状态页的拦截统计,正常情况下拦截率应在 95% 以上;如果有明显误拦(真实读者的评论进了垃圾箱),把误拦样本标记为”非垃圾”帮助模型纠偏

垃圾评论拦截分层示意图:内容识别、审核规则、服务器屏蔽三层

Akismet 的强项是内容识别,但它有一个盲区:对纯链接广告、超短无意义内容之外”看起来像人写的”软性垃圾,识别率会下降。这时需要第二步的审核规则来补位,两层配合后漏网率会明显下降。

第二步:审核规则与反链黑名单

在”设置 → 讨论”页面还有一组被低估的规则,配置得当可以拦下 Akismet 漏掉的部分:

  • 链接数审核:”评论中出现 X 个以上超链接则进入待审队列”默认值是 2,广告评论的典型特征就是塞满链接,保留默认值即可;不要设为 0,否则正常读者贴参考链接也会被审
  • 评论黑名单:把常见垃圾词(赌、代刷、外链推广类关键词)填入黑名单,命中的评论直接进回收站而不是待审区,省去人工过目
  • 关闭 Trackback/Pingback:如果你的站点不需要引用通知,直接关闭这个功能——它是一个古老且仍被大量滥用的提交通道,关掉不影响正常评论
  • 限制讨论范围:勾选”文章发布 14 天后自动关闭评论”,老文章是垃圾评论的重灾区,关闭后拦截范围大幅缩小

这些规则的取舍原则是”宁可多审、不可漏放”:待审队列里偶尔出现正常评论,点一下通过即可;而一旦垃圾评论公开发布并被搜索引擎收录,清理成本远高于审核成本。

第三步:服务器层屏蔽高发来源

服务器层屏蔽示意图:高频垃圾来源在到达 WordPress 前被拒绝

当 Akismet 每天拦截的评论数达到上百条时,说明有固定来源在持续提交——此时最优解是在服务器层直接拒绝,让这些请求根本不消耗 PHP 和数据库资源。[虚拟主机](https://cn.hostease.com/web-hosting/)环境下最实用的做法有两种:

  • .htaccess 屏蔽来源 IP 段:从 Akismet 日志或访问日志找出提交量最大的 IP 段,在网站根目录 .htaccess 中用 Require not ip(Apache 2.4)或 Order/Deny 语法(2.2)拒绝;屏蔽段时保守一点,先封 /24 再观察
  • 屏蔽无 Referer 的 POST 请求:正常读者发评论必然从文章页跳转(带 Referer),而部分直连脚本不带这个字段,可以用 mod_rewrite 对 wp-comments-post.php 做条件拦截;上线前用自己浏览器实测一次评论提交,避免误伤

服务器层方案的好处是资源占用近乎为零:被拒的请求在 Web 服务进程就被弹回,不会触碰 WordPress 的任何代码。代价是需要一点规则维护——来源会更换 IP 段,建议每月看一次拦截日志,把新出现的高发段补进黑名单。如果站点已经迁移到 VPS 主机并使用 Nginx,等效方案是在 server 块里对 wp-comments-post.php 配置 valid_referers 判断。

总结与行动建议

三步方案的分工很明确:Akismet 负责内容级识别(拦截率 95% 以上),讨论设置负责规则级兜底(链接数、黑名单、关闭老文评论),服务器层负责把高发来源拒之门外(零资源消耗)。按 15 分钟配置 Akismet、5 分钟过一遍讨论设置、再视攻击量决定是否上服务器规则的顺序执行,评论区基本可以恢复”只收到真实读者声音”的状态。

建议本周先完成前两步,观察一周拦截统计后再决定第三步的力度;WordPress 其他安全加固话题可以延伸阅读本站 WordPress 分类的系列文章,服务器层规则的更多用法可参考 服务器分类教程,主机方案与资源说明见 虚拟主机页面。如果你需要长期保持评论区干净,建议把”每月查看 Akismet 统计 + 更新黑名单关键词”列为固定动作——反垃圾没有一劳永逸,但每周几分钟的维护就足够压制绝大多数脚本。

发表评论