搜索抓取

robots.txt 是蜘蛛的第一站:Sitemap 声明与误拦会怎样改变抓取路径

蜘蛛抓取前通常先请求 robots.txt,它既是拦截名单,也是 Sitemap 的声明入口。写对 Sitemap 行、理清 Allow 与 Disallow 的匹配顺序,可以减少误拦造成的抓取路径中断;同时要注意,Disallow 并不能阻止收录,只会让蜘蛛看不到页面上的 noindex。下面梳理常见的写错方式和自查顺序。

搜索抓取

robots.txt 是蜘蛛的第一站:Sitemap 声明与误拦会怎样改变抓取路径

蜘蛛为什么要先读 robots.txt

多数搜索引擎蜘蛛在抓取一个新 URL 之前,会先请求站点根目录下的 /robots.txt。这份文件本身不参与排名,但它决定了蜘蛛接下来一段时间里能看到什么、看不到什么。写得好,它是一张指路牌;写错了,它可能是抓取路径上的第一道断点,而且这道断点往往很难从页面上看出来。

Sitemap 声明:成本最低的 URL 发现入口

robots.txt 里最值得写的一行是 Sitemap。它相当于在蜘蛛进入站点的第一时间告诉它「这些地址值得优先看一遍」,尤其对深层页面和刚上线的内容有效。

  • 使用完整的绝对地址,带上协议和域名,不要写相对路径。
  • 一行一个,Sitemap 文件多就多写几行。
  • 多数引擎只接受同站点的 Sitemap 地址,把其他域名的 Sitemap 写进来通常不会生效。
  • 这一行不要写在 Disallow 规则后面做备注,容易被当成规则的一部分误读。

Sitemap 地址不要带跳转

如果 Sitemap 的地址会 301 到另一个位置,部分蜘蛛会继续跟过去,但多一次跳转就多一次失败的可能。直接写最终地址,并确认它返回 200。

Allow 与 Disallow:顺序和通配符容易踩的坑

  • 规则冲突时,一般按最长匹配生效,而不是按书写的先后顺序。所以 /search/ 和 /search/abc 同时出现时,要按具体路径去判断哪条命中。
  • 路径区分大小写,/Images/ 和 /images/ 是两条不同的规则。
  • 星号匹配任意字符,美元符号表示结尾。/private 会把 /private-notes 一起拦掉,写成 /private/ 更稳妥。
  • Allow 常用来开一个例外:整个目录被拦掉,但里面某个子路径希望放行。

用 Disallow 挡收录是常见的误解

Disallow 只阻止抓取,并不能阻止 URL 被收录。如果页面已经被索引,之后又被 Disallow,蜘蛛就看不到页面上后来补上的 noindex,这个 URL 可能长期留在索引里,只剩标题、没有摘要。这类问题从日志看往往表现为「有这个地址的抓取记录,但内容长期不更新」。

想阻止收录,应该让页面保持可抓取,并在页面响应里返回 noindex;想减少抓取压力,才用 Disallow。

误拦的几种典型场景

  • 拦掉 CSS、JS 或图片目录:蜘蛛需要这些资源才能判断页面渲染后的内容以及移动端适配。
  • 拦掉分页、筛选参数:这些地址可能是深层内容唯一的入口,拦掉之后蜘蛛可能就不再顺着往下走。
  • robots.txt 与 Sitemap 自相矛盾:Sitemap 里提交了一整批 URL,robots.txt 又对整个目录 Disallow。
  • 测试环境规则带到了线上:Disallow: / 忘记删掉,是最直接的全站抓取断点。

Crawl-delay 值不值得写

不同引擎对 Crawl-delay 的支持并不一致,有的直接忽略。与其在里面写一个固定间隔,不如观察服务器日志和响应时间:如果蜘蛛请求集中导致负载升高,更可靠的做法是让服务器在压力大时返回 429 或 503,同时保持响应稳定。抓取速率的变化通常是响应时间和错误率共同作用的结果,单靠一行声明很难精确控制。

几分钟能做完的自查清单

  1. 直接在浏览器访问 /robots.txt,确认返回 200、内容是纯文本,没有被 CDN 或 WAF 拦下。
  2. 检查有没有 Disallow: / 或整目录拦截。
  3. 确认 Sitemap 地址可访问、是最终地址、不发生跳转。
  4. 从 Sitemap 里抽几条 URL,用 robots.txt 的规则过一遍,看是否被误拦。
  5. 确认没有拦掉 CSS、JS、图片目录。
  6. 改完规则后观察一段时间日志,看蜘蛛对目标目录的请求是否恢复。

robots.txt 不需要反复重写,但值得定期核对一次。它决定的是蜘蛛能看到什么,只有这一步不出错,后面的 Sitemap、内链结构和抓取预算才有发挥的余地。