给页面加上 noindex,很多人的预期是“蜘蛛别再来了”。实际观察日志会发现,被 noindex 的 URL 依然会出现抓取记录,有时频率还不低。这不是蜘蛛没读懂指令,而是 noindex 和“不抓取”本来就作用在不同环节。
noindex 管的是索引,不是抓取
蜘蛛处理一个 URL 大致会经过几步:发现地址、发起抓取、解析内容、决定是否索引、安排后续调度。noindex 是在“决定是否索引”这一步生效的指令,它告诉搜索引擎:这个页面可以看,但不要放进索引。抓取发生在它之前,并不会因为 noindex 而被取消。
所以日志里出现 noindex 页面的抓取记录属于正常现象。真正决定蜘蛛来不来的,是 URL 有没有被发现、robots.txt 允不允许访问、服务器能不能正常返回内容。
为什么蜘蛛还会反复抓 noindex 页面
- 页面上的链接仍然存在,蜘蛛顺着内链多次发现它,抓取调度就会把它排进去。
- 指令可能变化。今天 noindex,明天也许改回 index,蜘蛛需要定期复查才能及时响应。
- 页面本身有外链或一定访问量时,蜘蛛会把它当成活跃 URL 对待。
- 如果它还被写在 Sitemap 里或通过接口提交,等于主动提醒蜘蛛这里有更新。
把 noindex 理解成“内容不许进索引”,而不是“URL 不许被访问”,很多现象就说得通了。
noindex 与 robots.txt 的区别
想让蜘蛛彻底不来,常见做法是在 robots.txt 里 Disallow 掉对应目录。但这两者有先后关系:robots.txt 是请求层面的拦截,蜘蛛被挡住后拿不到页面内容,也就看不到页面里的 noindex 标签。
如果一个页面同时被 robots.txt 屏蔽、又加了 noindex,搜索引擎只能知道“这里禁止抓取”,无法确认 noindex。结果可能是:URL 因为外链等原因仍出现在索引里,但显示为没有描述的条目。这种情况通常比单纯 noindex 更难处理。
较稳妥的顺序是:先让页面可以被抓取,确保 noindex 能被读到;等 URL 从索引中逐渐消失后,再考虑是否需要进一步用 robots.txt 拦截。
noindex 页面会不会浪费抓取资源
会占用一部分,但不必过度紧张,影响主要取决于数量级。几个到几十个页面,对抓取调度几乎没有感知;如果站内存在成千上万个自动生成的 noindex 页面,而且都有内链指向,蜘蛛的抓取配额就会被分走,正常页面的抓取节奏可能变慢。
这种情况下更值得做的是减少这些页面的入口,而不是只加 noindex。比如把无价值的筛选页、参数页从内链和 Sitemap 中去掉,让蜘蛛少发现它们。
自查清单
- 用日志确认 noindex 页面的抓取频率,判断是零星复查还是成规模反复抓。
- 检查 noindex 页面是否还在 Sitemap 中,既然不打算索引,通常也没有必要继续放在地图里。
- 确认没有出现“robots.txt 屏蔽加 noindex”的组合,尤其是被屏蔽目录里的页面标签。
- 确认页面返回的状态码正常。noindex 不需要配合 404 使用,返回 404 的页面本身就不必再谈 noindex。
noindex 是索引层面的指令,它不负责切断抓取路径。想减少蜘蛛访问,要从链接、Sitemap、robots.txt 这些入口和通路上解决;想控制索引,再用 noindex 表达。两者各管一段,混在一起用,问题往往出在中间那段没人管。