在蜘蛛池的日常配置里,入口页通常不希望被收录,于是加上 noindex;但入口页存在的意义又是把搜索蜘蛛引向目标 URL。这两件事听起来矛盾,实际上分属不同层面。noindex 管的是“这一页要不要进索引”,它并不要求蜘蛛停止访问,也不直接阻止蜘蛛解析页内链接。正常流程是:蜘蛛抓取入口页,读到 noindex,决定不索引该页,同时依然可能继续处理页面里的链接,再顺着去发现目标 URL。
抓取、索引、链接跟随是三件事
很多排查绕不开的原因,是把这三层规则当成一句话来用。可以粗略对应:
- 抓取层:robots.txt 的 Disallow,决定蜘蛛能不能来访问这个 URL。
- 索引层:noindex(meta 或 HTTP 头),决定这一页是否进入索引。
- 链接层:nofollow、rel 属性、链接是否可解析,影响蜘蛛是否继续跟随页内链接。
入口页只加 noindex,链接层没有动,链接被发现的可能性通常还在。相反,一旦在 robots.txt 里把入口页 Disallow,蜘蛛压根不抓这个页面,页内链接也就难以被读到,这时 noindex 写了也白写,因为蜘蛛看不到。
noindex 与 nofollow 别写混
蜘蛛池里最常见的失误,是把两个指令合并成一条 noindex, nofollow。本意只是不想入口页被收录,结果顺手把链接跟随也削弱了。写法不同,效果侧重也不同:
- 只写 noindex:入口页不进索引,页内链接仍有机会被处理。
- 写 noindex, nofollow:入口页不进索引,且不保证继续跟随页内链接。
- 只用 X-Robots-Tag 头写 noindex:适合非 HTML 响应,作用与 meta 类似,但来源在 HTTP 头。
- robots.txt 写 Disallow:阻止抓取本身,页内链接通常不会被解析用于发现。
如果入口页的定位就是转发发现,一般不建议加 nofollow;如果入口页只是历史遗留、纯粹不想出现在搜索结果里,才需要考虑更严格的组合。
几种容易失效或覆盖的情况
标签没有真正输出
用模板判断、前端脚本注入或边缘渲染生成的 noindex,可能只在浏览器里存在,蜘蛛拿到的 HTML 里并没有这段标记。核对时要看直接请求返回的源码,而不是开发者工具里渲染后的 DOM。
X-Robots-Tag 与 meta 叠加
如果服务器或 CDN 给入口页加了 X-Robots-Tag,它会和页面里的 meta 一起参与判断。两者冲突时,通常限制更强的一方生效。例如头里写了 noindex、页面里没写,结果一样是不索引。
CDN 仍返回旧版本
改过 noindex 配置后,缓存层可能还在输出旧 HTML,蜘蛛读到的仍是改动前的标记。此时先清缓存,再确认实际响应内容里到底有什么。
链接本身不可解析
链接用脚本后置渲染、放在 iframe 里、或写成不可点击的形式,即便 noindex 配置正确,链接层也已断掉。这类问题要单独排查,不要和 noindex 混为一谈。
怎么验证链接有没有被发现
- 看日志:入口页被抓取的时间点之后,目标 URL 是否出现抓取请求。只有入口页、没有目标 URL,先怀疑 nofollow、robots 规则或链接输出方式。
- 看状态:入口页在抓取统计里显示“已抓取未索引”是正常现象,不代表链接没被跟随。
- 做对照:同一批入口页里保留一条已知正常的链接作为对照,判断是配置问题还是整体抓取速度变化。
- 小流量测试:新建一个入口页,只放少量目标 URL,只加 noindex 不加 nofollow,观察一段时间的抓取日志再决定是否推广到全站。
一点实践建议
先把目标想清楚,再选规则。目标是入口页不进索引、链接继续可用,用 noindex 就够;目标是彻底阻止抓取,用 robots.txt,但要接受链接发现同步受限。两层规则同时存在时,务必分别核对,别用一句 noindex, nofollow 把三件事一起处理掉。另外,如果入口页长期 noindex 且内容单薄,蜘蛛来访频次可能逐步下降,进而影响目标 URL 的发现速度,这类现象更适合放到抓取频次和日志趋势里去观察。
noindex 不阻止蜘蛛读取页面,nofollow 才影响链接是否被跟随,robots.txt 阻止的是抓取本身。三者作用层不同,排查时不要混在一句话里下结论。