维护一个网站,几乎都会碰到 robots.txt 这个文件。它静静地躺在站点根目录下,用几行纯文本给搜索引擎的爬虫指路,告诉它们站里哪些地方可以逛,哪些地方最好别进。用得好,爬虫会把有限的抓取额度花在你的优质页面上,收录效率自然更高;要是写错了,轻则部分页面迟迟不被收录,重则整站面临被降权甚至清空索引的风险。这篇内容就从零开始,把它的语法规则、典型误区和实际操作一次说清楚。
robots.txt 的固定访问地址就是“你的域名 + /robots.txt”,任何人都可以通过浏览器直接查看。它的本质是给爬虫的一份“君子协定”,用来规划它们抓取站内页面的顺序和范围,类似于路口的疏导员,但并不能决定某个页面最后是否出现在搜索结果里。
这一点极其关键:如果某个页面你不希望被搜索引擎收录,唯一的可靠办法是在该页面头部加上 noindex 标签;而 robots.txt 只能拦住爬虫的“抓取”动作,却管不了“收录”这件事。另外,这份文件只对遵守协议的搜索引擎有效,各种恶意抓取工具根本不会看它一眼。所以,任何涉及用户隐私、后台登录、支付回调或核心数据的目录,绝不能依赖 robots.txt 来保障安全,必须搭配登录鉴权、IP 白名单或防火墙之类的硬性防护措施。
robots.txt 的结构可以拆解为一组组规则块,每一组的开头都必须是 User-agent 字段,格式遵循“字段名: 值”的写法。为了最大程度避免兼容性怪问题,字段名建议全部使用小写字母,冒号后面用一个空格分隔。
这个字段用来指明当前规则块适用于哪个爬虫。例如,你要单独照顾一下谷歌的爬虫,就写 User-agent: Googlebot;如果你想让所有搜索引擎的爬虫都遵守同一套规则,那就用通配符写 User-agent: *。一个文件里可以同时存在多个规则块,比如对谷歌开放、对必应限制,只需要按顺序分别声明即可。
Disallow 声明禁止访问的路径,Allow 声明允许访问的路径。有一个容易踩的坑:当 Disallow 后面什么都不写,即 Disallow: 时,意思不是“禁止一切”,恰恰相反,它表示解除所有限制、放开全站。当 Allow 和 Disallow 同时能匹配到同一个链接时,搜索引擎采用“最长匹配优先”的规则——哪条规则里的路径写得更具体,哪条说了算。举个例子,如果文件里同时写了 Disallow: /api/ 和 Allow: /api/public/,那么以 /api/public/ 开头的链接依然会被正常放行,因为这里路径更长、更具体。
Sitemap 指令用来声明网站地图的完整网址,通常放在文件末尾,能帮助爬虫快速获得站点的内容清单。Crawl-delay 字面上是控制爬虫抓取间隔的,但这里特别提醒:谷歌从官方层面已经明确表示完全忽略这个参数。如果你真的需要限制抓取频率,建议去 Google Search Console 的后台进行配置,在 robots.txt 里写这个字段对谷歌毫无意义。
下面的几个配置案例都是实际工作中经常会遇到的,你可以直接复制,然后把其中的路径替换成自己站点的真实目录。
这里要着重提醒:Disallow 的值建议使用相对路径,并且路径末尾要仔细检查。比如你只想屏蔽 /public/ 目录,结果 Write 成了 /public(没有斜杠),就可能会意外匹配到 /public-other/ 这类同名前缀的目录,造成误伤。
实战中,很多站点并不是没写 robots.txt,而是写错了方向。梳理下来,高频失误主要集中在以下四类,值得逐一排查。
有些站长为了节约流量,把 /css/ 和 /js/ 目录也放进 Disallow,这是一种非常常见的错误。爬虫在渲染页面时,需要加载这些静态资源来完整理解页面结构和内容;一旦被封,页面无法被正常渲染,轻则导致搜索排名下降,重则被搜索引擎判定为站点质量较差。正确做法是:这些静态资源必须保持允许抓取的状态。
很多人以为“不想被搜索到,就把它写在 Disallow 里”,这是混淆了机制。如果页面被 robots.txt 阻挡,爬虫确实不会抓取它,但也因为无法抓取,无法看到页面上的 noindex 标签——结果就是页面可能依然会被收录,只是显示的标题和摘要残缺不全。正确的操作是:让爬虫能抓到页面,然后在页面头部放置 noindex 标签明确要求不索引。
robots.txt 支持 $ 表示匹配结尾,但很多新手对 * 的使用没有概念,导致匹配精确度出现问题。例如 Disallow: /*.php$ 表示禁止所有以 .php 结尾的URL,这个语法本身没问题,但如果写成 Disallow: /*.php(漏掉 $),则会错误地匹配所有包含 .php 的链接,包括那些本来想放行的页面。规则必须想清楚再写,避免模棱两可。
Disallow: 和 Allow: / 在功能上几乎等同,但部分搜索引擎对空白的 Disallow 解析略有差异。为了让文件的可读性和兼容性更好,如果目的是放行全站,建议统一写 Allow: /,而不是依赖空值。
通常不会立刻生效。搜索引擎爬虫会周期性重新抓取 robots.txt 文件,短则几小时,长则几天甚至一周。如果情况紧急,可以去搜索引擎的站长平台(比如 Google Search Console)申请重新抓取,能有效缩短等待时间。
每个域名都是独立站点,爬虫访问其中一个域名时只会读取该域名根目录下的 robots.txt。所以只要涉及多个域名,每个域名都需要单独维护一份对应的文件,内容可按各自情况定制,不要指望一份文件管所有站点。
不能。robots.txt 只约束搜索引擎爬虫的抓取行为,对其他网站访客、采集工具或用户的直接访问毫无限制能力。如果有人直接输入图片或文件链接,依然可以打开。如果需要严格保护资源,请使用登录鉴权或签名 URL 等方式。
写好 robots.txt 的核心不在于写得多,而在于想得清。动手之前先梳理一遍自己的目录结构,明确哪些路径必须保护、哪些路径值得优先收录、哪些路径是纯消耗抓取额度的低价值页面。每次修改文件后,都主动去搜索引擎的网站管理员工具里测试一下抓取效果,观察有没有新增的异常报错。记住这几个原则:assets 资源别拦、秘密内容靠 noindex、敏感数据靠鉴权、规则写长不写短。把这份文件当作日常运营的一部分去维护,而不是一劳永逸地写好就忘,你的站点才能真正从搜索引擎的流量分配中获益。