提到搜尋蜘蛛抓取,很多站長只盯着 HTML 頁面本身。實际上,蜘蛛在抓 HTML 的同时,也會按需請求頁面里引用的 CSS、JavaScript 和图片资源。這些請求不會直接带来收錄,但它們會影响蜘蛛對頁面的理解,也會占用一部分服務器资源。理解這三種资源被抓取时發生了什么,能帮你判断哪些抓取是必要的,哪些是白白浪費的。
蜘蛛為什么要抓 CSS 和 JS
搜尋引擎需要還原頁面渲染後的样子,才能判断正文在哪里、哪些内容被隐藏、哪些連結是真實存在的。常见做法是让抓取器把 CSS 和 JS 下载下来,在渲染队列里执行一遍。這意味着:
- 頁面首屏内容靠 JS 渲染时,蜘蛛必须跑完脚本才能看到文字;
- 連結由 JS 動態插入时,只有脚本执行成功,這些 URL 才會進入待抓队列;
- CSS 决定顯示與隐藏,用 display:none 藏起来的内容,渲染後可能被判定為對用戶不可见。
因此,CSS 和 JS 不是可抓可不抓的附属品,而是蜘蛛理解頁面的前置條件。
渲染资源抓取失敗的连鎖反應
如果 JS 文件返回 404、超时,或者被 robots.txt 拦住,蜘蛛拿到的是一個不完整的頁面。表現通常是:收錄的标题和描述與用戶看到的不一致,正文只收錄了一小段,或者頁面里明明有連結,蜘蛛却始终没有發現。
排查顺序建议從日誌入手:先確認蜘蛛有没有請求這些资源,再看返回狀態碼。常见原因是资源部署在 CDN 上,而 CDN 對未知 UA 做了限流或跳轉到驗證頁;也有站点把 assets 目錄整体寫進了 robots.txt 的 Disallow 規則。
图片抓取與另外一條鏈路
图片被抓取有两個目的:一是作為頁面内容的一部分參與理解,二是進入图片搜尋的獨立索引。图片想被收錄,除了能被抓取,還需要頁面本身有可被索引的上下文。常见做法是把图片放在正文附近,配上描述性的 alt 文本,並保證图片 URL 稳定、可長期訪問。图片文件過大、响應過慢,會拖長整個頁面的抓取時間,間接影响同批次其他 URL 的處理。
资源抓取對服務器意味着什么
一個頁面若引用几十個静態资源,蜘蛛抓一次頁面,服務器實际要响應几十次請求。並發控制不好时,日誌里會出現大量资源請求超时,随後頁面本身的抓取频率也可能下降。几個可以落地的做法:
- 合並與压缩资源,减少單頁請求數量;
- 為静態资源設定較長的缓存头,让蜘蛛复用已有副本;
- 把资源域名與主站分開,避免资源請求挤占 HTML 的响應能力;
- 监控资源目錄的 5xx 比例,出現異常时先修服務,再谈抓取。
哪些拦截是合理的
不是所有资源都值得让蜘蛛抓。統計脚本、广告脚本、後台用的接口,通常可以直接在 robots.txt 里拦掉,减少無意义的抓取。判断标准很简單:這個资源是否影响頁面正文和連結的呈現。不影响就可以拦,影响就一定要放開。
资源抓取是頁面抓取的延伸,而不是額外负担。把该放的资源放開、该拦的拦掉,比反复提交 URL 更有效。
最後提醒一句:不要在资源路径上做临时重定向,也不要用带随机參數的 URL 引用 JS 和 CSS。每次抓取都是新的 URL,既浪費抓取配額,也让缓存彻底失效。