排查收錄問题时,常遇到一種情况:索引里能看到某個地址,但站内根本没有這個頁面,点開要么是 404,要么跳回首頁,要么顯示一片空白。這類地址出現的原因不止一種,處理方式也不一样。如果一上来就提交刪除,往往過一段時間又會冒出来。下面按核對顺序梳理一遍。
第一步:確認這個地址返回的真實狀態碼
索引里的记錄和實际返回狀態可能不一致,先別急着下结论。用命令行或浏览器開發者工具看响應头里的狀態碼,而不是只看頁面長得像不像 404。
- 返回 404 或 410:服務器已经明确告知頁面不存在,属于正常處理方式。
- 返回 200 但内容為空或只剩框架:這類“软 404”最容易被当成有效頁面收錄。
- 返回 301/302 跳到首頁或列表頁:搜尋引擎會逐步把原地址替換成跳轉目标,但如果跳轉目标本身质量不高,原地址也可能保留。
- 返回 5xx 或超时:這是临时狀態,通常不會導致收錄,但會让抓取計划被推迟。
软 404 為什么會被收錄
搜尋引擎判断頁面是否存在,主要依據狀態碼,而不是頁面上的文字。如果一個不存在的地址仍然返回 200,頁面上寫着“抱歉,没有找到内容”,對爬虫来说這依然是一個正常頁面,只是内容很薄。薄内容多了,既占用抓取资源,也會拉低整站的质量评價。
常见的软 404 场景包括:
- 自定义错誤頁直接返回 200。
- 單頁應用把所有未匹配路由都渲染成空壳頁,狀態碼却是 200。
- 商品下架或參數错誤後,頁面保留模板但没有任何資料。
- 站内搜尋無结果时,仍然輸出完整的頁面结构。
判断标准很简單:内容是不是真的不存在?如果是,就應该让狀態碼也表達“不存在”,而不是只在頁面文案里提示。
框架和路由的兜底返回容易被忽略
有些站点為了体驗一致,把任何未匹配的路径都交给同一個入口文件處理,再由前端决定展示什么。這種寫法在浏览器里看不出問题,但爬虫拿到的是一個狀態碼 200 的空壳。核對时可以随机造几個明顯不存在的地址,比如在路径後加一串随机字符,看返回碼是否仍然是 200。
索引里的地址也可能来自站外
並非所有被收錄的地址都由本站生成。常见来源有:
- 歷史遗留的舊 URL,改版後既没做跳轉,也没返回 404。
- 外部網站抓取了带參數的連結並長期保留。
- 別人拼错或猜测的地址,被爬虫顺着外鏈尝试訪問。
- sitemap 或内鏈里残留的失效地址。
如果服務器對任意地址都返回 200,就等于主動告诉爬虫“這個地址是存在的”,收錄自然會發生。
建议的處理顺序
- 統計被收錄但站内不存在的地址,按返回碼分组,先處理返回 200 的那一批。
- 修正服務端逻辑,让不存在的地址返回 404,已彻底移除的地址建议返回 410。
- 取消首頁或列表頁的兜底跳轉。跳轉會让狀態變得模糊,不利于索引清理。
- 清理站内残留入口:sitemap、内鏈、導航、面包屑里指向失效地址的連結。
- 確認返回碼正确之後,再提交移除。顺序反了容易反复出現。
- 观察两到四周,看索引中的地址數量是否逐步下降,不必每天重复提交。
几個常见誤区
- 用 robots.txt 屏蔽代替 404:robots 只阻止抓取,不會把已收錄的地址從索引里拿掉,而且屏蔽之後爬虫也讀不到 noindex 指令。
- 给错誤頁加 noindex 但不改狀態碼:短期可行,但頁面仍然占用抓取资源,長期還是應该返回正确狀態碼。
- 把 404 全部改成 301 到首頁:大量地址跳到首頁會被视為软 404,效果和空壳頁接近。
- 频繁提交刪除:狀態碼没改之前,提交只是临时清掉展示,之後可能再次出現。
结论可以简化成一句话:让狀態碼如實反映頁面是否存在,再谈收錄和清理。收錄狀態是抓取、索引、展示三個环节共同作用的结果,不存在的地址被收錄,多數时候不是搜尋引擎判断错了,而是服務器一直在说“我這里有一個正常頁面”。