做蜘蛛池的人大多把注意力放在 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,减少请求数量。
- 图片统一放在站内域名下,尺寸按实际展示大小裁剪,别用原图缩显。
- 第三方脚本尽量延后加载,别放在首屏关键路径上。
- 在日志里筛出资源类型的请求,看哪些目录被高频抓取,再决定是否收紧。
静态资源不是蜘蛛池的核心,但它会以隐形成本的方式影响入口页的抓取表现。定期看一眼日志里的资源请求,把该放的放开、该砍的砍掉,往往比反复调整正文更省事。