網站收錄

软 404 不是 404:返回 200 的空结果頁為什么照样進索引

篩選後没有结果、商品下架、活動結束,這些頁面往往仍返回 200,只是正文變成一句提示。搜尋引擎拿不到狀態碼信号,只能靠内容判断,于是可能出現空頁面被收錄、老頁面反复被抓的情况。本文梳理软 404 的常见来源、自查顺序和几種處理方式的邊界。

網站收錄

软 404 不是 404:返回 200 的空结果頁為什么照样進索引

不少人判断一個頁面是否還有價值,看的是它能不能打開。只要浏览器里能看到東西、狀態碼是 200,就觉得這頁還在、還算數。但搜尋引擎看的不只是狀態碼,還要看頁面里到底有没有内容。当一個 URL 返回 200,正文却只剩一句“没有找到相關结果”或“该商品已下架”,它就變成了典型的软 404。

软 404 和真 404 的区別在哪

真 404 是服務器明确告诉爬虫:這個地址没有東西了。软 404 則相反,服務器说“一切正常”,但頁面内容其實是空的。爬虫只能把 HTML 抓回去,再靠内容判断,這個過程比讀一個狀態碼慢得多,也更容易判断失誤。

结果就是两種麻烦:一是這類空頁面可能被当成薄内容放進索引;二是即使没有被收錄,它也可能因為内鏈一直在、URL 一直可訪問,而被反复抓取。

软 404 通常從哪里冒出来

  • 篩選、排序、多條件组合之後没有匹配结果,模板照样渲染出一個 200 頁面;
  • 商品下架、活動結束、文章被撤,但列表頁和面包屑還鏈着舊地址;
  • 空分類、空标簽頁、自動生成的聚合頁;
  • 站内搜尋结果頁,尤其是用戶搜了一個没有结果的词之後产生的 URL。

這些頁面的共同点是:模板是统一的,狀態碼是统一的,只有資料库里有没有資料不一样。開發不特意處理,服務器就會一律返回 200。

自查:怎么把软 404 找出来

  1. 先從日誌里挑抓取频次高、又明顯没有业務價值的 URL,看它們是不是集中在某几個模板上。
  2. 在搜尋後台的頁面报告里,關注那些“已编入索引”但点進去没有實质内容的地址。
  3. 用抓取工具批量請求一批样本,把狀態碼和正文字數放在一起比對,重点看 200 且正文极短的那一档。
  4. 按模板归類,而不是一個 URL 一個 URL 地看。软 404 基本是模板問题,不是單頁問题。

處理方式要看頁面本身的性质

内容确實不存在了

下架的商品、結束的活動、撤掉的文章,如果确定不會再恢复,返回 410 或 404 都比留着一個 200 的空壳清楚。搜尋引擎拿到明确信号後,清理速度通常比靠内容判断要快。

只是暂时没有结果

比如季节性的分類、暂时缺货的列表頁,將来還會重新有内容。這類頁面可以繼續返回 200,但建议加上 noindex,同时在頁面上给出替代入口,比如回到上一級分類或推荐同類内容。等資料恢复後再去掉 noindex,頁面本身不用換地址。

篩選和排序參數

參數组合可以無限生成,其中大部分组合没有搜尋需求。常见做法是只让有實际内容的篩選组合被訪問,其余组合要么不生成連結,要么收敛到上級分類頁,要么用 noindex 挡在索引之外。這里要注意,robots.txt 屏蔽只能挡住抓取,挡不住索引,如果頁面已经被外部連結指向,仍然可能出現在结果里。

站内搜尋结果頁

這類頁面價值參差。如果站内搜尋是你站点的重要功能,別人會主動搜你的品牌加關鍵詞来找,那不妨保留一部分;如果只是模板自動生成、内容拼凑,通常屏蔽或 noindex 更合适。

不要把整站某個分類一刀切地 noindex。先問一句:這個頁面有没有獨立的搜尋需求?有需求却被挡住,损失的是流量,不只是收錄數量。

几個容易踩的坑

  • 用前端 JS 在無结果时才渲染提示文案。如果爬虫执行 JS 的能力有限,它看到的可能就是一個完全空白的 HTML,這比服務端直接返回提示更糟。
  • 頁面已经 noindex,但列表頁和導航里還挂着大量指向它的連結。爬虫仍會不断發現和抓取這些地址,浪費的是抓取份額。
  • 把软 404 当成收錄問题来處理,反复提交站点地图、反复推送,其實問题出在頁面本身没有内容。
  • 只改狀態碼,不改内鏈。地址返回 404 了,但入口連結還在,用戶和爬虫還是會一再来撞。

软 404 说到底是一個一致性問题:狀態碼、頁面内容、内鏈入口,三者應该讲同一個故事。定期按模板核對一遍這三者是否對得上,比事後一頁頁清理要省力得多。