robots 相关指令是入口页配置里最容易被忽略、又最容易造成误伤的一环。它本身不是安全措施,只是给爬虫的一份“说明文件”,告诉对方哪些可以抓、哪些不建议抓。入口页的作用是让蜘蛛发现并顺着链接走到目标页,如果 robots 配置把这条路堵住,前面的域名、IP、模板工作基本白做。
三种常见写法,作用范围不一样
- robots.txt:放在域名根目录,对整个站生效,按 UA 或目录做允许/禁止。蜘蛛要先取这个文件,再决定抓什么。
- meta robots:写在页面 head 里,只对当前页生效,能设置 noindex、nofollow、noarchive 等。
- X-Robots-Tag:放在 HTTP 响应头,效果类似 meta robots,适合非 HTML 文件或不想改模板的场景。
三者优先级不完全相同,但共同点是:Disallow 只是“别来抓”,不等于“别收录”。如果页面已被别处链接指向,仍可能以无摘要的形式出现在结果里。想真正让页面退出索引,通常先用 noindex 让蜘蛛抓到并读到指令,等页面从索引里退出后,再考虑用 robots.txt 屏蔽。
入口页该放开的几类
入口页的职责是“被发现”,所以大多数情况下应该允许抓取。需要重点检查的是:
- 入口页本身没有被误写进 Disallow,批量生成模板时最容易整段复制错。
- CSS、JS 这类渲染资源不要屏蔽。蜘蛛要执行脚本才能看到完整内容时,屏蔽资源可能导致它按空白页理解。
- 跳转链上的中间页,如果靠 JS 或 meta refresh 跳转,更需要允许抓取,否则蜘蛛到不了目标页。
- 如果入口页存在大量筛选参数,可以只放开必要参数,把无意义组合放进 Disallow,减少无效抓取。
该收紧的几类
- 后台、测试页、数据接口:这些页面没有分发价值,被抓只会消耗资源,也容易暴露站点结构。
- 重复内容页:同一批入口页的多个排序、分页变体,可以用 canonical 或 robots 收敛,不必全部放开。
- 已决定停用的入口页:如果只是不想让它再被抓,用 robots.txt 屏蔽比直接删掉更省事;如果整个入口页群要退役,返回 410 或 301 到有效页更清晰。
几个反复出现的误区
第一个误区是用 robots.txt 当作“隐藏入口页”的手段,以为蜘蛛看不到就不会识别出这是入口页群。实际上入口页一旦被外部链接、历史记录或 sitemap 暴露,屏蔽指令反而更显眼,而且这种方式对真实访客同样无效。
第二个误区是“先全站 Disallow,观察一阵再说”。全站屏蔽后再恢复,蜘蛛重新抓取的节奏往往比预期慢,入口页的发现周期会被拉长。如果只是担心某个目录,按目录屏蔽即可。
第三个误区是同一批入口页里混用 noindex 和 Disallow。两者组合的结果是“蜘蛛抓不到、也就读不到 noindex”,页面可能长期停留在索引里。需要用 noindex 时,就先别用 Disallow。
把 robots 当成一份给爬虫的通行说明,而不是安全锁。入口页要能被抓到,中转环节要能走通,不想被索引的页面用 noindex 处理,不想被抓的目录用 Disallow 处理——顺序别搞反。
落地时的检查清单
- 入口页域名根目录是否有 robots.txt,内容是否符合预期,是否残留测试环境的屏蔽规则。
- 入口页模板里是否带上了不该有的 meta robots,常见于整站复制的模板。
- 服务器响应头里是否有多余的 X-Robots-Tag。
- 停用、改版、迁移过的入口页,robots 规则是否同步更新,避免“页面已 301 但旧规则还屏蔽着新路径”。
- 改完规则后,用抓取测试工具实际验证一次,而不是只看配置文件。
规则本身不复杂,难的是保持一批入口页的配置一致。批量生成时把 robots 相关项做成统一模板,比事后逐个排查省力得多。