蜘蛛拿到一個 URL,服務器返回 200,頁面也顺利下载完成——從抓取日誌看這是一次成功請求。但如果這個頁面里没有真正的内容主体,蜘蛛最终還是會把 URL 放進“低價值”那一堆。這類頁面通常被称為软 404:狀態碼是正常的,内容却是空的。
它和 404 的差別在于成本。真正的 404 是一次快速失敗,蜘蛛很快知道這里没有東西,之後减少回訪即可;软 404 要求蜘蛛把 HTML 完整下载、解析、和站内其他頁面比較,最後才得出同样的结论。同样的抓取額度,被消耗在了一次没有结果的判断上。
哪些頁面最容易變成空壳
- 無结果的搜尋頁和篩選頁:用戶輸入的關鍵詞组合没有匹配項,頁面只剩标题和一句“没有找到相關内容”。
- 空分類與空标簽頁:分類下的商品或文章已全部下架、迁移,模板還在正常渲染。
- 售罄或已下架的商品頁:只剩框架、導航和推荐位,主体信息被清空。
- 過期的活動與专题頁:活動結束後内容被撤下,URL 仍然可以訪問。
- 渲染失敗的頁面:前端依赖的接口报错,HTML 里只有頁头頁脚,主体是一個空容器。
蜘蛛怎么判断這是空壳
搜尋引擎没有公開判定公式,但從抓取行為能看出几個常被參考的信号:
- 正文文本量明顯低于同模板的其他頁面;
- 頁面主体與站内大量其他頁面高度相似,只有标题不同;
- 頁面里的連結极少,或者連結都集中在頁头頁脚這類全站公共区域;
- 用戶進入後很快返回,停留時間接近于零。
反過来,如果頁面主体清晰、有獨立的文字描述、有指向相關内容的連結,即便内容不多,也不太會被当成空壳。
空壳頁面带来的實际损失
最直接的损失是抓取額度。一個站点每天能被抓取的頁面上限有限,空壳頁面占的比例越高,真正需要更新的頁面被轮到的机會就越少。其次是内鏈:如果站内大量連結指向這些空頁面,權重會在這些死胡同里被摊薄,蜘蛛顺着連結走過去也拿不到新東西。最後是判断噪声——日誌里一批 200 狀態碼的請求看起来都很正常,掩盖了真正的结构問题。
處理顺序:先止血,再清理
- 先找到来源。從服務器日誌和站長平台报告中筛出有抓取、未收錄的 URL 集合,按 URL 模式归類,通常很快能看出是搜尋參數、篩選參數,還是某個即將下线的栏目。
- 能删内鏈就先删。空頁面的入口大多来自内鏈和 Sitemap,把這两處的引用去掉,比改狀態碼见效更快。
- 该给什么狀態碼就给什么。永久下线的頁面返回 410 或 404;临时缺货、可能恢复的頁面保留 200,但要补上内容或加 noindex 更合适。
- 搜尋和篩選结果頁。可以對無结果的组合直接返回 404 或做 noindex,同时用 robots.txt 屏蔽高風險的參數组合,避免蜘蛛在參數空間里反复试探。
- 检查渲染鏈路。如果是前端渲染導致的空壳,需要確認蜘蛛执行脚本时接口是否可達、返回是否稳定,別让一次接口超时變成一批空頁面。
日誌里的识別方法
软 404 不會以狀態碼的形式出現在日誌里,需要換個角度找。一種做法是把日誌中蜘蛛抓取的 URL 與頁面正文長度做關联,正文低于某個阈值的頁面單獨列出来看;另一種是观察抓取频次的變化,某個 URL 模板的抓取次數持續下降,往往說明蜘蛛已经把它归到低價值一類。把這两條线索交叉起来,通常能定位到大部分空壳頁面。
软 404 的本质不是頁面出错,而是頁面存在、却對用戶和蜘蛛都没有信息量。處理它的關键是减少這類 URL 的产生,而不僅僅是在被抓之後去清理。
最後一点:清理空壳頁面是個持續工作。栏目調整、商品下架、活動結束都會不断产生新的空頁面,最好在模板层面加一道判断——内容為空时不生成頁面,或直接返回合适的错誤狀態碼,而不是让它以一個完整的 200 頁面留在站点里。