搜尋抓取

软 404 與空壳頁:蜘蛛拿到 200,却没拿到内容

服務器返回 200,頁面里却没有正文——這類“软 404”會让蜘蛛把抓取预算花在空壳上,還可能让大量無内容 URL 留在索引里。本文梳理软 404 的常见来源、蜘蛛的判断依據,以及從日誌和抓取报告里定位、處理這類頁面的具体做法。

搜尋抓取

软 404 與空壳頁:蜘蛛拿到 200,却没拿到内容

蜘蛛抓一個頁面,先看的是狀態碼,但狀態碼只说了一半。服務器回 200,頁面主体却是空的,這種情况通常被叫做“软 404”:地址活着,内容没了。它比真正的 404 更麻烦,因為 404 會明确告诉蜘蛛這個地址不用再来了,而软 404 看起来一切正常,抓取预算照花,索引里也可能留下一個没有内容的壳。

什么样的頁面算软 404

判断标准並不在狀態碼,而在“這個 URL 是否有獨立存在的内容”。几類頁面最容易被算進去:

  • 商品下架、文章刪除後,頁面還在返回 200,只留下“暂無内容”几個字或一個空模板;
  • 篩選、排序、站内搜尋的结果頁,條件组合出来是零结果,但 URL 依然可以訪問;
  • 分頁超出范围,比如第 50 頁早就不存在了,翻過去仍然回 200 的空列表;
  • 依赖 JS 渲染的頁面,HTML 里只有骨架,真正的正文要靠接口返回,蜘蛛拿到的就是這個空壳;
  • 模板重复的聚合頁,几十個 URL 輸出几乎一样的标题和導航,正文部分為空。

蜘蛛怎么判断一個 200 頁面是空壳

搜尋引擎不會只看字數。它大致會综合几個信号:正文文本量與同站同類頁面相比是否明顯偏少;頁面主体是否與站内其它 URL 高度重复;是否只有導航、頁脚和广告位;以及這個 URL 是否被内鏈或 Sitemap 反复指向。多個信号叠在一起,才會被判定為软 404。

這也解释了一個常见現象:同样是一個空结果頁,孤零零地存在往往没人管,而一旦被大量内鏈指向、又寫進 Sitemap,就很容易被当成問题頁面處理。

软 404 消耗的是什么

最直接的消耗是抓取预算。蜘蛛每次来都要發請求、下载 HTML、判断内容,而這些頁面對用戶和索引都没有價值。數量上千之後,占用的配額可能比真正需要更新的頁面還多。

抓取预算不是被一次大抓取用掉的,而是被成千上萬個“看起来正常”的空頁面一点点磨掉的。

其次是索引质量。软 404 頁面如果留在索引里,用戶搜到点進去是空的,站点在“内容是否可靠”上的表現會被拉低。再往深一层,站内大量低质 URL 也可能影响蜘蛛對你整站抓取優先級的判断。

從哪里把這類頁面找出来

  1. 看抓取統計报告里的“软 404”分類,這是最直接的入口,通常會给出示例 URL 和趋势;
  2. 拉服務器日誌,按狀態碼筛出 200 的請求,再按路径模式分组,看是否存在大量同构 URL,例如带篩選參數的结果頁;
  3. 抽样對比正文長度。取同類頁面的正文文本量中位數,明顯低于這個值的 200 頁面值得單獨看;
  4. 检查 Sitemap 和内鏈。如果某個空壳 URL 被大量連結指向,說明它是被主動喂给蜘蛛的,優先級要提前處理。

處理方式可以分几種

彻底不存在的頁面

内容确實已经刪除,就老老實實返回 410 或 404。不要為了保留權重而让一個空模板挂着 200,蜘蛛迟早會把它当软 404,而且這段時間它一直在消耗抓取。

還有入口價值的空结果頁

篩選和站内搜尋的结果頁並非全都该删。零结果的頁面如果對用戶有導航意义,可以保留,但要控制它被蜘蛛走過的范围:不要放進 Sitemap,内鏈上尽量避免让它成為抓取主路径,或者對零结果狀態單獨返回合适的提示與狀態碼。

分頁越界

超出末頁的分頁地址,直接在服務端判断並返回 404,而不是渲染一個空列表。同时把分頁連結的生成逻辑收紧,別让内鏈自己指向不存在的頁碼。

JS 空壳

如果正文完全依赖客戶端渲染,蜘蛛拿到的 HTML 本身就没有内容。至少要把核心正文和主要連結放在服務端可返回的 HTML 里,让蜘蛛第一次請求就能看到實际内容,而不是等渲染队列。

別把所有“空”都一刀切

有些頁面正文确實少,比如分類首頁、目錄頁、工具頁,它們的價值在于组织入口,而不在文字量。判断软 404 时,重点看的是這個 URL 是否提供了別處没有的東西,而不是單纯比字數。把有價值的枢纽頁誤判成软 404 删掉,反而會切断蜘蛛往下走的路径。

比較稳妥的做法是定期抽查:從抓取报告里随机取一批软 404 样例,人工看一遍,再决定是返回 404、加 noindex,還是补充内容让它真正有存在的理由。這個動作不需要很频繁,但比只看總量數字有用得多。