在蜘蛛池入口页的优化里,rel="nofollow" 是最容易被当成“开关”来用的属性。有人觉得加上它就等于告诉搜索蜘蛛“别抓这个链接”,也有人觉得加了也白加。这两种理解都不太准确,值得把边界讲清楚。
nofollow 到底在表达什么
rel="nofollow" 最初的设计意图是“我不为这个链接背书”。它更接近一种信任声明,而不是抓取指令。搜索引擎收到它之后,通常会降低对目标 URL 的信任传递,但这并不等于禁止发现该 URL。
现实中的处理方式因引擎而异,也随时间变化:有的引擎会完全忽略这类链接,有的仍然会把链接中的 URL 放进待发现队列,只是不传递权重或降低权重。把 nofollow 当成“抓取开关”来用,风险不小。
关键区别:发现 URL 和抓取 URL 是两件事。nofollow 主要影响的是链接的信任与权重语义,不是抓取权限。
三种容易混淆的 nofollow 写法
1. 链接级 rel="nofollow"
写在 a 标签里,只作用于这一条链接。入口页里通常只有部分链接会加。这种写法对“是否被发现”的影响最小,不少引擎依旧会顺着链接走一遍,只是不给权重。
2. 页面级 meta robots nofollow
写在 head 里,作用于整页所有链接,影响范围大得多,也更容易被引擎严格执行。如果在入口页用了它,等于把这个页面上的所有出链都做了降权处理。
3. 响应头 X-Robots-Tag: nofollow
效果与页面级 meta 类似,但作用在 HTTP 层,对非 HTML 文件同样生效。做蜘蛛池时,如果由中间层(CDN、反向代理、框架中间件)统一加了这个头,很容易在模板源码里看不到,却在日志里发现蜘蛛来得很少。
蜘蛛池场景下怎么取舍
- 目标是让搜索蜘蛛发现目标 URL:入口页的出链建议保持默认,不要加 nofollow。发现渠道本来就有限,再主动收窄没有好处。
- 入口页里存在大量指向站外、与主题无关的链接:可以只对这些链接加 nofollow,避免入口页整体被当成链接农场式的页面。
- 不要把整站或整张入口页设为 nofollow。这会让入口页在发现层面失去大部分价值,也会让“入口页翻倍但目标 URL 抓取量不涨”这类问题更难排查。
怀疑 nofollow 影响发现时的排查顺序
- 先看渲染后的 HTML。用浏览器“查看网页源代码”,而不是开发者工具里的 DOM,确认 rel 属性确实输出在源码中。
- 检查 head 里是否存在 meta name="robots" content="nofollow",以及响应头里是否有 X-Robots-Tag,两者可能同时存在。
- 回到服务器日志里找搜索蜘蛛记录。如果入口页本身被抓了,但目标 URL 从来没被访问过,问题可能不在 nofollow,而在链接是否真实可见、是否靠 JS 渲染、中间是否夹了跳转。
- 确认是不是中间层自动加的属性。部分 CMS 或安全插件会给所有站外链接自动补上 rel="nofollow noopener",如果入口页是批量生成的,很容易中招。
几个常见误区
第一,把 nofollow 当成“防止蜘蛛发现”的手段。真正会阻止抓取的是 robots.txt 的 Disallow 和页面级的 noindex,nofollow 不在这个层级。第二,认为加了 nofollow 就一定不会被抓,抓取决策还取决于入口页自身的权重、抓取配额以及目标 URL 的历史质量。第三,频繁在加与不加之间来回切换,导致日志里的行为难以对比,反而增加排查成本。
更稳妥的做法是先明确这个入口页的目标是“被发现”还是“控权重”,再决定链接属性怎么写。目标是发现,就保持链接可以被正常解析;只是不想传递信任,就只对特定链接做处理,而不是整页处理。