先把 robots.txt 的定位说清楚
很多站点在排查 URL 为什么迟迟没被抓时,第一反应是看内链和 Sitemap,却很少回头看 robots.txt。这份文件放在根目录,蜘蛛每次抓取前基本都会先读一遍,它的作用不是帮你提升收录,而是给蜘蛛划出一条可走的范围。范围划错了,后面的内链和 Sitemap 做得再细,也可能白费。
Disallow 挡的是抓取,不是 URL 的传播
一个常见误解是:页面写进 Disallow,蜘蛛就完全不知道它的存在。实际上,如果这个 URL 出现在别处的链接、Sitemap 或外部引用里,蜘蛛依然可能“知道”它,只是不会去抓内容。反过来,一个页面即使没有被 Disallow,只要没有任何入口指向它,也同样难被抓到。抓取路径是由“能不能抓”和“有没有路”两件事共同决定的。
把 robots.txt 当成一道门:门开着不代表有人会走进来,门锁着则一定进不来。
几处最容易写错的地方
- 整站屏蔽忘了撤。测试环境用 Disallow: /,上线后没删,结果正式站也一直被挡在外面。
- 规则过宽。Disallow: /*? 本意是挡掉无用参数,却连正常的分页、筛选列表页一起挡掉,连带把列表页里的深层链接也断了。
- 目录名少写斜杠。Disallow: /news 会同时匹配 /newsletter、/news-2024 这类前缀相同的路径。
- 顺序理解偏差。现在主流蜘蛛对 Allow 与 Disallow 多按“最长匹配优先”处理,不是简单地按书写先后生效,规则越复杂越容易出错。
- 移动端与主站规则不一致。移动优先抓取下,蜘蛛主要按移动端地址取内容,如果两套地址的 robots 规则不同,实际放行的范围也会不同。
Crawl-delay 与并发的关系
有些 robots.txt 里会写 Crawl-delay。要注意两点:一是主流搜索蜘蛛对此的支持程度并不一致,真正影响抓取压力的更多是服务器响应速度和站点在蜘蛛侧的整体表现;二是把 delay 调得过大,抓取节奏会明显变慢,URL 从被发现到被抓的等待期被拉长。服务器有余量时,不建议用这条规则人为踩刹车。
Sitemap 声明别只放在一处
在 robots.txt 里写 Sitemap: 是常见做法,能让蜘蛛在读取规则的同时拿到 URL 清单。但要留意三点:文件必须可正常访问并返回 200;地址要用完整 URL;如果 Sitemap 分了片,索引文件也要一并声明。robots.txt 本身如果返回 5xx,蜘蛛可能暂时放缓甚至暂停抓取,返回 404 则通常被视为没有限制。
一份可执行的自查顺序
- 在浏览器直接打开 /robots.txt,确认能正常返回,且没有意外规则。
- 用平台提供的 robots 测试工具,输入几个关键 URL,看是被允许还是被拦截。
- 对照抓取日志,统计被 robots 拦截的抓取占比,重点找被误挡的栏目和列表页。
- 核对 Sitemap 声明与实际文件是否一致,分片是否完整。
robots.txt 的作用是划边界,不是做优化。把边界划清楚,让该抓的能抓、不该抓的别浪费,URL 发现和抓取路径才有讨论的余地。