蜘蛛沿着内鏈在站点里走,遇到打不開的地址是常事。但“打不開”並不是一種狀態:404、410、软 404、连接被重置、301 指向一個已经不存在的頁面,對蜘蛛来说含义完全不同。分不清這些狀態,修复動作就容易做反。
先分清三種“死”
404:暂时找不到
服務器告诉蜘蛛這個地址没有内容,语气是“現在没有”。蜘蛛一般會记錄,並在一段時間内回来复查,確認仍然不存在之後,慢慢降低訪問频率。404 是可以接受的預設狀態,适合内容确實下架、但地址可能還會复用的场景。
410:明确没有了
410 表達的是永久移除。蜘蛛收到之後,通常比 404 更快减少重试,也更容易把這條 URL 從待抓队列里清出去。大批量下架、整個栏目砍掉时,用 410 比用 404 更省抓取額度。
软 404:最难處理的一種
服務器返回 200,頁面上却寫着“商品已下架”“内容不存在”。蜘蛛看到的是一個正常頁面,于是照常抓取、照常處理,只是這個頁面没有任何可用的信息。它比真正的 404 更消耗资源,也更难诊断,因為日誌里的狀態碼看起来一切正常。
死鏈在抓取路径上留下的影响
- 路径断裂:内鏈指向死鏈,蜘蛛走到這里就走不下去了,後面的内容要靠別的入口重新發現。
- 重复试探:狀態碼不明确时,蜘蛛無法判断该不该放弃,只能反复回来確認。
- 額度被占用:抓一個 404 和抓一個正常頁面的開销差不多,但前者没有任何产出。
- 信号中断:連結的指向關系失效,原本通過内鏈传递的信息也跟着断掉。
一個常见的连鎖反應
頁面 A 被刪除,301 到頁面 B;頁面 B 後来也被刪除,直接返回 404。蜘蛛跟着跳一次、两次,最後落空——這條鏈路在它眼里就是無效跳轉。類似情况攒多了,站内連結的可信度會受影响,蜘蛛再来抓取时的判断也會更保守。
處理顺序怎么排
- 從服務器日誌里筛出狀態碼異常、但被反复抓取的 URL,按抓取次數排序。
- 区分是临时下线還是永久移除,分別用 404 和 410,不要一律 301。
- 检查站内還有哪些頁面連結到這些 URL,把入口改掉或删掉。
- 從 Sitemap 和分片文件里清掉這些地址,避免繼續主動提交。
- 修复後观察一段時間日誌,確認重试次數确實在下降。
把大量死鏈统一 301 到首頁,看起来干净,實际上是在批量制造软 404:蜘蛛每次跟過去,看到的都是同一張與它要找的内容無關的頁面。
顺手检查的几處
- 站内搜尋、篩選、排序這類參數生成的地址,失效後是否留下成千上萬條死鏈。
- 舊版栏目頁和标簽頁,是否還挂在導航或頁脚里。
- 正文中的外鏈和图片連結是否已经失效。
- 移動端與 PC 端是否返回了不一致的狀態碼。
死鏈本身不會直接拖垮站点,但狀態碼含糊、入口不清、残留地址長期存在,會让蜘蛛在同一個地方反复消耗時間。把狀態说清楚,把入口收干净,剩下的交给蜘蛛自己判断。