搜索抓取

nofollow 与链接属性:被标注的 URL 还会被蜘蛛发现和抓取吗

nofollow 常被当成禁止抓取的开关,但它其实只是一种提示。本文区分链接层面的 rel 属性、页面级 nofollow 与 robots.txt 的作用范围,说明被标注的 URL 为什么仍可能被蜘蛛发现,并给出日志核对方法与站点运营中的实际取舍建议。

搜索抓取

nofollow 与链接属性:被标注的 URL 还会被蜘蛛发现和抓取吗

给链接加上 rel="nofollow" 之后,这个 URL 还会不会被搜索蜘蛛发现?这是很多站长在整理内链时会遇到的实际问题。答案不是简单的“会”或“不会”,而是取决于你用的是哪一层属性、蜘蛛当时从哪个入口到达,以及这个 URL 是否还有别的发现路径。

nofollow 是提示,不是开关

早期 nofollow 被当作“不传递权重”的硬性指令,后来主流搜索引擎把它调整为提示(hint):蜘蛛可以把 nofollow 链接当作发现新 URL 的线索,只是通常不会把它作为信任传递的依据。也就是说,nofollow 主要影响链接关系的走向,而不是绝对阻断抓取。

理解这一点之后,很多现象就说得通了:一条被标注的链接依然可能出现在日志里,被请求、被读取,甚至最终进入索引——因为蜘蛛发现它的路径并不只有这一条链接。

三层属性要分清楚

链接层面的 rel 属性

  • rel="nofollow":针对单条链接的提示,仍可能被跟随用于发现。
  • rel="ugc":用于用户生成内容,语义上等同于 nofollow 类提示。
  • rel="sponsored":用于付费或广告性质的链接。

三者都属于提示类,差别主要在语义表达,而不在于抓取行为本身。

页面层面的 nofollow 与 X-Robots-Tag

页面级的 meta robots nofollow 影响的是该页面上所有链接;而 X-Robots-Tag 可以在 HTTP 响应头里表达同样的意思,常见于 PDF、图片等非 HTML 资源的控制。

robots.txt 与 nofollow 的分工

robots.txt 的 Disallow 作用在抓取层面,被禁止的 URL 蜘蛛一般不会再发起请求;nofollow 不阻止请求,只是提示不要跟随或传递信任。如果目标是让某个 URL 不被抓取,应该优先用 robots.txt 或合适的状态码;如果只是不想让某条链接传递信任关系,nofollow 更合适。

判断一条 nofollow 链接会不会被抓

  1. 看这个 URL 在站内是否还有普通链接入口,比如导航、正文或相关推荐。
  2. 看 Sitemap 或 RSS 里是否也提交了它。
  3. 看服务器日志中该 URL 是否出现蜘蛛的请求记录。
  4. 看被标注的链接目标是否仍返回 200 状态码。

只要有其他入口存在,nofollow 基本挡不住 URL 被发现。

nofollow 管的是“要不要跟随这条链接的信任关系”,而不是“这个 URL 能不能被请求”。

站点运营里常见的三种用法

  • 评论区、论坛等 UGC 区域:加 rel="ugc" 或 nofollow,减少垃圾链接带来的抓取浪费,但这些 URL 仍可能通过其他入口被抓。
  • 付费广告与联盟链接:用 rel="sponsored",标注清晰也更稳妥。
  • 不想被抓取的隐私页、站内搜索结果页、参数组合页:优先考虑 robots.txt 或返回恰当状态码,而不是只挂一个 nofollow。

容易踩的坑

  • 以为全站加 nofollow 就能省下抓取预算——实际效果有限,真正有效的做法是收敛 URL 空间。
  • 把 nofollow 当成防重复收录的手段——重复内容更适合用 canonical 处理。
  • 链接加了 nofollow,却仍在 Sitemap 里提交,两个信号互相打架。
  • 只盯链接属性,忽略了页面本身仍被大量内链指向,日志里照样有抓取。

怎么核对

把服务器日志按 URL 聚合,观察被标注链接的目标有没有蜘蛛请求;再对照抓取相关的官方工具查看抓取状态。核对时注意区分被抓取被索引,这两件事经常不同步,混在一起看容易得出错误结论。

结论是:nofollow 属于提示性属性,它改变的是链接信任的走向,而不是 URL 的可见性。想让某些 URL 不被发现、不被抓取,需要从入口结构、robots.txt、Sitemap 提交和状态码几个方面一起考虑,比单靠一个 rel 属性可靠得多。