很多人把注意力放在入口页本身的标签和内容上,却忽略了 robots.txt。它是搜索引擎蜘蛛在抓取任何一个 URL 之前,通常最先读取的文件。这个文件配错的代价,往往比页面级的 meta 标签更大:一处通配符写歪,可能整片路径都被挡在门外,而且短时间内不容易察觉。
robots.txt 的作用范围
robots.txt 必须放在域名根目录下,只对同一个协议、同一个域名、同一个端口生效。子域名是独立的一份配置,主站写了规则并不会自动覆盖子域。它的解析遵循协议约定:路径通常区分大小写,User-agent 字段则一般不做大小写区分。
另外,蜘蛛会缓存这个文件。改动之后不会立刻生效,具体多久重新拉取一次,取决于上一次的响应状态和缓存时间设置。想确认改动是否被读到,只能靠日志观察。
基本语法要点
- User-agent:指定规则对谁生效,用 * 表示所有蜘蛛。
- Disallow:声明不希望被抓取的路径前缀。
- Allow:在被 Disallow 覆盖的范围内开一个口子,主流引擎支持,匹配时按更具体的规则优先。
- Sitemap:填写站点地图的绝对 URL,属于声明性指令。
- Crawl-delay:只有部分引擎支持,主流引擎已不再依赖它来限速。
通配符和结尾符号的支持程度各家不一,只被部分引擎识别。如果你的规则依赖这些写法,最好用对应平台提供的测试工具先验证一遍。
蜘蛛池场景下的常见误封
- 把测试环境的 Disallow: / 直接带到线上,整站被拒。
- 屏蔽了 CSS、JavaScript 目录,导致蜘蛛拿到的是一个结构残缺的页面。
- 规则写得太宽,把希望被发现的入口页路径一并挡掉。
- Sitemap 文件本身也在被屏蔽的目录里,声明等于失效。
- 分段顺序或分组写法出错,某段规则实际没有生效。
- 为某个蜘蛛单独写规则时,忘了其他蜘蛛的段落。
与 meta robots 的分工
两者解决的不是同一个问题。robots.txt 表达的是「不要来抓」,meta robots 表达的是「抓到了也不要索引」。被 Disallow 的页面,蜘蛛拿不到正文,自然也就看不到页面里的 noindex,所以它无法互相替代。
如果目的是让一个页面从索引中消失,更稳妥的做法是允许抓取、在页面里写 noindex,而不是直接在 robots.txt 里封死路径。
配置前后的建议清单
- 上线前直接请求一次根目录下的 robots.txt,核对实际返回内容。
- 改动后用站长平台的抓取测试工具验证几个关键路径。
- 只保留必要的规则,避免把历史遗留条目一直带着。
- Sitemap 使用绝对 URL,并确认文件本身可以被正常访问。
- 记录每次变更时间,方便和后续的日志数据对照。
- 有多个子域或独立目录时,逐份确认规则归属,不要想当然。
改动之后怎么观察
规则调整后,蜘蛛的行为不会立刻变化。可以从访问日志里筛出对 robots.txt 的请求记录,看它多久重新拉取一次;再对比入口页请求数在改动前后几天的走势,判断是否出现了明显下滑。如果入口页请求量突然归零,而服务器本身正常,优先回头检查这个文件。把它当成一次常规配置变更来对待,改动、验证、观察三步走,比事后排查要省力得多。