评论正文里外链的源代码只有 href,rel 里没有 nofollow,翻了一遍历史评论,几十条推广链接全是这样。乍看像缓存或者权限的锅,追下去往往不是。

UPDATE wp_comments SET comment_content =
REPLACE(comment_content, '<a href="http', '<a rel="nofollow" href="http')
WHERE comment_approved = '1';

追下去是这么回事:主题用 wp_kses 处理过评论内容,白名单里没写 rel,属性在这一步就被剥掉了。核心的 wp_rel_nofollow 只在评论保存时跑一次,后续再过滤等于白做。

「评论链接 nofollow」这类改动最怕改一半,回滚脚本先准备好,再动生产。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

具体做法是,把评论内容原样取出来看,确认是保存时就丢了还是输出时被过滤;白名单里补上 rel 并限定取值,别整段放行 a 标签;对历史评论跑一次批量补 rel,只处理外链,站内链接留着。

验收就看一点,新评论的外链自动带 nofollow,抽查十条历史评论也补上了。

作者 9823189