几乎所有做过网站的同学都听说过 robots.txt,它是放在网站根目录下的一个纯文本文件,作用是告诉搜索引擎爬虫哪些路径可以抓取、哪些不可以。配置得当,搜索引擎可以把有限抓取额度用在刀刃上,网站抓取效率自然高;可如果写错了,一些小细节也可能让搜索流量出现断崖式下跌。下面这篇文章,就围绕它的基本写法和那些容易踩的坑展开。
首先要明确,robots.txt 管的只是"抓取",而不是"收录"。你在这个文件里禁止了某个页面,爬虫确实不会去抓,但如果有其他网站链接指向它,这个 URL 仍然有可能出现在搜索结果中,只是没有抓取内容。所以想彻底不让某页出现在结果里,应该用 noindex 标签,而不是 robots.txt。
其次,它也拦不住恶意爬虫。文件里的规则对正规搜索引擎是约定,但对采集、攻击类程序基本无效。涉及用户隐私或后台地址的目录,务必叠加登录验证、IP 白名单等防护手段,不能只靠 robots.txt 锁门。建议每季度检查一次文件内容,防止误写把不该暴露的路径泄露出去。
整个文件由若干"规则组"构成,每一组以 User-agent 开头,格式统一为"字段名: 值"。写的时候注意冒号用英文半角,字段名建议小写,以减少跨搜索引擎的兼容性问题。
这个字段指定规则生效的对象。比如写 User-agent: Googlebot,就只对谷歌爬虫生效;写通配符 User-agent: *,就对所有搜索引擎生效。一个文件里可以写多个组,针对不同爬虫给不同权限。如果同一爬虫命中了多个组,主流搜索引擎按"最长匹配优先"处理,越具体的一组越先被采纳。
Disallow 用来声明禁止抓取的路径,Allow 相反,用来声明允许抓取。这里有个易混点:Disallow: 后面留空,意思是完全不设限制,等同允许抓取全站。当 Allow 和 Disallow 同时命中某条路径时,规则是谁的路径更长、更具体谁生效。例如同时有 Disallow: /api/ 和 Allow: /api/public/,那么后者更长,它的允许规则优先。路径建议写相对根路径,例如 /admin,别写成去掉域名后的绝对路径或其他容易引起歧义的形式。
Sitemap 这一行用来声明网站地图的完整 URL,帮助爬虫快速拿到内容清单,一般放文件末尾。Crawl-delay 用于设定抓取间隔,但谷歌早就声明忽略这个值,想要控制抓取频率得去 Google Search Console 的后台设置。Bing 等其它搜索引擎仍然认这个指令,有需要可以保留。
下面给出几个高频需求的标准写法,直接复制后改改路径就能用。
注意,第一组写法会让爬虫直接放弃抓取整站,生产环境千万别误用,否则页面会全部从索引中掉出。
有经验的老站长都会提醒:robots.txt 看起来简单,坑却不少。最常见的问题是用了大写字母,比如写成 Disallow: /Admin,而路径实际是 /admin,大小写不匹配就会失效。另一个高频问题是在 Disallow 的值里用了空格,比如 Disallow: /admin ,这会导致规则不生效。还有人在路径中写了通配符 $,谷歌支持,但其他搜索引擎支持有限,跨平台效果不稳定。
更隐蔽的问题是,有些开发者把抓取 URL 和页面实际路径搞混。比如网站用的是伪静态,实际地址是 /article?id=123,robots 里却写了 Disallow: /article,两者对不上,规则自然形同虚设。建议每次修改后用搜索引擎自带的抓取测试工具验证一下,确认规则生效再上线。
没有固定时间。谷歌一般会在几天内重新抓取一次该文件,但如果设置了较长的缓存时间,或者网站更新频率低,可能会延迟。建议修改后主动在搜索后台提交更新,加快生效。
有区别。Disallow: 留空表示允许抓取,是明确的指令;而用井号 # 开头写注释只是说明性文字,本身不产生任何规则。有人误把注释当成屏蔽指令,结果规则从未生效。
不同爬虫匹配到多个组时,最长匹配的规则组优先。如果两条组规则完全一致且都很短,部分搜索引擎会合并处理,有的则只认第一条。为了稳妥起见,建议同名爬虫只写一组,把路径规则集中在那一组里。
robots.txt 虽小,但语法细节和边界认识直接影响搜索抓取表现。配置时先想清楚要拦的是什么,再动手写路径,最后一定要用工具验证一遍。建议把现有文件备份一份,修改前对比差异,避免误操作。只要把抓取边界管好,把 noindex 用在收录控制上,网站的搜索表现就能保持稳定。