搜索抓取

robots.txt 的抓取边界:目录屏蔽、通配符与 Sitemap 声明怎么用

robots.txt 管的是抓取,不是收录。文章梳理 UA 段的匹配顺序、Disallow 的前缀匹配与通配符用法,点名几个常见写错的场景(误挡全站、用 Disallow 代替 noindex、屏蔽 CSS/JS),并给出 Crawl-delay 的局限和修改前后的验证步骤。

搜索抓取

robots.txt 的抓取边界:目录屏蔽、通配符与 Sitemap 声明怎么用

robots.txt 是站点递给爬虫的第一份说明,它管的是“能不能抓”,不是“能不能收录”。不少抓取异常、页面表现不对、渲染判断出错,回头查都是这个文件里某一行写错造成的。下面按匹配规则、常见误区和修改前后的验证三部分来说。

先弄清楚它怎么匹配

  • UA 段的选择:爬虫会挑最贴合自己身份的那一段,而不是一律读 * 段。Googlebot 优先读 Googlebot 段,其他爬虫读通用段,所以给特定爬虫写规则时要单独成段。
  • 同一段内多条规则:路径匹配更长的优先,长度相同时 Allow 通常胜出。写规则时尽量让意图不冲突,别指望靠顺序。
  • Disallow 是前缀匹配:写 Disallow: /tmp 会连同 /template、/tmp2 一起挡住,不是只挡 /tmp 这个目录。想限定目录,路径末尾补斜杠更稳妥。
  • 通配符* 匹配任意字符,$ 表示结尾,主流搜索引擎支持,但一些老旧或小众爬虫不一定认,别把关键限制全押在通配上。
  • 路径区分大小写,空行用来分隔不同的 UA 段,写乱会导致整段失效。

几个容易踩的坑

  • 通用段里写了 Disallow: /,本意是挡某个目录,结果全站被挡,日志里抓取量突然归零往往就是这里。
  • 想阻止某页面被收录,却用 Disallow 把它挡在门外。页面仍可能因为外链出现在结果里,而蜘蛛读不到页面上的 noindex。正确顺序是:让页面可抓、页面内标 noindex,等状态稳定后再谈屏蔽。
  • 把 CSS、JS、图片目录一起挡掉。页面渲染和移动端判断都依赖这些资源,挡了之后蜘蛛看到的可能是一张缺样式的空壳。
  • Sitemap 声明用了相对路径,或者根本没有声明。这里写的是绝对地址,也可以写多行。
  • 注释习惯写在规则行尾,容易把规则本身注释掉,建议单独一行写。

Sitemap 与抓取速率

在 robots.txt 里声明 Sitemap 是给蜘蛛一个发现入口的提示,跨域声明一般需要先完成站点验证。它只是提示,不代表某个 URL 一定会被抓取,也不代表抓取频次会变化。

Crawl-delay 这块要特别说明:Google 明确不支持这个指令,Bing 部分支持,指望它来控制抓取压力并不可靠。真正影响抓取节奏的是服务器响应速度、站点可抓页面的规模和内容更新频率。如果服务器吃紧,更可控的做法是在服务器层按 UA 做限速,或者在维护期间返回带 Retry-After 的 503,让蜘蛛按你的节奏退让,而不是在 robots 里写一个没人执行的数字。

改之前和改之后怎么验证

  1. 用搜索引擎提供的 robots 测试工具,把你关心的几类 URL 都跑一遍:首页、列表页、详情页、被屏蔽的资源目录,确认结果和预期一致。
  2. 翻服务器日志,看被屏蔽的路径在修改后是否还有请求。有残留说明规则没生效,或者对方没读这一段。
  3. 大范围屏蔽之前先小范围试,改完把时间点和具体内容记录下来,方便出问题时回滚。
  4. 顺手检查 Sitemap 和内链,里面如果还挂着已经屏蔽的 URL,蜘蛛会顺着爬过去再被挡住,白白消耗抓取次数。
判断一条规则安不安全,方法很简单:把关键 URL 丢进测试工具,看它返回的是“允许”还是“屏蔽”,和自己想的是不是一回事。

最后提醒一点,robots.txt 是一份约定,不是权限控制。遵不遵守取决于对方,真正私密的内容应该靠登录、鉴权或访问控制来解决,而不是写在 Disallow 里。