Disallow: /*?replytocom=
add_filter('comment_reply_link', fn($l) => remove_query_arg('replytocom', $l));
curl -s 'https://example.com/guide/hello/?replytocom=12' | grep -o 'rel="canonical"[^>]*'
抓取日志里 ?replytocom=1234 这类地址一天出现两千多次,收录里同一篇文章有几十个版本,正文完全一样,只是评论框位置不同。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:主题的评论回复链接默认带上 replytocom 参数,服务端按参数输出不同页面,状态码还是 200。robots.txt 没挡,canonical 也没指回主文章,抓取工具就当成独立页面收下。
这次卡住的地方就在「replytocom 参数」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。监控和日志的时间要对上,时区不一致会多绕很大一圈。
临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
处理上按这个顺序:在 robots.txt 里挡掉带 replytocom 的地址,只挡参数不动正文;模板里把评论链接的 replytocom 去掉,改用锚点定位到具体评论;canonical 强制指向不带参数的文章地址;已经收录的版本提交移除,观察两周抓取量。
确认没问题再收工,带 replytocom 的请求返回的 canonical 指向主地址,抓取日志里这类 URL 一周内降到个位数。
