搜尋抓取

蜘蛛不只抓頁面:图片、脚本與样式表该不该让它抓

蜘蛛抓取的不只是頁面,图片、CSS、JS 這些静態资源同样會進入抓取队列,並占用服務器连接。本文說明哪些资源建议放開、哪些可以考虑屏蔽,robots.txt 處理时的两個坑,以及怎样從抓取日誌估算资源請求的占比,帮你在渲染需求和抓取效率之間找到平衡。

搜尋抓取

蜘蛛不只抓頁面:图片、脚本與样式表该不该让它抓

看抓取日誌时,很多人只盯着内容頁,實际上图片、JavaScript、CSS 這類静態资源的請求往往占了相当一部分。它們本身不带来排名,却實實在在占用蜘蛛的抓取時間和服務器的连接數。搞清楚這部分開销花在哪,是提高 URL 發現效率的前提。

為什么蜘蛛會去抓静態资源

頁面里的 img 标簽、外鏈样式表和脚本文件,都是可被抓取的 URL。蜘蛛解析 HTML 时會把它們当成资源记錄下来,按自己的节奏去請求。常见的原因有三個:一是渲染需要,現在的搜尋引擎要加载 CSS、执行 JS 之後才能看到頁面真實内容;二是资源本身可以進入图片等垂直索引;三是资源地址也被当作站点结构的一部分被收錄在队列里。

所以资源抓取不是異常現象,問题在于比例是否合理。如果一半以上的請求都花在资源上,内容頁的發現速度自然會慢下来。

哪些资源建议放開

  • 主要样式表和负责内容渲染的脚本:如果頁面依赖客戶端渲染,挡掉它們蜘蛛拿到的就是空壳。
  • 首屏图和正文配图:图片搜尋仍有流量入口,保留可抓取通常利大于弊。
  • 渲染必需的資料接口:如果模板要靠它取内容,別在 robots 里一並挡掉。

哪些资源可以考虑挡掉

  • 後台脚本、編輯器、埋点與統計代碼,這些對用戶和蜘蛛都没有内容價值。
  • 同图多尺寸的缩略图、带各種參數反复生成的图片地址,容易成倍膨胀 URL 數量。
  • 字体文件、图标库、装饰性素材,對内容理解帮助有限,体积却不小。
  • 測試环境、灰度域名下的资源,避免和正式站抢抓取机會。

用 robots.txt 挡资源时的两個坑

第一個坑是屏蔽了渲染依赖的资源,蜘蛛仍然能拿到 HTML,但渲染失敗,後續從頁面里提取連結的环节也會受影响。第二個坑是屏蔽並不等于這些 URL 不存在,它只是不再被請求;如果這些地址已经被大量發現,仍會在队列里占位置。

屏蔽只能减少請求量,减少不了 URL 被發現的可能。真正想控制數量,應该從源头解决——頁面里就不要再輸出那些冗余地址。

资源自身的不稳定也會拖慢内容抓取

同一個域名下如果资源经常超时、返回 5xx,或者單個文件体积過大,蜘蛛在這個域名上的整体体驗會變差,後續内容頁的請求可能被延後、降低频率。把 CSS 和 JS 交给 CDN、開啟缓存、压缩体积、合並零碎請求,收益往往比反复調整抓取設定更直接。

從抓取日誌估算资源抓取的占比

  1. 按後缀統計請求量,把 .css、.js、图片後缀單獨拉出来看比例。
  2. 統計這些资源請求的响應碼分布,超时和 5xx 多的地方優先處理。
  3. 看资源請求是否集中在少數几個模板頁,如果是,說明某個頁面的资源引用寫得過重。
  4. 屏蔽前後做對比,观察内容頁的抓取條數有没有上升,而不是只看總請求量下降。

另外,Sitemap 里不建议混入资源 URL,图片资源如果有必要,可以用單獨的图片 Sitemap 提交,避免把内容頁的發現通道挤占掉。

一個简單的取舍原則

拿掉這個资源,蜘蛛看到的頁面和用戶看到的還差不多吗?如果差不多,就可以考虑屏蔽;如果差得遠,就保留它,並把它做得足够稳定。资源抓取不是越小越好,而是要让每一次請求都落在能带来内容價值的地方。