robots.txt 经常被当成"收录开关",但它真正约束的是抓取行为。把它理解成一份写给蜘蛛的路径说明,比理解成拦截器更贴近实际效果。
它管的是抓取范围,不是收录结果
一个 URL 被 Disallow 之后,蜘蛛通常不会去请求它。但如果这个地址有外部链接指向,它仍然可能出现在搜索结果里,只是缺少标题和摘要这类来自页面的信息。反过来,没有被 Disallow 的页面也不等于一定被抓取、一定被收录,还要看链接、站点权重和抓取资源。
所以配置之前先想清楚目的:是为了省下抓取资源,还是为了阻止某个页面出现在结果里。后者更适合用页面级的 noindex,而且要注意——如果一个页面既被 Disallow 又写了 noindex,蜘蛛读不到 noindex,这个标签就形同虚设。
基础写法与几个容易忽略的规则
- 文件必须放在站点根目录,路径固定为 /robots.txt,子目录下的同名文件不会被读取。
- 规则按 User-agent 分组,组与组之间用空行隔开,同一组内可以写多条 Disallow 和 Allow。
- Disallow 和 Allow 都是前缀匹配,写 /admin 会同时命中 /admin、/admin/、/administrator,需要精确时用结尾符号。
- 两条规则都匹配时,取匹配字符串更长的那条,这就是用 Allow 做局部放行的原理。
- 星号表示任意字符,美元符号表示结尾,例如 /*?page= 只拦截带参数的翻页地址。
Sitemap 写在 robots.txt 里,利弊各一半
在 robots.txt 末尾加一行 Sitemap 地址,是一个成本很低的补充手段,但它不是万能入口。
- Sitemap 行不属于任何 User-agent 分组,写在哪一组后面都可以被读到,但为了可读性一般单独放在文件末尾。
- 必须写完整的绝对地址,包括协议和域名,相对路径无效。
- 可以声明多个 Sitemap,也可以在 Sitemap 索引文件里再组织一层。
- 并非所有抓取方都会读取这一行,它更像提示,而不是提交动作。搜索后台里的主动提交仍然值得保留。
三类常见的误屏蔽
连 CSS、JS 一起屏蔽
为了降低抓取压力,有人会直接屏蔽静态资源目录。结果蜘蛛打开页面时看不到样式和脚本执行后的内容,对页面结构和正文位置的判断会受影响。需要控制抓取量的话,优先限制的是无价值的参数页和搜索页,而不是渲染必需的资源。
把分页和筛选参数一刀切
用一条带星号的规则拦掉所有带问号的地址,看起来干净,实际会连正常的翻页、排序、地区筛选一起挡掉。这些地址往往是发现深层内容的重要通路。更稳妥的做法是先看日志,确认哪些参数组合确实在制造大量重复请求,再针对具体参数放行或屏蔽。
整站 Disallow 之后指望 Sitemap 兜底
整站禁止抓取,再提交 Sitemap,这两件事是相互抵消的。Sitemap 里的地址被规则挡住,蜘蛛不会去请求,提交也就失去了意义。测试环境需要完全隔离时,整站屏蔽没问题,但要清楚这是"暂时不让抓",而不是"换条路抓"。
改完怎么确认确实生效
- 直接用请求工具访问 /robots.txt,确认返回 200、内容是最新版本,并且没有被 CDN 或缓存节点保留旧副本。
- 用搜索引擎提供的抓取测试工具,把几个关键 URL 逐一测一遍,看是允许还是被拦截,比对着规则自己推演更可靠。
- 翻服务器日志,看被屏蔽路径的请求量是否在几天内明显下降。规则是逐步生效的,不会立刻归零。
- 在搜索后台查看抓取统计和 Sitemap 报告,确认没有出现大面积的抓取失败或读取异常。
小结
robots.txt 的价值在于把抓取资源引导到真正有价值的地址上,而不是把问题页面藏起来。写完规则之后,至少做一次实测:确认该放行的没被挡住,该挡住的确实没有蜘蛛再来。规则越简单,越不容易在几个月后变成谁也说不清的历史遗留。