搜索抓取

robots.txt 与抓取范围:哪些目录该拦,哪些一拦就误伤

robots.txt 常被当成万能开关,实际上它只管抓取范围,不管是否收录。本文梳理常见的屏蔽误伤场景、适合拦截的目录类型,以及写规则时容易忽略的细节,帮助你把蜘蛛的抓取边界划清楚,避免挡掉本该被发现的页面。

搜索抓取

robots.txt 与抓取范围:哪些目录该拦,哪些一拦就误伤

很多站点的 robots.txt 是几年前随手写的,后来目录结构调整、栏目改版,规则却没跟着动。结果要么该拦的没拦,后台和测试目录被反复抓取;要么不该拦的拦了,分页、静态资源甚至正常栏目被挡在门外,蜘蛛进不来,新内容自然发现得慢。这篇文章聊的是怎么把抓取范围划清楚,而不是简单地多拦一点求安心。

先分清两件事:不许抓取,和不许收录

Disallow 的作用是阻止蜘蛛抓取某个路径,它并不等于这个页面不会出现在搜索结果里。如果某个 URL 从外部被链接指向,蜘蛛完全可能在没抓取内容的情况下把它放进索引,只是没有标题和摘要。反过来,想让页面彻底不出现在结果里,通常要用 noindex,而 noindex 必须等蜘蛛把页面抓下来、读到这个标记之后才生效。

这两套机制方向相反,同时用会互相抵消:你 Disallow 了它,蜘蛛就读不到 noindex;你写了 noindex,就不该再把它拦在门外。所以第一步是问清楚目的:是不希望蜘蛛消耗抓取配额,还是不希望在结果里露出这个页面。前者用 robots.txt,后者优先用页面级的 noindex。

三类最常见的误伤

静态资源目录

把 CSS、JS、图片目录整段屏蔽,是过去很常见的做法,理由是这些不是内容页。但现代蜘蛛要渲染页面才能看清链接和正文,资源拿不到,渲染出来的页面可能残缺,内链也就发现不了。除非有明确的理由,否则不该拦这些路径。

分页与列表参数

列表页翻页是蜘蛛顺着走、发现新内容的主要通道之一。把 page、p 这类参数一刀切屏蔽,等于把新文章的入口砍掉一截。如果确实担心参数组合太多,可以只限制无效组合,而不是把整个参数族封死。

站内搜索页

站内搜索结果页通常建议拦,因为它们会生成大量低价值 URL,还容易形成互相指向的循环。但要注意别把搜索所在的路径和正常栏目混在一起,误伤了内容目录。

适合放进屏蔽列表的内容

  • 后台、管理、登录、编辑类路径
  • 测试目录、临时环境、备份文件
  • 带会话 ID 或跟踪参数的 URL
  • 站内搜索结果页与筛选组合页,视站点规模而定
  • 对蜘蛛无意义的大文件下载目录,视情况处理

拦掉之后,URL 还会被“发现”吗

会。robots.txt 只约束抓取,不约束发现。外链、Sitemap、其他页面的链接仍然可能把 URL 送进蜘蛛的待抓队列,只是它不会去取内容。这意味着你可以在日志里看到某个被屏蔽路径的抓取尝试被拒绝的记录,这属于正常现象,不用当成故障。真正要避免的是:屏蔽了路径,却还在 Sitemap 里提交它,相当于一边关门一边递钥匙。

抓取频次能靠 robots 管吗

部分蜘蛛支持 Crawl-delay,但主流搜索引擎的蜘蛛基本不把它当硬性指令,抓取节奏更多取决于服务器的响应速度和页面质量。想控制抓取压力,靠 robots 不如靠响应时间稳定、返回码干净来得实际。如果某个路径确实压力太大,屏蔽是可以的,但要先确认它不含需要被发现的链接。

写规则时的几个细节

  1. 写清楚 User-agent 分组,不同蜘蛛的规则不要混在一段里。
  2. 路径区分大小写,写错一个字母规则就不生效。
  3. 用结尾符可以精确匹配,避免前缀匹配误伤同名前缀的目录。
  4. 在文件里声明 Sitemap 地址,方便蜘蛛直接找到入口。
  5. 上线前在测试环境确认规则语法正确,别让整份文件失效。

上线前的检查清单

  • 屏蔽路径里是否包含 CSS、JS、图片等渲染必需资源
  • 是否误拦了分页、列表和正常栏目目录
  • 被屏蔽的 URL 是否还出现在 Sitemap 或内链中
  • 想让它消失的页面,是否改用 noindex 而不是 Disallow
  • 规则改动后是否观察过一段时间的日志抓取记录

robots.txt 是一道范围边界,不是万能开关。它解决的是蜘蛛该不该来这里,解决不了这个页面该不该被收录。动手改之前先把这两个问题分开,多数误伤都能避免。