蜘蛛池入口页有两件事必须分开看:蜘蛛能不能抓,和抓到的页面会不会被放进索引。前者归 robots.txt 管,后者主要由 meta robots 或 X-Robots-Tag 管。很多入口页的问题不是出在内容上,而是这两个开关被打反了——要么蜘蛛根本进不来,要么进来之后整站结构留在了搜索结果里。
一、robots.txt 管的是「来不来」
robots.txt 属于抓取层的约定,蜘蛛在访问页面前通常会先请求它。写法不复杂,但粒度直接决定了入口页的命运:
- Disallow: / 会让遵守规则的蜘蛛放弃整站,入口页也就失去了被发现的机会,除非有外链把蜘蛛从别处引过来。
- 只 Disallow 具体目录,其他路径照常被抓,入口页仍然可以被发现和访问。
- Allow 用来在整体禁止的基础上开一个口子,规则按最长匹配优先,长度相同时 Allow 优先。
还有一个容易被忽略的前提:robots.txt 本身要能正常返回 200。如果它返回 5xx,部分蜘蛛会保守处理,短期内降低抓取频率;如果返回 404,等于没有规则,蜘蛛按默认可抓来处理。
二、noindex 管的是「留不留」
给了抓取许可,并不代表希望页面进索引。入口页大多是中转性质,出现在搜索结果里意义有限,还可能让站与站之间的关联更明显。控制索引主要有几个层次:
- meta robots 的 noindex:写在 HTML 的 head 中,只对 HTML 页面有效,对其他类型资源不起作用。
- X-Robots-Tag 响应头:可以作用在任意类型的响应上,包括文件下载和重定向响应,在服务器或 CDN 层配置,改动成本更低。
- 分 UA 的 robots 规则:为特定蜘蛛单独指定,但这仍然属于抓取层控制,替代不了 noindex。
三、最常见的一种自相矛盾
用 Disallow 挡住页面,同时又指望 noindex 生效——这是最典型的冲突写法。
逻辑并不复杂:Disallow 让蜘蛛不去抓这个 URL,它就永远读不到页面里的 noindex 指令,页面反而可能因为外链存在而被收录成一个只有链接没有摘要的结果。如果目标是「不留在索引里」,正确顺序是允许抓取、返回 200、明确 noindex,让蜘蛛读到指令后按流程处理。
反过来,如果只是不想让蜘蛛把抓取预算浪费在某个目录上,用 Disallow 就够,不必再叠一层 noindex。
四、几个容易忽略的细节
- robots.txt 有缓存:蜘蛛不会每次访问都重新读一遍,改动后生效存在延迟,别指望立刻看到变化。
- noarchive 与 nosnippet:控制的是快照和摘要展示方式,和「是否进索引」不是同一件事。
- 重定向链上的响应头:X-Robots-Tag 加在 301 或 302 响应上时,蜘蛛通常按最终落地页的指令判断,中间跳转的头部不一定被采纳。
- 拼写与大小写:noindex 写成 no-index、noIndex 都不被识别,等于没写。
五、从日志里验证设置
配置完不等于生效,改完规则后看 access log 时重点关注三件事:蜘蛛是否稳定地请求了 robots.txt;入口页的抓取频次有没有异常下滑;noindex 生效之后,原本有展示的入口页曝光是否逐步归零。如果发现蜘蛛彻底不来了,优先检查 robots.txt 是不是有语法错误或返回了 5xx,而不是急着去改内容。
把抓取许可和索引许可当成两件独立的事来配,入口页的行为会稳定很多。真正难的从来不是写对指令,而是在动手之前想清楚:这一步是想让蜘蛛少来,还是想让蜘蛛来了也别记住。