蜘蛛抓走一個 URL 之後,站点回头看日誌,最容易只關注狀態碼:200 就放過去,404 才去處理。但實际运营中更麻烦的一類情况是——HTTP 狀態明明寫着 200,頁面却什么都没给。這就是常说的软 404,也是抓取效率被悄悄吃掉的主要来源之一。
什么是软 404
软 404 指的是:服務器返回 200,但頁面主体没有與這個 URL 预期相符的内容。用戶打開看到的是空列表、空白正文区、只剩導航和頁脚的模板頁,或者一句“暂無資料”。從协议上看它是正常頁面,從内容上看它其實是死頁面。
對蜘蛛来说,這個信号是矛盾的:狀態碼说“這頁有效,欢迎再来”,實际内容却说“這里没東西”。蜘蛛只能按前者處理,于是下次可能還會来,你就多花了一次抓取机會。
常见的软 404 来源
- 篩選、排序、分頁參數组合出来的空结果列表頁
- 站内搜尋無结果时渲染出来的搜尋頁
- 商品或文章下架後,只留下模板框架的詳情頁
- 需要登入才能看到正文的頁面,未登入时正文区是空的
- 正文靠前端交互或延迟請求加载,初次响應里没有内容
- 改版或迁移後,舊路径上留下的占位說明頁
為什么它比硬 404 更麻烦
硬 404 是明确的:蜘蛛收到之後會逐步降低訪問频率,並在一段時間後把 URL 從索引里清理掉,鏈路是閉合的。软 404 則不閉合,它的狀態碼一直在邀請蜘蛛回来。
數量少的时候影响有限;一旦站点上堆积了几千個這類 URL——尤其是它們還被内鏈或 Sitemap 指向——抓取時間就會被大量分给没有内容的頁面,真正需要被發現的頁面反而排到後面。同时,蜘蛛對站点整体内容质量的判断也可能受到影响。這里不存在一個可以精确量化的阈值,重点是看這些空壳頁在抓取记錄里的占比。
怎么自查
- 翻服務端日誌,筛出返回 200 但响應体明顯偏小的 URL,正文区字节數低于正常頁面一半以上的優先看。
- 抽样打開這些頁面,把 JS 關掉再看一遍,確認正文是不是真的存在于 HTML 里。
- 把 Sitemap 里提交的 URL 和内鏈指向的 URL 分別列出来,找交集里的空内容模板頁。
- 用站内搜尋和篩選條件主動生成一批 URL,看它們在空结果时返回什么狀態碼。
- 观察同一批空壳 URL 在一段時間内是否被反复抓取,反复出現說明信号没有给對。
處理思路
- 確認确實没有内容的頁面,直接返回 404;已经确定永久移除的可以用 410,让信号更明确。
- 内容下架但有明确替代頁面的,用 301 指向新的地址;没有替代的,不要為了保住舊 URL 而保留一個 200 的空模板。
- 篩選頁和搜尋頁在结果為空时,至少返回 404,或者在頁面头部加上 noindex 的 robots meta,避免留下 200 的空白頁。
- 需要登入的内容,可以把标题、摘要、發布時間等可见部分正常輸出,正文区不要留一個空容器假装有内容。
- 把確認的软 404 從 Sitemap 和内鏈里清掉,尤其是導航、标簽云、相關推荐這些批量輸出連結的位置。
- 關键正文尽量在服務端渲染出来,別让首次响應只剩一個空的挂载节点。
软 404 没有统一的判定标准,比較實用的判断方式是:用戶和蜘蛛打開這個 URL,能不能拿到與 URL 预期一致的内容。拿不到,就應该给出對應的狀態碼。
把它排進日常节奏
软 404 不是一次性問题,站点每次上线下架、每次加篩選维度、每次改版模板,都可能新增一批。比較省事的做法是固定一個检查节奏,比如每月看一次日誌里的小响應体 URL 列表,改版後一周内重点复查一遍新模板的空狀態表現。
這類工作不需要复杂工具,日誌加抽样打開就能覆盖大部分情况。真正要花心思的地方在于:确定這頁到底该返回 404、410 還是 301,然後把它同步到内鏈和 Sitemap 里,让蜘蛛收到的信号前後一致。