robots.txt 是蜘蛛进门前的第一张说明
蜘蛛访问一个陌生域名时,通常会先请求 /robots.txt,再决定哪些路径可以抓、哪些不必碰。对蜘蛛池来说,入口页往往批量部署、共用同一套模板,一份写错的 robots.txt 影响的不只是一个页面,而是整批入口页的抓取效率。所以这份文件值得单独看待,而不是套用模板随手一放。
需要明确的是,robots.txt 只是一个约定,不是强制机制。正规搜索引擎蜘蛛会遵守,但采集脚本和部分小爬虫未必理会。把它理解成“抓取入口的开关”更准确,而不是安全防线。
放行、限制、写错:三种常见状态
完全放行
如果入口页就是希望被蜘蛛发现,最省事的写法是只声明 sitemap,不做任何 Disallow,例如:
- User-agent: *
- Allow: /
- Sitemap: https://example.com/sitemap.xml
这种写法没有歧义,蜘蛛能顺着入口页继续往下走,也有一条主动线索可循。
部分限制
常见的限制对象是后台路径、统计脚本、临时目录、重复参数页。例如不希望蜘蛛在筛选参数上反复打转,可以屏蔽带参数的路径。但要注意,被 Disallow 的页面蜘蛛不会抓取,也就读不到页面里的 noindex,两者不能同时指望。
写错导致整站被挡
最典型的事故是 Disallow: / 残留。测试环境留下的这一行,上线后会让整批入口页对蜘蛛关门,而站长往往在日志里看到抓取量归零才回头排查。批量部署时,这一行值得单独检查。
状态码返回什么,蜘蛛反应不同
- 200 正常返回:按文件中的规则执行。
- 404:视为没有限制,可以抓取全部路径。想让蜘蛛自由抓取时,404 也算一种放行信号。
- 5xx:蜘蛛一般会判断服务器临时故障,暂停一段时间再回来,短期内可能减少抓取。
- 301/302 跳转:会跟随跳转目标读取规则,但跳转链不宜过长。
如果入口页是批量域名,建议逐个确认 robots.txt 的返回状态,不要让某个域名的异常拖慢整批抓取节奏。每个子域名或独立域名都有各自的 robots.txt,不能靠一个主域名覆盖全部。
缓存与生效延迟
蜘蛛会缓存 robots.txt,缓存时间从几小时到一天不等。改动之后不会立刻生效,也不需要反复改来改去。频繁变动反而可能让蜘蛛重新判断抓取策略。改完观察访问日志里的请求变化,比反复提交更实际。
robots.txt 与 noindex 的分工
不少人想用 robots.txt 让页面不被索引,这是错位的用法。Disallow 只阻止抓取,URL 仍可能因为外链出现在结果里,只是缺少内容摘要。要真正控制收录,应该允许抓取,再在页面上用 noindex。对蜘蛛池入口页而言,目标是被发现,所以多数情况下应该放开抓取,而不是屏蔽。
入口页场景的实操建议
- 入口页需要被发现,就明确 Allow,避免含糊写法。
- 把 sitemap 地址写进 robots.txt,给蜘蛛一条主动线索。
- 限制只针对确实无价值的路径,避免误伤待发现的链接页。
- 批量部署时统一检查测试规则,别让它带到线上。
- 不要指望 robots.txt 防盗链或防采集,它做不到。
robots.txt 的作用是告诉蜘蛛“这里可以来、那里不必来”,它决定的是抓取,不是收录,更不是安全。动手写之前,先想清楚入口页的目标是什么。