做蜘蛛池的人大多把注意力放在 HTML 上,入口頁的标题、正文、連結寫好了就觉得差不多了。但蜘蛛抓取一個 URL 之後,往往還會顺着頁面里的引用去抓图片、CSS、JS 這些静態资源。這部分抓取同样消耗額度,處理不好會間接影响到入口頁本身的抓取频率。
蜘蛛會不會抓图片、CSS 和 JS
不同搜尋引擎的行為差別很大。Google 的抓取和渲染流程會主動拉取 CSS 和 JS,用来還原頁面在浏览器里的样子;图片也會抓,但優先級通常低于 HTML。百度、必應等對资源的抓取相對保守,很多情况下只看 HTML,CSS 和 JS 未必會全部拉取。
所以不要假设蜘蛛一定會执行脚本,也不要断定它绝不會看图片。稳妥的做法是按最保守的情况设計:即使资源完全不加载,入口頁的核心内容和連結也應该能被讀到。
资源抓取和抓取预算的關系
每個域名可用的抓取能力是有限的。一個入口頁如果引用了八十張图片、五個外部 JS 和三個字体文件,蜘蛛為了完整理解這個頁面,理论上要發几十次請求。這些請求和抓 HTML 用的是同一份額度,资源越多,留给頁面本身的份額就越少。
判断标准很简單:如果去掉某個资源後,用戶和蜘蛛都能正常理解頁面,那它就不值得占用抓取額度。
哪些资源值得放開
- 影响首屏和结构的 CSS:决定内容是否可见、布局是否错乱的關键样式,尤其是用脚本判断可见性的站点。
- 渲染必需的前端脚本:如果入口頁内容依赖前端框架异步加载,相應 JS 需要允许抓取,否則蜘蛛拿到的可能是一個空壳。
- 承载信息的图片:产品图、图表、带文字說明的配图,建议保留並配上 alt。
- 结构化資料引用的资源:结构化資料里指向的图片地址,最好保持可訪問。
哪些资源可以拦掉
- 装饰性背景图、分隔线、图标雪碧图里的冗余部分。
- 第三方統計、广告、客服挂件脚本,這類請求往往還慢。
- 字体文件、视频预览图等對内容理解帮助不大的资源。
- 與入口頁内容無關的轮播图、推荐位图片。
屏蔽可以通過 robots.txt 针對资源目錄設定,也可以直接把不必要的外鏈删掉。需要注意的是,不要屏蔽正在用于渲染的 CSS 和 JS,否則蜘蛛可能誤判頁面结构,把本该可见的内容当成隐藏内容處理。
几類常见的坑
- 资源 404:迁移目錄或改文件名後没有同步,蜘蛛反复請求一個不存在的图片,白白浪費額度,日誌里會出現大量 404。
- 防盗鏈返回 403:图片放在別的域名上,對方做了防盗鏈,蜘蛛拿到的是 403 或错誤頁。
- 外鏈资源超时:引用了加载很慢的第三方 JS,蜘蛛等不到响應就放弃,可能连頁面剩余部分都不再解析。
- 懒加载没有兜底:图片用脚本懒加载,蜘蛛不执行脚本时頁面里只有占位符。
- 资源域名過多:一個入口頁引用七八個不同域名,每個都要重新解析和建连,整体耗时上升。
實操建议
- 把渲染必需的 CSS 内联到 head 里,其余样式合並成一個文件並允许抓取。
- 小图标用内联 SVG 或 base64,减少請求數量。
- 图片统一放在站内域名下,尺寸按實际展示大小裁剪,別用原图缩顯。
- 第三方脚本尽量延後加载,別放在首屏關键路径上。
- 在日誌里筛出资源類型的請求,看哪些目錄被高频抓取,再决定是否收紧。
静態资源不是蜘蛛池的核心,但它會以隐形成本的方式影响入口頁的抓取表現。定期看一眼日誌里的资源請求,把该放的放開、该砍的砍掉,往往比反复調整正文更省事。