蜘蛛进入池子时,最先请求的经常不是入口页,而是根目录的 robots.txt。这个文件、页面里的 meta robots、以及 HTTP 响应头中的 X-Robots-Tag,共同决定了蜘蛛能不能抓、抓到之后怎么处理。这三者里任何一个配错,入口页都可能白做。
robots.txt 是站点级的抓取开关
robots.txt 只放在域名根目录,靠 User-agent 分组生效,同一个域名下所有路径共享一份。它控制的是抓取,不是索引——被 Disallow 挡住的 URL,蜘蛛连内容都读不到。
- 别顺手全站禁止。入口页要被抓取,就不要出现 “Disallow: /” 这类写法,除非你确实只需要蜘蛛读 robots.txt 本身。
- 注意前缀匹配。“Disallow: /pool/” 会连带挡住 /pool/a.html 等所有下级路径,目录粒度要提前想清楚。
- 别挡静态资源。入口页若依赖 CSS、JS 渲染,把资源目录一起禁掉,蜘蛛看到的可能是残缺页面。
- 多域名多份规则。每个入口域名都有各自的 robots.txt,批量建池时要确认没有继承到旧规则。
meta robots 与 X-Robots-Tag 的区别
meta robots 写在 HTML 的 head 里,X-Robots-Tag 走 HTTP 响应头。两者指令集大致相同,但生效前提不同:meta 需要页面被成功抓取并解析才能读到,X-Robots-Tag 在拿到响应头的那一刻就能生效,非 HTML 文件也能用。
- noindex 表示不要把该页放进搜索结果,但不影响抓取和链接跟随。
- nofollow 表示不要沿着页面上的链接继续走,用它会影响入口页向外传递的发现路径。
- none 等价于 noindex 加 nofollow,使用时要想清楚它的双重含义。
- X-Robots-Tag 的语法要写全,例如 “X-Robots-Tag: noindex”,缺前缀会变成无效响应头。
入口页常见的几种组合
入口页的角色是“被蜘蛛发现、并把蜘蛛送到目标页”,所以多数情况下希望它可抓取、链接可跟随。
- 只希望蜘蛛走一遍、不想让入口页出现在结果里:保持可抓取,加 noindex,链接仍然 follow。
- 入口页本身也是内容页:正常 index、follow,重点转向内容质量与更新节奏。
- 临时停用的入口页:更推荐返回 404 或 410,而不是用 robots.txt 去遮,遮住只会让蜘蛛反复尝试。
- 测试阶段的页面:用 X-Robots-Tag 在服务器层临时加 noindex,比改模板更快也更可控。
几个容易踩的坑
- robots.txt 与 noindex 叠加。先 Disallow 再指望 meta noindex 生效,逻辑上不成立——蜘蛛读不到页面,自然也读不到 meta。
- CDN 或 WAF 返回的 robots.txt 不是你写的那份。有些节点会自动生成或缓存旧版本,排查时要看实际响应内容,而不是看源站文件。
- 返回 403、503 时怪 robots。那多半是防火墙或源站限流导致的,与 robots 规则无关,日志里的状态码能区分。
怎么验证配置是否生效
- 用命令行带指定 User-Agent 请求一次,看响应头和正文字段是否与预期一致。
- 在搜索资源平台的 robots 测试工具里跑一遍,确认目标 URL 处于允许抓取状态。
- 翻 access log,看蜘蛛是否请求过 robots.txt、请求之后有没有继续访问入口页。
robots 相关配置的改动成本很低,影响面却很大。动手之前先确认要的是“不被抓”还是“不被收录”,这是两个完全不同的开关。