蜘蛛池知识

蜘蛛池入口页的静态资源:图片、CSS 与 JS 要不要让蜘蛛抓

入口页不只有 HTML,图片、CSS、JS 也都可能被蜘蛛当成 URL 抓走,占用有限的抓取预算。这篇文章说明哪些资源该挡、哪些不能挡,以及如何精简资源、观察日志,避免静态文件把正文的抓取机会挤掉。

蜘蛛池知识

蜘蛛池入口页的静态资源:图片、CSS 与 JS 要不要让蜘蛛抓

很多人只盯着入口页的 HTML,忽略了页面里引用的图片、样式表和脚本。对蜘蛛来说,这些资源同样是 URL,也可能被排队抓取。抓取预算是有限的,资源抓得多了,正文能分到的机会就少。

蜘蛛抓一个页面时,会顺带看到什么

蜘蛛拿到 HTML 后会解析里面的引用,常见的有这几种:

  • img 的 src、srcset
  • link 标签里的样式表、图标
  • script 的 src
  • iframe 与内嵌页面的地址

是否真的去抓,取决于资源所在域名是否被 robots.txt 挡住、页面本身值不值得继续解析,以及该站点的抓取额度还剩多少。也就是说,资源被抓不是必然,但被抓的成本始终存在。

资源被抓走,代价在哪里

一个入口页如果挂了十几张图、三四个外部脚本,在蜘蛛眼里就是十几个额外 URL。批量站点常见的情况是:同一张占位图、同一套模板 CSS,在几百个入口页里反复出现。这些重复资源会不断消耗抓取额度,却几乎不带来任何价值。

更值得警惕的是结构性影响:当抓取日志里静态文件的请求占比明显高于 HTML,说明蜘蛛的注意力被引到了资源上,入口页与目标页的正文抓取节奏都可能被拖慢。

哪些该挡,哪些不能挡

判断标准可以简单一点:这个资源是否影响蜘蛛理解页面内容。

  • 可以挡:纯装饰性图片、字体文件、统计脚本、广告代码、与内容无关的第三方组件。
  • 谨慎挡:承担主要排版的 CSS、渲染正文的 JS。如果搜索引擎需要执行脚本才能看到内容,挡住之后它拿到的可能是一个残缺页面,反而更糟。
  • 不该挡:承载关键信息的图片,尤其是用图片代替文字标题、代替链接的情况——挡掉等于把内容也挡掉了。

用 robots.txt 做屏蔽时还要清楚一点:屏蔽只阻止抓取,不等于阻止 URL 被索引。如果某个资源地址被外部链接指向,它仍可能出现在结果里,只是内容残缺。

入口页的资源该怎么精简

  1. 能内联的少量样式就内联,减少一次外部请求。
  2. 图片做压缩,写死宽高,避免同一张图多个尺寸版本。
  3. 模板里引用的第三方脚本越少越好,尤其是会再发起请求的统计、推荐类脚本。
  4. 不要用图片承载标题、导航和正文链接,链接必须是可解析的 a 标签。
  5. 多站点共用的静态目录,考虑合并到同一个可被屏蔽的路径下,方便统一管理。

第三方 CDN 与独立静态域名

入口页引用外部 CDN 时,蜘蛛会去抓那个 CDN 域名下的资源。这部分抓取发生在别人的域名上,你既控制不了它的 robots.txt,也看不到它的日志。如果你的静态资源放在自有的独立域名上,可以单独给这个域名写一份 robots.txt,或者干脆把静态资源放在主域名的一个固定目录下统一处理,观测和调整都会方便很多。

把静态资源当成抓取预算的一部分来管理,而不是当成免费的装饰。这个视角切换之后,很多入口页的抓取异常会变得容易解释。

观测与调整的节奏

调整前先取一段日志做基线,记录 HTML 与静态资源各自的请求数量、占比,以及入口页被复访的间隔。改动之后对比这几项:

  • 静态资源请求是否下降;
  • HTML 请求是否相应上升,或者至少不再被压缩;
  • 目标页是否拿到了更多抓取。

不要一次性把所有资源全部挡掉。分批次放开屏蔽范围,观察蜘蛛对页面内容的理解有没有变差,再决定下一步。资源治理是慢功夫,稳定比激进更重要。