多數人谈抓取,預設對象是 HTML 頁面。但把服務器日誌逐條翻一遍會發現,蜘蛛的請求里往往混着 CSS、JS、图片、字体,甚至 favicon。這些资源請求同样占用抓取額度,也直接影响蜘蛛能不能看懂你的頁面。
搜尋蜘蛛會抓资源文件吗
會,但目的和抓 HTML 不同。HTML 是内容载体,被抓取後進入解析與索引流程;CSS 和 JS 多數时候是為了渲染,让蜘蛛看到用戶實际看到的 DOM 结构。图片則可能進入图片搜尋,有自己的一套抓取和索引逻辑,與網頁索引並不完全同步。
字体、视频、大体积附件和頁面里的接口請求(XHR、fetch)通常不是必抓項。蜘蛛可能跳過,也可能因為渲染需要而請求其中一部分。也就是说,资源抓取不是全有或全無,而是按需發生。
资源抓取和 HTML 抓取共用同一份額度
同一個站点,蜘蛛一天愿意發多少請求大致是有上限的。如果每個頁面都挂几十個带随机參數的静態资源,比如 style.css?t=1712345678,蜘蛛看到的就是大量互不相同的一次性 URL。抓取次數被分散到资源上,留给内頁 HTML 的額度自然就少了。
這是“頁面重量”话题的另一面:不只是 HTML 体积大,而是頁面牵连的外部资源多、URL 唯一化嚴重。
资源抓不到时,頁面會被看错
如果 CSS 被 robots.txt 屏蔽,或 CDN 按 UA 做了拦截,蜘蛛拿到的就是一個没有样式的裸 HTML。它可能把靠 CSS 隐藏的内容当成正常内容,也可能看不到 JS 渲染出来的連結和正文。移動端适配、懒加载、折叠導航、選項卡,都容易在這里出問题。
资源的可訪問性不是前端体驗的小事,它是蜘蛛理解頁面的前提。
几個常见的坑
- robots.txt 里寫了 Disallow: /*.css 或 /*.js,渲染直接失敗,一般不建议屏蔽整類资源
- 静態资源目錄要求登入、带 Referer 校驗或簽名參數,蜘蛛的裸請求返回 403
- CDN 或 WAF 把蜘蛛 UA 当成異常流量,返回驗證碼頁或空响應
- 图片先用占位图占位、再由 JS 替換 src,蜘蛛抓到的只是占位图
- 每次發布都给资源加随机後缀,制造出海量只在当天有效的 URL
怎么安排更省抓取
- 静態资源保持稳定 URL,用版本目錄或内容哈希区分版本,而不是随机查询參數
- 让主要 CSS、JS 和正文图片在日誌里稳定返回 200,而不是 404、403、302
- robots.txt 只屏蔽确實不想被抓的目錄,別顺手把整個资源目錄一起挡住
- 大文件和不參與渲染的资源,可以放到獨立域名或對象存储,與主站抓取額度分開
- 定期用日誌核對:蜘蛛請求资源时的狀態碼、响應時間和 UA 是否一致
從日誌里看什么
把蜘蛛訪問按扩展名分類,統計资源請求占比。如果资源請求明顯多于 HTML 請求,說明抓取額度在被消耗在次要目标上;如果资源請求几乎全是 403 或 404,說明渲染鏈路本身有問题。這两類情况的排查方向完全不同,但都藏在同一份日誌里。
资源抓取不會直接带来收錄,但它决定了蜘蛛看到的那個頁面長什么样。把它当成抓取鏈路的一部分来维護,比只盯着 HTML 更接近真實情况。