robots.txt 是站点根目录下一个纯文本文件,用来告诉爬虫哪些路径可以抓、哪些不要抓。它很小,却经常被忽略,直到某天发现某个栏目一个页面都没被访问过,回头一看才发现规则里把它挡住了。它管不了收录结果,但能决定爬虫有没有机会走到你的页面跟前。
robots.txt 能做什么,不能做什么
需要先分清边界。robots.txt 属于建议性协议,遵守它的爬虫会照做,不遵守的依然会访问;它也不能用来隐藏敏感内容,更不能替代 noindex。要禁止页面出现在搜索结果里,正确做法是页面本身的 meta robots 或响应头,而不是靠 robots.txt 挡掉——被 robots.txt 挡住的页面,爬虫读不到 noindex,反而可能因为外部链接而以裸地址形式出现。
常见问题自查清单
- Disallow: / 误伤全站:多见于测试期写的规则,上线时忘了删,结果整站被挡在门外。
- 挡掉了 CSS 和 JS:爬虫渲染页面需要这些资源,屏蔽之后对页面的理解会打折扣。
- 顺手屏蔽了分页、标签页、筛选页:如果这些页面本身有流量价值,一刀切会让大量长尾地址失去被发现的机会。
- 路径写法不严谨:规则区分大小写,也不支持随意通配,写得太宽会误伤旁边的目录。
- 只写了 Disallow,没写 Sitemap:站点地图声明是给爬虫的入口提示,成本极低,值得补上。
- 测试环境规则被复制到正式环境:或者反过来,正式规则被带进了测试站,两边互相干扰。
- 多套规则互相冲突:允许与禁止叠加时,容易得出和预期完全不同的结果。
按顺序做一遍检查
- 直接在浏览器打开站点根目录下的 robots.txt,确认返回正常状态码,内容是最新的,而不是缓存里的旧版本。
- 逐条读 Disallow,问自己这条规则当初想挡什么,现在是否还需要挡。
- 用爬虫模拟工具分别以主流搜索引擎爬虫的身份请求几个关键页面,看返回的是允许还是被拦。
- 对照服务器访问日志,观察被挡目录是否真的没有爬虫访问,同时确认允许目录的访问是否正常。
- 确认站点地图地址可访问,并且里面的 URL 与 robots 规则之间没有矛盾。
修改时留个记录
规则改动叠加起来很容易失控。建议每次改动写清日期、改了什么、为什么改,并在改动后的一两周内回看日志,确认爬虫访问量没有异常下滑。发现挡错时立刻恢复,不要抱着再看几天的心态。
robots.txt 是一道门,不是一堵墙。它的作用是引导爬虫把时间花在值得的页面上,而不是把整个站点关起来。
和 URL 发现、抓取效率的关系
站点的抓取预算是有限的,robots.txt 里的规则会直接影响爬虫把时间用在哪里。把无意义的结果页、内部搜索页、重复参数页挡掉,往往比继续堆内容更能改善抓取效率。但前提是你清楚哪些页面确实没有价值,而不是图省事全挡。检查完 robots.txt 之后,建议再看看站点地图和站内链接,三者配合起来,URL 的发现路径才算完整。
最后提醒一句:robots.txt 只是基础配置,改对了不代表页面一定会被收录,它只负责让爬虫顺利走到门口。剩下的还取决于内容质量、站点结构和整体信任度,这几件事没有捷径可走。