在蜘蛛池和日常站点运营里,rel 属性中的 nofollow 经常被当成一个开关:有人默认加上它就等于告诉搜索蜘蛛别看这个链接,于是入口页里一旦批量使用 nofollow,就判断目标 URL 不会被发现。真实的机制要更细一些,下面把常见的几个疑问拆开讲。
nofollow 管的是权重与背书,不是链接是否存在
从 HTML 解析的角度看,一个带 href 并且标注了 nofollow 的 a 标签,依然是页面上的一条超链接:地址写在 href 里,解析器能读到,抓取调度器也能把它排进待抓取队列。nofollow 表达的语义更接近我不为这个链接背书、不要把权重算过去,而不是禁止访问这个地址。
真正用来阻止抓取的是 robots.txt 里的 Disallow;用来阻止页面进入索引的是 noindex。这几个东西经常被混在一起,但它们分别作用于不同环节:发现、抓取、索引。入口页的问题通常卡在第一环,而 nofollow 影响的其实偏第三环附近的权重判断。
主流搜索引擎对 nofollow 的处理并不统一
- Google 自 2019 年起把 nofollow 视为提示而非指令,链接仍可能被跟随,只是不再作为排名信号的背书。
- Bing 等引擎也基本承认 nofollow 主要是权重语义,对抓取层面的影响有限。
- sponsored、ugc 与 nofollow 属于同一类提示性标注,写法不同、语义侧重不同,但都不等于禁止抓取。
所以,如果你的目标是让搜索蜘蛛发现目标 URL,单靠 nofollow 通常达不到屏蔽效果;反过来,加了 nofollow 也未必就会阻断发现。具体表现还要看入口页本身的可抓取状态。
这些情况才更可能让 nofollow 链接白写或白担心
比起 nofollow 属性本身,下面几点对 URL 发现的影响更直接:
- 入口页被 robots.txt 屏蔽:整页都进不去,链接有没有 nofollow 已经无关。
- 链接由 JavaScript 动态插入且未被渲染:HTML 源码里根本没有这个 href,发现自然谈不上。
- 入口页被 WAF、验证码或登录墙拦截:抓取端拿到的是拦截页,链接不出现。
- 入口页设置了 noindex:页面不进索引,也会影响后续回访频率,进而影响新链接被发现的及时性。
- 链接地址写错、返回 404 或 410:抓取端跟过去也是空手而归。
先把入口页能被正常抓取、链接在 HTML 里真实存在这两件事做对,再讨论 nofollow 的取舍,顺序反了容易白折腾。
如果你确实不希望目标 URL 被抓取
真正要阻止抓取时,应该走这几步:
- 在目标 URL 所在目录使用 robots.txt 的 Disallow 规则,并确认规则前缀匹配正确。
- 如果只是不想让页面进索引,用 noindex,同时不要用 Disallow 屏蔽,否则爬虫看不到 noindex。
- 不要在入口页依赖 nofollow 来做屏蔽,它达不到这个目的。
- 改完规则后通过服务器日志观察目标 URL 的访问量是否真的下降,而不是靠猜测。
做入口页时的一个实用判断顺序
- 入口页是否返回 200,且链接在响应体里直接可见,而不是 JS 渲染之后才出现。
- 目标链接是否以 a 标签形式存在于 HTML 源码中,绝对链接或相对链接都可以。
- 入口页自身是否需要被索引:需要就放开,不需要就 noindex,但不要用 robots.txt 一刀切。
- nofollow 只在有明确语义需求时使用,比如赞助内容、用户评论区的链接。作为蜘蛛池入口页,随意叠加 nofollow 只会让你更难判断问题出在哪一层。
总结一句:nofollow 影响的是链接的权重语义,而不是发现与抓取这个动作本身。想控制能不能被发现,看的是入口页可抓取性、链接是否写在 HTML 里、以及有没有被 robots.txt 或拦截层挡住;这几个变量弄清楚,比纠结属性写法有用得多。