robots.txt 是爬虫访问一个站点时最先请求的文件之一。对蜘蛛池来说,入口页本身就是为了让蜘蛛发现链接,如果这份文件写错,等于在门口挂了一块“不欢迎”的牌子。它不复杂,但几个字符的差别就可能把想请的蜘蛛挡在外面,或者把不该放行的路径全部敞开。
蜘蛛先读 robots.txt,再决定抓什么
主流搜索引擎爬虫在抓取一个域名前,会先请求 /robots.txt。文件里按 User-agent 分组,每组下面写 Allow 和 Disallow 规则。同一个 UA 有多条规则匹配同一路径时,一般按“最长匹配优先”判断,长度相同时 Allow 优先。不写 User-agent 或者用 *,表示对所有爬虫生效。
需要注意,robots.txt 只是一种约定,不是访问控制。它挡不住恶意采集,也不决定页面是否被索引——想让页面彻底不出现,还得配合 noindex 或状态码处理。
三种常见写法与它们的后果
全站 Disallow
测试环境遗留的 Disallow: / 被带到正式入口页上,是最常见的低级错误。蜘蛛仍然可能访问首页拿到文件,但读到规则后就不再深入抓链接,入口页里的外链自然拿不到发现机会。
屏蔽参数与后台路径
入口页如果带筛选参数、分页参数,或者站内有搜索、登录、后台这类路径,用 Disallow 把它们排除掉是合理的。这样可以把有限的抓取配额留给真正想被发现的页面。
声明 Sitemap
在文件末尾写上 Sitemap: 并给出完整 URL,相当于给蜘蛛多一条发现路径。它不是必须的,但对收录慢的站点算是一个低成本的补充。
几个容易踩的坑
- 通配符用反了:* 匹配任意字符,$ 表示结尾。写 Disallow: /*? 想屏蔽参数,结果可能把带问号的正常页面一起挡住。
- 忘记 Allow 兜底:写了一大段 Disallow 又想在中间放行某个目录,必须显式写 Allow,否则不会自动开放。
- 路径写错层级:robots.txt 只对同级及以下目录生效,放在子目录里对整站无效。
- 返回状态异常:返回 404 通常被视为无限制;返回 5xx 时蜘蛛一般会暂停抓取,反复 5xx 可能压低抓取频率。
- UA 名字写错:不同爬虫的 UA 标识不同,名字写错规则不会生效,需要按爬虫分别设置。
- 把它当收录开关:屏蔽抓取不等于删除已收录页面,这两件事经常被混为一谈。
一份可以照着走的检查清单
- 直接在浏览器访问 /robots.txt,确认返回 200 且内容是最新版,不是旧缓存或 CDN 上的旧文件。
- 通读一遍,找出有没有 Disallow: / 这类全站屏蔽的残留。
- 确认想被发现的目录、入口页所在路径没有被误挡。
- 确认参数页、后台、搜索结果页等低价值路径已被排除。
- 检查通配符和结尾符号是否符合本意。
- 如果启用了 Sitemap 声明,确认地址可访问、内容可解析。
- 改动后观察一段时间日志,看蜘蛛请求量和抓取路径是否按预期变化。
别把它当成收录开关
robots.txt 影响的是“能不能抓”,而抓取只是收录链条里的一环。抓到了不代表一定收录,收录了也不代表有排名。把入口页的链接结构、内容质量和更新节奏一起处理好,比反复修改 robots.txt 更实际。改完记得留一份版本记录,出问题时能快速回滚。
提醒:任何规则调整后都建议先小范围验证,再全站应用,避免一次改动把入口页的抓取路径全部切断。