搜索抓取

robots.txt 划下的边界:哪些路径被剪掉,蜘蛛自己不会说

robots.txt 决定的是蜘蛛能不能抓某个 URL,而不是这个 URL 会不会出现在搜索结果里。本文拆开这两个概念,讲清 Disallow 带来的 URL 发现与内链损耗、通配符与 Allow 的匹配顺序、CSS/JS 被误挡的后果,以及 robots.txt 自身返回 5xx 或超时对抓取的影响,并给出一份可逐条核对的检查清单。

搜索抓取

robots.txt 划下的边界:哪些路径被剪掉,蜘蛛自己不会说

robots.txt 常被当成一个“藏东西的地方”,但它实际是抓取通道的第一道闸门。它决定的是蜘蛛能不能下载某个 URL,而不决定这个 URL 会不会出现在搜索结果里。这两件事被混在一起,是很多抓取问题的起点。

一、抓取与收录是两件事

Disallow 只阻断抓取。如果一个被禁的 URL 从站外拿到了链接,搜索引擎仍可能把它收进索引,只是没有摘要、没有正文,用户点进去看到的是一个空壳结果。反过来,想让某个页面不被收录,正确顺序是让它能被抓取,然后由页面返回 noindex;如果既 Disallow 又 noindex,蜘蛛读不到那行 noindex,目的就落空了。

二、一条 Disallow 的真实成本

当整个目录被屏蔽,蜘蛛不抓这些页面,也就不会顺着页面里的链接继续往下走。代价有两层:这些 URL 本身很难被发现;被它们指向的下游页面,也少了一条内链入口。所以在批量加规则之前,先看一眼被禁目录里有多少条链接通向你还想被收录的页面。测试站全站屏蔽、上线时忘了删规则,是这类事故里最常见的一种。

三、通配符、Allow 与匹配顺序

  • *:匹配任意长度的字符序列。
  • $:表示 URL 到此结束,用来区分 /a 和 /a.html 这类后缀。
  • Allow 与 Disallow 都能匹配时,按最长匹配优先;规则长度相同时 Allow 优先。具体行为建议以官方文档和实测为准。

几种常见写法与它们的代价

  • Disallow: /search:屏蔽站内搜索结果页,多数情况下合理;但如果站内搜索页有稳定的自然流量词,可以考虑只屏蔽结果参数,而不是整个目录。
  • Disallow: /*?:一刀切掉所有带参数的 URL,顺带把分页、排序和追踪参数一起砍掉。用之前要想清楚哪些参数页是要留的。
  • Disallow: /*.js$ 与 /*.css$:蜘蛛拿不到渲染所需的资源,由 JS 生成的链接和内容可能就看不见了。

四、robots.txt 自己也会坏

这个文件本身也有状态码。返回 404,通常等同没有限制,全部可抓;返回 5xx,蜘蛛一般会先按“暂时全部允许”处理,过一段时间再来确认。如果它长期超时或持续报错,抓取的稳定性就会受影响。所以别把它放在临时重定向后面,也别让 CDN 的规则把它拦掉——它的可用性值得和首页同等对待。

五、关于 Crawl-delay

Crawl-delay 是被多数主流搜索蜘蛛忽略的字段。真正影响抓取节奏的是站点响应速度和服务器承载能力。想把抓取压下来,更可靠的做法是减少慢页面和无用参数页的入链,而不是在 robots.txt 里写一个期望值。

六、可以逐条核对的清单

  1. robots.txt 返回 200,纯文本,没有被 HTML 包裹。
  2. Sitemap 里的 URL 没有被 Disallow 掉。两边矛盾时,抓取通常以 robots.txt 为准。
  3. CSS、JS、图片目录处于放行状态。
  4. 需要保留访问、不想收录的页面,用 noindex 处理,而不是 Disallow。
  5. 规则调整后,用官方测试工具加日志一起验证,确认蜘蛛走的是你预期的路径。
规则写得越粗,蜘蛛手里的地图就越像被剪过——不是走不通,而是很多本来该去的地方,从来没被标出来。