nofollow 不是“别抓我”
在站内链接上加 rel="nofollow" 以后,蜘蛛就不来了吗?多数情况下不会这么简单。nofollow 最初是用来告诉搜索引擎“这个链接不是投票”,后来变成了一个提示信号。它主要影响链接关系的判断,而不是直接关闭抓取通道。
换句话说,蜘蛛看到 nofollow 链接时,可能会选择不传递权重、不把它当作推荐,但仍然可能沿着这条链接去发现和抓取目标 URL。尤其是当这个 URL 没有出现在别的地方时,nofollow 链接反而可能是蜘蛛第一次见到它的入口。
把 nofollow 当成抓取预算的阀门,往往会失效;真正能阻止抓取的是 robots.txt 的 Disallow 或服务器层面的限制。
蜘蛛为什么会跟着 nofollow 走
抓取和索引是两件事。爬虫需要先拿到 URL,才会判断页面内容、canonical、noindex 等信号。nofollow 不阻止 URL 被发现,所以下面几种情况蜘蛛仍可能排队抓取:
- 目标页面是新的,站内没有其他可爬入口,nofollow 链接成了唯一发现路径;
- 同一批 URL 在多个页面被 nofollow 链接反复指向,蜘蛛在合并链接关系时仍会记录这些地址;
- 外链带了 nofollow,但搜索引擎仍可能抓取目标页,用于判断链接质量和内容相关性;
- UGC 或评论区的 nofollow 链接,蜘蛛为了反垃圾和发现新内容,也会做一定程度的抓取。
因此日志里看到蜘蛛抓了 nofollow 链接,并不一定是配置失效,而是抓取发现机制在正常工作。
nofollow、robots.txt 和 noindex 的分工
这三个指令经常被混用,其实作用的阶段不同。
- robots.txt Disallow:阻止蜘蛛抓取指定路径,但 URL 仍可能被索引成无摘要结果。适合后台、搜索结果页、参数组合等不需要抓取的功能地址。
- noindex:让页面不被索引,但蜘蛛必须先抓取页面、读到 meta 或响应头才生效。适合内容单薄但可访问的页面。
- nofollow:处理链接关系,不保证目标 URL 不被抓取。适合广告、赞助、不可信 UGC 和你不愿背书的链接。
如果目标是不让蜘蛛抓取,优先考虑 robots.txt;如果目标是不让页面进索引,用 noindex;nofollow 放在链接层面,解决的是信任和权重问题,而不是抓取开关。
内链里的 nofollow 要慎用
有些站点为了“节省抓取额度”,把筛选参数、分页、登录注册等内链全部加上 nofollow。这样做常常适得其反:蜘蛛仍然可能抓到这些 URL,但重要页面的发现路径变窄了,抓取分布变得更难预测。
更稳的做法是分层处理:
- 把纯功能性地址(购物车、结算、用户中心、站内搜索结果)放进 robots.txt,减少无效抓取。
- 对不需要出现在索引里的可访问页面,使用 noindex,并确保蜘蛛能读到。
- 对广告、赞助和外部 UGC 链接使用 nofollow,明确关系即可。
- 站内核心导航、文章互链和 Sitemap 保持干净可爬,让蜘蛛沿着稳定路径走。
- 定期看服务器日志,确认蜘蛛实际抓了哪些 URL,再调整规则。
分页链接通常不建议加 nofollow。如果希望蜘蛛继续翻到后面的列表页,保留可爬链接比标记 nofollow 更直接。
用日志验证,而不是凭感觉
nofollow 的实际效果会因搜索引擎和场景而变化。与其假设“加了就不抓”,不如在日志里看蜘蛛是否访问了被标记的 URL、访问频率如何、是否带上了参数。再结合 robots.txt 和 noindex 做小范围测试,观察抓取路径的变化。
站点运营里,抓取管理更像分层疏导:该拦的用 robots.txt,该去索引的用 noindex,该表明关系的地方用 nofollow。把每个指令放在它擅长的环节,蜘蛛的路径才会更清楚。