网站运营者几乎都要和 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: ”且无任何值,表示清空所有限制,蜘蛛可以抓取全站内容。当某条 URL 同时命中多条规则时,搜索引擎采用“最长匹配优先”原则——路径越长越具体,优先级就越高。比如同时存在 Disallow: /api/ 和 Allow: /api/public/,因为后者更具体,所以 public 子目录下的内容会被放行。
Sitemap 指令用来声明站点地图的完整地址,方便蜘蛛快速找到全站页面的清单,一般放在文件末尾。Crawl-delay 则用来设定蜘蛛抓取的时间间隔,单位为秒。这里要特别提醒,谷歌的蜘蛛并不认同 Crawl-delay 这一指令,它更推荐站长在 Search Console 的后台通过抓取频率设置来控制节奏。
第一个常见问题是对路径的理解有误。robots.txt 中的路径是相对于站点根目录的,不会匹配域名。比如写成 Disallow: https://example.com/admin/ 就是无效写法,正确方式应为 Disallow: /admin/。同时要注意,Disallow: /admin 和 Disallow: /admin/ 的含义并不一样——前者会匹配 /admin 以及 /adminxxx 这样的路径,后者只精确匹配 /admin/ 目录本身。
第二个问题是通配符的使用。robots.txt 支持 * 表示任意字符序列,支持 $ 表示路径末尾。例如 Disallow: /page/*.pdf$ 可以屏蔽所有页面下的 PDF 文件,Disallow: /*?from= 可以阻止包含特定参数的网址被抓取。但要注意,通配符不能随意嵌套,且不同搜索引擎对通配符的兼容程度略有差异,建议在关键的规则上做实际测试。
第三个问题是大小写。规则中路径的匹配是区分大小写的,/News 和 /news 是两个完全不同的路径。实际操作中,建议先在浏览器中访问确认 URL 的真实大小写,再写入规则,避免因大小写不一致导致屏蔽失效。
此外,还容易忽略一个细节:规则组的顺序和含义。同一组内允许出现多个 Disallow 或 Allow 行,它们是并列关系,共同决定哪些路径可访问。不同规则之间的覆盖关系,除了最长匹配原则外,还要留意各搜索引擎对 Allow 和 Disallow 同时命中的处理手段略有不同,稳妥的策略是不要过度依赖 Allow 去“弥补”过宽的 Disallow,尽量把 Disallow 写准确。
第一,文件必须命名为 robots.txt,放在站点根目录,且保证可通过“域名/robots.txt”直接访问。若站点启用了 HTTPS,应当确保该文件在 HTTPS 协议下也能正常返回,不应有重定向到 HTTP 的情况。第二,不要在这个文件里写过多注释,注释过多容易在编辑时引入语法错误,只保留必要的说明即可。第三,每次修改后都要实际验证规则效果。可以借助搜索引擎官方的 robots.txt 测试工具,或者直接用浏览器模拟,也可以使用 curl 命令检查返回内容是否符合预期。第四,建议定期检查日志,观察蜘蛛的实际抓取行为,确认没有被误屏蔽的核心页面。
下面举一个具体的配置示例供参考:
User-agent: * Disallow: /admin/ Disallow: /temp/ Allow: /public/ Sitemap: https://www.example.com/sitemap.xml这个例子屏蔽了后台和临时目录,同时放开了公共资源,并声明了站点地图。同时不妨把规则写清楚、分组清晰,避免一条规则试图覆盖所有场景。比如针对不同的爬虫,可以单独设置组,减少互相干扰的可能性。
不能。robots.txt 只能阻止蜘蛛抓取,无法阻止已经抓取过的页面被索引。如果页面之前已经被收录,屏蔽抓取后可能需要等待搜索引擎重新抓取才能移除,而且带有外链的页面仍有可能被收录。因此,要彻底禁止收录,请使用 noindex 标签。
不影响。文件缺失时,搜索引擎默认会抓取整个站点。没有 robots.txt 本身不会对网站产生负面评价。但如果你需要屏蔽某些目录或声明站点地图,那么建议创建一份,否则可能浪费抓取预算在无意义的路径上。
不可以写完整的绝对地址。robots.txt 中的路径只允许是相对根目录的路径,例如 Disallow: /private/。写成 Disallow: https://www.example.com/private/ 属于无效格式,蜘蛛可能会直接忽略这条规则,进而抓取本应被屏蔽的内容。
一份可靠的 robots.txt 并不复杂,关键在于理解它的边界和精确的匹配规则。建议每次修改后都进行小范围测试,确认无误再上线。同时要记住,它只能协调各方蜘蛛的访问行为,无法替代真正的安全措施。定期检查日志,发现异常抓取时果断补充防火墙或访问验证,才是稳妥的长久之计。如果对通配符或路径优先级拿不准,优先采用具体目录写法,既清晰又安全,减少意外放行或误屏蔽的情况。