入口页能不能被蜘蛛抓到,除了链接结构和服务器响应,还有一层很容易被忽略的开关,就是 robots 相关指令。它可能写在 robots.txt、页面的 meta 标签或 HTTP 响应头里,形式不同,作用也不同。配错了,前面铺的入口页和链接可能根本传不出去;配对了,至少能保证蜘蛛该看的地方能看到、不该浪费的地方不浪费。
先分清三件事:抓取、索引、跟随
讨论 robots 设置之前,要先把三件事拆开:蜘蛛来不来抓这个 URL(抓取)、抓到的页面要不要进索引(索引)、页面里的链接要不要继续跟下去(跟随)。这三个开关互相独立,很多人把它们当成一件事,才会出现「明明放行了却没有收录」或者「明明禁止了却还在结果里」这类困惑。
robots.txt 的 Disallow:挡的是抓取,不是索引
robots.txt 是最外层的一层规则。Disallow 一个路径,意思是告诉遵守规则的蜘蛛别来抓这个目录下的 URL。它有几个特点值得注意:
- 它只约束抓取行为,不负责把已经收录的页面从索引里移除。页面如果被外部链接指向,仍可能以仅链接的形式出现。
- 被 Disallow 的页面,蜘蛛看不到里面的内容,自然也就看不到页面上的链接。如果入口页承担着把蜘蛛引向目标页的任务,禁止抓取等于自断链路。
- 规则按最长匹配优先,少写或多写一个斜杠,都可能把整个目录挡掉,改动前最好用日志或测试方式验证一遍。
meta robots 与 X-Robots-Tag:控制索引和跟随
页面级的指令更细。常见取值有 noindex、nofollow、noarchive 等,用逗号分隔可以叠加。它们只对已经被抓到的页面生效——蜘蛛没抓到页面,就读不到这行 meta。这一点正好和 robots.txt 的 Disallow 形成对照:
- 想让页面从索引里消失,用 noindex,并且必须让蜘蛛能抓到页面,否则它读不到这个指令。
- 不想让蜘蛛顺着页面上的链接继续爬,用 nofollow。但它只是建议,蜘蛛未必完全照做。
- X-Robots-Tag 是写在 HTTP 响应头里的等价形式,适合非 HTML 文件,也方便在服务器层面统一加。
几种规则叠加时,通常是最严格的那条起作用。比如 robots.txt 禁止抓取、页面又写了 noindex,最后的结果往往不是干净移除,而是页面留在索引里却无法被更新。
蜘蛛池入口页通常怎么配
入口页的角色是被发现、被读取、把链接传出去,所以常规做法是允许抓取、允许跟随,不要顺手在入口页上叠加 noindex。真正需要收紧的往往是另外几类页面:
- 纯中转页、空壳页,如果不希望它们占据索引位,可以在允许抓取的前提下加 noindex,让蜘蛛读到链接但不保留页面。
- 参数拼接出来的重复 URL,优先用 canonical 和参数处理规则解决,而不是一上来就 Disallow 整个参数目录。
- 后台、测试、统计类路径,直接用 robots.txt 挡掉,减少无意义的抓取消耗。
几个容易踩的误区
把 robots.txt 当成清理工具,是入口页配置里最常见的误解。它管的是抓取,不管索引;想移除页面,需要页面本身可被抓取、并返回 noindex,或者用其他合规方式处理。
- 改了 robots.txt 却忘了蜘蛛会缓存旧版本,规则生效有延迟,别改完当天就下结论。
- 入口页模板批量复制时,把 nofollow 一起复制进去,链接全部不被跟随,等于白建。
- 用脚本或响应头动态下发 robots 指令,蜘蛛如果拿不到那段脚本,指令就不存在。
上线前可以过一遍的检查项
- robots.txt 能正常访问,返回 200,没有因为服务器故障变成 5xx 或跳转。
- 入口页路径没有被 Disallow 误伤,日志里能看到蜘蛛的实际访问记录。
- 入口页 meta 里没有意料之外的 noindex、nofollow。
- 入口页与目标页的 robots 规则不冲突。
- 规则改动留档,方便对照之后抓取数据的变化。
总体来说,robots 相关设置属于入口页的基础设施,不需要多复杂,但要求前后一致。把抓取、索引、跟随三个开关分清楚,再结合日志观察实际抓取情况,通常比反复换策略更有效。