蜘蛛池知识

蜘蛛池入口頁的静態资源:图片、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 請求是否相應上升,或者至少不再被压缩;
  • 目标頁是否拿到了更多抓取。

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