搜索抓取

抓取不止页面本身:CSS、JS 和图片在蜘蛛眼里占多少分量

蜘蛛抓的不只是 HTML。为了渲染和理解页面,它还会取 CSS、JavaScript,图片等资源也各有自己的抓取通道。资源请求过多会抬高单页抓取成本,尤其当正文和链接都依赖 JS 渲染时,URL 被发现的速度会明显变慢。本文梳理哪些资源值得省、哪些不能屏蔽,以及怎么从日志里看出问题。

搜索抓取

抓取不止页面本身:CSS、JS 和图片在蜘蛛眼里占多少分量

蜘蛛取走的不只是 HTML

很多站长把抓取理解成“蜘蛛下载页面源码”。这个理解只对了一半。搜索引擎的抓取大致分两条线:一条抓页面本身,也就是 HTML 文档;另一条是为了把页面渲染出来、看懂里面的内容,而去取页面引用的外部资源,最典型的就是 CSS 和 JavaScript。图片、字体、视频封面这类素材,通常走各自专门的通道,服务于图片搜索或媒体索引,和网页索引并不完全共用同一套逻辑。

所以,当你在服务器日志里看到一批 .css、.js 请求,来源标着蜘蛛的 UA,这并不奇怪,也不一定是被人恶意刷了。

资源抓取会不会抢走页面的抓取量

会,但不是简单的一比一换算。

  • 渲染页面必需的资源,通常会被优先安排,因为它们决定蜘蛛能否看懂页面;
  • 和渲染无关的资源,比如埋点脚本、广告脚本、第三方统计,优先级低,很多时候蜘蛛根本不取;
  • 同一份 CSS 或 JS 被大量页面引用时,缓存会起作用,重复请求会明显减少。

真正容易出问题的情况是:页面 HTML 本身不大,但要渲染它得拉十几个外部文件。在蜘蛛的视角里,访问这一个页面的成本就被放大了。

哪些做法会抬高抓取成本

首屏内容依赖同步 JS

如果正文和内部链接都靠 JS 拼出来,蜘蛛必须先拿到脚本、再执行脚本,才可能发现新的 URL。这条链路越长,URL 被发现的节奏就越慢。对内容型站点来说,这是一笔长期的隐性开销。

大量阻塞渲染的外链 CSS

每一个外链样式表都是一次额外请求。把关键样式内联、非关键样式异步加载,能减少这类请求的数量。

图片全部原图直出

图片并不直接决定网页索引,但图片搜索是独立的抓取对象。高清大图、没有宽高属性、缺少 alt 描述,既拖慢渲染,也不利于图片被正确理解。

在 robots.txt 里屏蔽 CSS 和 JS

这是很常见的误操作。屏蔽之后,蜘蛛拿不到样式和脚本,渲染出来的页面可能是空白的或者错位的,反而影响它对页面内容与链接的判断。

把 CSS、JS 当成“蜘蛛不该碰的东西”去屏蔽,结果往往比不屏蔽更糟。

把资源成本压下来的几个动作

  1. 先保证 HTML 里就有真内容:正文、导航链接、面包屑尽量由服务端直接输出。
  2. 合并、压缩静态资源,减少请求数量,通常比单纯压体积更有效。
  3. 非关键脚本延后加载,用 defer 或按需加载,别让首屏被第三方脚本卡住。
  4. 静态资源走 CDN,缩短响应时间,蜘蛛等待的时间也随之变短。
  5. 图片使用合适的尺寸和格式,标注宽高,减少布局抖动。
  6. 回头检查 robots.txt,确认没有屏蔽 /css/、/js/ 这类目录。

小站不必过度优化

如果站点只有几百个页面,资源请求带来的压力通常不是瓶颈,把内容质量、内链结构和服务器响应做好更实际。当页面规模到几万、几十万级别,或者日志里资源请求明显多于页面请求时,再来梳理资源加载,收益会更清楚。

判断方法很简单:打开服务器日志,按路径后缀分组,统计一段时间内蜘蛛请求的分布。HTML、CSS、JS、图片各自占多少,一眼就能看出来。哪个占比反常,就先动那一块。