狀態碼说 200,内容却说“没有”
日誌里一排 200,看起来一切正常;真正打開頁面,首屏只有一句“暂無相關内容”或者一個空列表。這類頁面在技術上不算报错,但在收錄判断上属于软 404——服務器告诉爬虫“這里有東西”,頁面本身却什么都没提供。
软 404 不等于错誤頁。它更像一種空壳:URL 可訪問、狀態碼正常、模板完整,唯獨主体内容缺失。搜尋蜘蛛抓下来之後,會重新判断這個頁面值不值得進索引,多數情况下不進,或者進了也不展示。
判断一個頁面是不是软 404,不看狀態碼,看它被抓下来之後有没有可讀的内容。
软 404 常從這几類頁面来
- 站内搜尋结果頁:没有命中时返回空列表,狀態碼仍是 200。
- 空分類、空标簽、空归档:栏目建好了,内容還没填。
- 篩選與參數组合頁:多重條件叠加後没有任何符合的结果。
- 商品或内容下架頁:原 URL 還在,内容被撤掉,只剩模板框架。
- 需要登入或權限的頁面:未登入用戶拿到的是一個空容器。
- 依赖 JS 渲染的頁面:首屏 HTML 里是空的,内容靠脚本填進去。
第一步:先分清“暂时為空”和“确實没有”
- 抽样打開頁面,看首屏到底有没有有效信息,別只看狀態碼。
- 查看未执行脚本时的 HTML,確認服務端實际返回了什么。
- 在日誌里按模板或 URL 規則統計,看這批頁面是零星几個還是一整類。
- 查這個 URL 是否曾经有過流量或外鏈,有過的话處理方式要更谨慎。
處理顺序:先分類,再决定留、改、還是下线
值得保留的,把内容补上
如果這類頁面有搜尋需求、有内鏈入口、後續會持續产出内容,就別急着让它消失。补上推荐條目、相關分類或導流模块,让它從空壳變成可用頁面。
确實不该留的,用真實的狀態碼
下架的商品、作废的活動頁、彻底不做的栏目,應该返回真實的 404 或 410,而不是用 200 加一句“内容不存在”。前者是明确信号,後者只會让爬虫反复来抓一個空頁面。
參數與篩選類,從入口收敛
篩選组合理论上可以生成無數個 URL,大多數组合都没有單獨收錄的價值。與其让它們各自返回 200,不如從入口上收敛:限制可被抓取的參數、用 canonical 指向主列表頁、必要时在 robots.txt 里挡住没有意义的组合。
几個容易踩的坑
- 把软 404 当成“頁面没問题”,只改文案不改信号。
- 一刀切把空頁面全部 404,连本来该保留的入口也一起處理掉了。
- 前端路由的應用里,不存在的路径也返回 200,用戶看到自定义提示頁,爬虫看到的是正常頁面。
- 只處理 PC 模板,忽略移動端或另一套渲染方式。
- 改完不复查,舊連結仍被外鏈和站内引用,繼續产生 200 空頁。
怎么盯住它,別让它再長回来
- 按模板建立抽查清單,新上线的分類頁、篩選頁、搜尋结果頁都過一遍。
- 在日誌里定期看“200 但内容极少”的 URL 占比,出現增長就去找来源。
- 把站内搜尋、篩選、下架這三類当作重点监控對象,它們最容易批量产生软 404。
- 改動之後隔一段時間再看一眼,確認這些 URL 没有再被频繁抓取。
软 404 的麻烦之處在于它不报警:狀態碼正常、頁面能打開,問题只會在抓取與索引的統計里慢慢顯現。定期抽查几類高危模板,比事後大批量清理省事得多。