做蜘蛛池和站点运营时,很多人只盯着一件事:入口頁有没有被訪問、目标 URL 有没有出現在日誌里。但還有一種情况更麻烦——連結是通的,狀態碼是 200,搜尋蜘蛛也确實来抓了,可抓到的目标頁打開後只有一句“内容不存在”,或者除了一堆模板和推荐位什么都没有。這就是软 404。
它和返回 404 的硬错誤不一样,處理起来也更容易被忽略。
软 404 到底是什么
简單说,软 404 指的是:服務器對某個 URL 返回了 200,但頁面本身並没有實质内容。搜尋蜘蛛第一步看的是狀態碼,200 意味着“這個 URL 有效、可以繼續抓”,第二步才去解析正文。如果正文是空的,蜘蛛拿到的是一個有效 URL 加一份没有價值的頁面。
常见的软 404 表現有:
- 頁面标题寫着“内容已刪除”“頁面不存在”,正文只有几十個字;
- 需要登入、需要下载 App、需要掃碼才能看到真正内容;
- 内容被清空後模板還在,導航、頁脚、推荐位照常渲染;
- 成百上千個 URL 返回的是同一段空壳模板,只有标题或參數不同。
硬 404 是明确告诉搜尋蜘蛛“這里没有東西”,软 404 是含糊地表示“這里有一個頁面,但没什么好看的”。前者會被快速剔除,後者往往被反复抓取。
為什么它對蜘蛛池的影响比硬 404 更大
返回 404 的 URL,搜尋蜘蛛抓過一两次之後通常就會降低频率甚至不再訪問。而软 404 的狀態碼是 200,從抓取調度的角度看它仍然是“正常頁面”,于是會被排進後續的抓取队列。
结果就是:抓取预算被一批没有内容的 URL 占着,真正需要被發現的 URL 反而排队更久。對靠入口頁不断递出新連結的站点来说,這個影响是間接但持續的——不是某天突然掉抓取,而是新 URL 的發現和回訪节奏慢慢變慢。
另外,如果一個目錄或域名下大面积是這種空壳頁,站点整体在抓取侧的印象也會變差。這里不展開效果层面的猜测,只提醒一点:软 404 不會让發現停止,但會让發現變得没有产出。
怎么確認目标 URL 是软 404
- 先看狀態碼。用 curl -I 或抓包工具確認返回的是 200、301 還是 404。很多“看起来打不開”的頁面其實是 200。
- 再看正文長度和结构。把目标頁和站内正常頁面對比,看正文段落數、字符數、是否存在有效标题层級。
- 查日誌。同一個 URL 在一段時間内被抓取多次,但抓取结果没有任何變化,值得重点核對。
- 看搜尋後台的“已抓取—尚未编入索引”一類报告。如果一批 URL 長期停在這個狀態,且人工打開确實没有内容,基本可以判定。
不要只看狀態碼,也不要只看頁面能不能打開。判断软 404 的關键是“狀態碼 + 内容”两個條件同时看。
入口頁层面可以怎么處理
1. 确實没有内容的 URL
该返回 404 或 410 就返回,不要用 200 的提示頁兜着。一個明确的错誤狀態,比一個假装正常的空頁面更容易让抓取资源流向別處。
2. 内容存在但没渲染出来
前端單頁應用容易出現首屏空白、正文靠 JS 异步加载的情况。搜尋蜘蛛拿到的 HTML 里如果没有主体内容,效果和软 404 很接近。可以考虑服務端渲染或预渲染,至少保證首屏 HTML 里有真實正文。
3. 内容重复、被合並的頁面
如果若干 URL 指向的是同一份内容,用 canonical 指向主頁面,但同时要保證被指向的頁面本身有内容,而不是把一堆空壳互相指来指去。
4. 入口頁這一侧的习惯
- 入口頁只連結到有實际内容的 URL,不要在入口頁里塞一批空壳地址凑數量;
- 控制單個入口頁的外鏈總量,把關键連結放在靠前、容易被解析到的位置;
- 定期抽样:從日誌里挑出被抓取频次高的目标 URL,人工打開看正文是否完整;
- 把入口頁的連結清單和目标頁的狀態碼清單對齐,及时發現已经變成空壳的地址。
一個容易看走眼的情况:驗證頁和防護頁
有些站点前面有 WAF 或訪問驗證,搜尋蜘蛛請求时可能拿到一個 200 的驗證頁或提示頁。它和软 404 在表現上很像:狀態碼正常,内容不是真正内容。這類問题要從日誌里结合 UA、狀態碼和响應長度一起看,必要时單獨測試不同来源 IP 下的返回结果,不要直接当成頁面本身的問题去改模板。
小结
软 404 不會阻止搜尋蜘蛛發現 URL,它拦不住抓取,只是让抓取回来的東西没有價值。入口頁的职责是把 URL 递出去,目标頁的职责是接住它。检查蜘蛛池效果时,除了看“有没有被抓”,也值得花一点時間看“抓到的是什么”。把空壳頁整理成明确的 404,或者补上真實内容,通常比繼續增加入口頁數量更實际。