搜索抓取

robots.txt 划出的抓取边界:放行、拦截与常见误伤

robots.txt 是蜘蛛抓取前通常会读取的协议文件,它只控制抓取,不直接控制索引。本文梳理哪些路径应该放行、哪些适合拦截,Disallow 与 noindex 如何配合,常见的配置错误,以及修改后如何通过日志核对实际抓取行为。

搜索抓取

robots.txt 划出的抓取边界:放行、拦截与常见误伤

站点的抓取路径不是从首页开始的,而是从 robots.txt 开始的。蜘蛛在抓取前通常会先请求这个文件,确认哪些目录可以走、哪些不能走。很多人把它当成“收录开关”,结果要么把该抓的路径拦掉,要么把不该抓的路径放进来,日志里就会出现一堆无效请求。

robots.txt 管的是抓取,不是索引

先把边界说清楚:robots.txt 里的 Disallow 只表示“不要抓取”,并不等于“不要索引”。如果一个被屏蔽的 URL 从外部获得了链接,蜘蛛无法抓取内容,但仍可能把这个地址放进索引,只是没有摘要或摘要来自外链文本。反过来,想让一个页面彻底不出现,通常需要允许抓取,再在页面上返回 noindex。

所以,用 robots.txt 去处理“不想被收录”的页面,往往达不到目的。它更适合处理“不想被频繁抓取”或“抓了也没价值”的路径。

哪些路径通常应该放行

放行的原则是:对蜘蛛理解站点有用、且不会造成大量重复或无效请求的路径。

  • 正常的内容页、栏目页和文章详情页。
  • 分页路径,比如 /list/page/2/。如果分页被拦,蜘蛛可能只能看到第一页的链接。
  • 渲染依赖的 CSS 和 JS 文件。屏蔽它们,蜘蛛拿到的可能是缺少样式和内容的空壳。
  • 图片和视频等资源文件,除非你确定不需要它们出现在图片搜索里。
  • Sitemap 文件本身,以及 robots.txt 里声明的 Sitemap 地址。

如果站点使用了客户端渲染,还要确认蜘蛛能拿到渲染后的内容。此时屏蔽 JS 资源,等于把内容入口关掉。

哪些路径适合拦下

拦截的目标是减少无效抓取,把抓取次数留给真正需要收录的页面。

  • 后台、登录、注册、购物车、订单查询等用户功能路径。
  • 站内搜索结果页。参数组合多,内容重复,容易产生大量低质 URL。
  • 带筛选参数的列表页,如果参数组合几乎无限,可以只放行少数有价值的组合,其余拦截。
  • API 接口、数据导出、临时测试目录、废弃的旧版路径。
  • 会生成重复内容的打印页、分享页、跟踪链接路径。

这里有一个常见矛盾:如果某个筛选页只是因为重复而不想收录,用 noindex 更合适,那就不能屏蔽抓取。因为蜘蛛读不到页面,就看不到 noindex。只有确认这些页面没有任何收录价值,并且不需要通过页面指令控制时,才直接用 Disallow。

容易踩的配置错误

  • Disallow: / 全站屏蔽。除了测试环境,一般不要这样写。一旦上线,蜘蛛会停止抓取,恢复需要时间。
  • 把 Sitemap 也屏蔽掉。Sitemap 地址被拦,蜘蛛读不到站点地图,URL 发现会变慢。
  • 规则顺序和通配符写错。例如 Disallow: /*?* 会拦掉所有带参数的 URL,可能误伤正常分页或跟踪参数之外的有用路径。
  • 大小写和结尾斜杠不一致。路径匹配是区分大小写的,写错一个字母就可能放行不该放的目录。
  • 子域没有各自的 robots.txt。每个子域都要单独配置,不能靠主域文件覆盖。
  • 用 robots.txt 屏蔽 CSS/JS,同时又希望蜘蛛渲染完整页面。

改完 robots.txt 后怎么核对

修改后不要只看文件内容,要看蜘蛛的实际行为。可以用抓取测试工具检查某条 URL 是否被允许,再对照服务器日志:之前频繁出现的被拦路径,是否逐渐减少;原本该抓的详情页,是否还在正常请求。

生效需要时间。蜘蛛不会立刻重新读取 robots.txt,旧规则可能还会被沿用一段时间。如果改动较大,建议分步调整,先放行关键路径,再逐步收紧无效路径。

把 robots.txt 当成抓取路径的边界线,而不是收录开关。边界清晰,蜘蛛才能把有限的抓取次数用在有价值的内容上。