很多人把 robots 当成一句随手写的礼貌用语,在蜘蛛池里复制一段就上线了。实际上,入口页的抓取路径是否顺畅、抓取预算花在哪里,都会被这几行配置直接影响。写错的地方不用多,一两个 disallow 就能把蜘蛛挡在门外,或者反过来把不该暴露的目录全部摊开。
robots.txt 管的是能不能爬,不是能不能收录
robots.txt 放在域名根目录,用来告诉爬虫哪些路径可以抓取。它只约束抓取行为,并不决定收录结果:被 Disallow 的 URL 仍可能因为外部链接出现在索引里,只是没有内容摘要;而 Allow 也不代表一定会被收录。这两件事经常被混为一谈,于是有人用 Disallow 去控制收录,结果两头落空。
入口页的诉求是让蜘蛛顺畅通过,所以 robots.txt 通常保持简单:允许全站抓取,只挡掉后台、日志、接口这类非内容路径。不要为了所谓的整洁去 disallow 入口页本身,那等于自己把链路剪断。
meta robots 与 X-Robots-Tag 的分工
页面级的 noindex、nofollow 写在 HTML 的 head 里,作用于单个页面。非 HTML 资源,比如 PDF、图片、接口返回的 JSON,用响应头 X-Robots-Tag 更合适,因为这类文件里塞不进 meta 标签。两者蜘蛛都能读到,但覆盖范围不同,配置时要分清对象。
哪些该放行
- 入口页、列表页、聚合页,这些是 URL 发现的主干
- 承载实质内容的目标页
- 分页链接,前提是分页里确实带着可继续爬取的详情链接
- sitemap 文件与必要的静态资源
哪些该屏蔽
- 后台、测试目录、临时环境、备份文件
- 带排序、筛选参数、能生成大量近似 URL 的页面
- 站内搜索结果页与搜索参数
- 统计脚本、跳转脚本所在的路径
- 与已收录页面高度重复的副本页
最后一条要说明一下:重复内容既可以屏蔽,也可以用 canonical 处理,选哪种取决于你是否希望这些 URL 被索引。拿不准时,先屏蔽更保险, spiders 的注意力是有限的。
nofollow 什么时候用
页面里如果有大量不可控的外链,比如评论区、采集来的正文,加上 rel="nofollow" 能减少蜘蛛注意力被带走的情况。但入口页之间、入口页到目标页的关键链接不要加 nofollow,否则整条 URL 发现链路会被削弱。另外,nofollow 如今更多是提示而非硬性指令,别指望它百分百管用。
容易踩的坑
- 一边用 Disallow 屏蔽页面,一边期待它被收录,指令自相矛盾
- 上线时直接复制主站的 robots.txt,把整个入口目录挡掉
- 通配符规则写得不严谨,该放行的路径被误伤
- 测试环境没有 robots.txt,蜘蛛误抓一堆临时页面
- meta noindex 和 canonical 同时指回自己,指令互相打架
上线前的检查清单
- 用 robots.txt 测试工具验证关键路径是 Allow
- 抽查入口页的 head,确认没有意外出现的 noindex
- 确认 X-Robots-Tag 没有被误加到普通 HTML 页面
- 翻服务器日志,看蜘蛛是否真的抓到了入口页和目标页
- 改动后观察几天抓取量变化,不要一次性大改
还有一点值得提醒:robots 只是抓取层的开关,它既不解决内容质量问题,也不会让排名变好。把放行和屏蔽的边界理清楚,让蜘蛛少走冤枉路,剩下的事仍然要靠内容本身和正常的运营节奏。