蜘蛛進站时先看到的不是正文,而是 HTTP 狀態碼。一批早就没有内容的地址如果仍然返回 200,蜘蛛就會把這些空壳当作有效頁面带走。時間一長,被抓取的清單里混進大量無價值地址,真正需要被發現的頁面反而要排更久的队。
软 404 到底指什么
简單说,就是地址能打開、狀態碼是 200,但頁面上並没有跟這個地址對應的實质内容。它和真正的 404 最大的区別在于:真正的 404 是明确告诉對方“這里没有東西”,软 404 則是含糊地说“有,但你自己看看吧”。對訪客来说是一头雾水,對蜘蛛来说是一次無效抓取。
常见的那几類场景
- 内容已经下架,地址却保留着,頁面只剩一句“内容已刪除”或干脆空白。
- 栏目、分類、标簽被清空後,模板照常渲染,頁面上只有标题和導航。
- 站内搜尋或篩選參數拼出来的地址,没有匹配结果也照样返回 200。
- 改版迁移时跳轉規則漏配,請求落到首頁,但狀態碼不是 301 而是 200。
- 程序異常被包装成正常頁面,报错文本被当成正文輸出。
怎么把這類地址筛出来
- 先從服務器日誌入手,按响應狀態碼分组,重点看返回 200 但訪問量偏低的那些地址,抽样打開確認内容是否與地址匹配。
- 翻站長平台里的抓取與索引样本,留意标题高度重复、正文极短的地址,這類往往是模板批量生成的空頁面。
- 把站点地图里的地址分批過一遍,标簽頁、归档頁、篩選頁是重灾区,尤其要看有没有内容為空的分頁。
- 統計頁面正文長度,设一個自己站点的经驗阈值,低于這個值的頁面優先人工確認,而不是直接删掉。
這一步不需要一次性做完,按栏目分批推進更實际,改完一批、观察一批。
筛出来之後怎么分類處理
确實没有對應内容
让它老老實實返回 404,長期不會再出現的可以用 410。不要用一個设計精美的“找不到頁面”配上 200 狀態碼,那只是把软 404 做得更好看了一点。
内容搬到了新地址
用 301 指向最相關的那一篇或那個栏目。多個舊地址對應同一篇内容时,也可以考虑合並到同一個目标地址,避免同主题散在几個入口。
參數组合或篩選结果頁
這類頁面本身有存在價值,但無穷组合没有。可以先判断有没有真實搜尋需求:有需求的保留,用規范化标簽或 robots 規則约束,没需求的直接返回 404。注意別把規則的匹配范围寫得過宽,誤伤了正常栏目頁。
把所有失效地址统一跳首頁是最省事也最誤導的做法:訪客找不到想要的内容,蜘蛛也讀不出哪個頁面才是替代品。跳轉到最相關的那一頁,才對得起這次請求。
改完之後的复查节奏
- 一周後回看日誌里的狀態碼分布,確認原本的 200 空頁面已经變成 404 或 301。
- 把改動過的地址整理成一張對照表,标清楚原地址、處理方式、目标地址,下次改版還能接着用。
- 观察一段時間内被抓取的地址總量和有效頁面占比,判断這次清理有没有让抓取落在更有價值的地方。
- 如果發現新的空頁面還在持續产生,回到模板层面找原因,別每次都靠事後清理。
软 404 不會让站点立刻出問题,它更像一種慢性损耗:每次抓取都花在空頁面上一点,日积月累才顯出差距。把它当成一次例行的结构巡检,比等到抓取資料不對劲时再回头翻日誌要轻松得多。