在搭建蜘蛛池入口页时,有人会给目标链接统一加上 rel="nofollow",理由大致有两类:一是担心入口页被判定为链接农场,想提前"自证清白";二是觉得反正入口页不需要权重,加不加无所谓。结果往往是入口页能被抓,但目标 URL 迟迟没有请求记录。所以有必要把 nofollow 到底做了什么、以及不同搜索引擎怎么对待它,讲清楚。
先分清 nofollow 和 noindex 管的是两件事
这两个标签经常被混着用,但它们的作用对象不同。
- rel="nofollow" 挂在 a 标签上,针对的是某一条链接,表达"我不为这个链接背书"。
- meta name="robots" content="noindex" 挂在页面头部,针对的是当前这个页面本身,表示不要把它放入索引。
- content="nofollow" 的 robots meta 是页面级,表示这一页上的所有链接都不要跟进。
关键点在于:noindex 管的是"这一页要不要收录",它并不直接禁止爬虫读取这一页上的链接。而 nofollow 管的是"这条链接要不要跟进",它直接影响爬虫是否顺着走过去。如果你希望搜索蜘蛛从入口页发现目标 URL,那么第一个要检查的就是链接上有没有多写 nofollow。
nofollow 现在还算不算硬规则
这是最容易踩坑的地方。早期 nofollow 被当作强指令,爬虫基本不会跟进。后来 Google 在 2019 年把 nofollow 改为"提示(hint)",也就是说它会被纳入判断,但不再是绝对阻断。理论上存在"加了 nofollow 也被抓"的情况。
问题在于,这个"提示"最终是否跟进,取决于搜索引擎自己的判断。你无法控制它是否把这条链接当作值得爬的信号。把发现 URL 这种强依赖的事情,押在一个"提示"上,本身就不划算。
不同搜索引擎的差异
- Google:nofollow 是提示,可能仍会抓取,但优先级明显降低。
- 百度:对 nofollow 的支持相对保守,一般按不跟进处理。
- 其他引擎:多沿用传统语义,视为不跟进。
由于蜘蛛池入口页通常面向多个搜索引擎,只要有一个把 nofollow 当硬规则,你的 URL 发现就是残缺的。所以实践上建议:入口页里用于发现目标 URL 的链接,不要加 nofollow。
入口页的哪些链接该加、哪些不该加
- 指向目标 URL 的核心链接:不加 nofollow。 这是入口页存在的意义,加了等于自断路径。
- 页脚、备案、模板里的外链:可以加。 这些不是你要暴露的路径,加上反而能让抓取更集中。
- 广告位、赞助位、用户投稿中的链接:按规范加 sponsored 或 nofollow。 这属于合规做法。
- 分页、翻页、筛选参数链接:可以加 nofollow。 避免把抓取预算浪费在无限翻页上。
判断标准很简单:这条链接是不是你希望搜索蜘蛛走过去的那条?是,就不加;不是,就可以加。
几种常见的误用
除了"全部加 nofollow"之外,还有几种会让 URL 发现失败的写法:
- 在 robots meta 里写了 content="nofollow",结果整页链接都不跟进,目标 URL 一个都发现不了。
- 用 JS 给链接动态加上 rel="nofollow",服务端返回的 HTML 里没有,但渲染后带上,行为不一致。
- 把 nofollow 和跳转脚本混用,链接本身指向中转页,真正的目标 URL 反而藏在参数里。
- 在入口页 robots.txt 里对目标路径做 Disallow,这种情况下 nofollow 加不加都没意义,链接根本走不过去。
建议定期抽查入口页的 HTML 源码,而不是只看浏览器渲染后的效果。搜索蜘蛛拿到的是服务端返回的那一份。
怎么确认是不是 nofollow 导致的问题
- 抓一份入口页的原始 HTML,用 grep 或编辑器搜索 rel="nofollow",确认核心链接上没有。
- 查看服务器日志,看搜索蜘蛛是否请求过目标 URL。如果入口页有记录、目标 URL 长期没有,先排查链接属性。
- 做一组对照:同一入口页结构下,一组链接不加 nofollow,一组加上,观察两边的目标 URL 请求情况。注意这种对照只能作为参考,不能当作精确实验。
入口页上的 nofollow 不是"安全开关",它更像一道闸门。闸门关着的时候,别指望搜索蜘蛛自己绕过去。想清楚每条链接的用途,再决定加不加。