蜘蛛的工作方式很朴素:從一個已知 URL 出發,解析頁面里的連結,把新的 URL 放進队列,再一個個訪問下去。它没有站点地图,只能靠連結一步步走。所以当某個頁面既没有有效内容,也没有通往別處的連結时,蜘蛛就走進了一條死胡同——訪問完就停,队列里不會多出任何東西。
單看一個空頁面似乎没什么损失,但死胡同往往成片出現,而且多分布在列表頁、篩選頁、分頁這類承担着URL 發現职责的位置上。它們不只是浪費几次抓取,還可能让整片詳情頁失去入口。
三類最常见的死胡同
空列表頁與"暂無内容"
分類下暂时没有商品、标簽下只有一篇文章、搜尋结果為零——這類頁面本身没有错,問题出在它們仍然返回 200 狀態碼,並且被内鏈和 Sitemap 反复指向。蜘蛛每次来都空手而归。
- 確認頁面是否真的長期為空,還是只是資料同步延迟造成的临时空態。
- 長期為空的列表頁,可以從内鏈和 Sitemap 中撤掉,但保留頁面本身供用戶從站内搜尋進入。
- 如果只是季节性缺货,頁面保留連結通常更合适,避免恢复时入口要重新积累。
软 404:返回 200 却没有内容
頁面模板還在,主体内容已经刪除或迁移,服務器照样回 200。蜘蛛會把它当成正常頁面收錄,用戶点進来却看到空白或一句"内容不存在"。更麻烦的是,這類頁面常常還挂着舊的内鏈,把抓取预算持續引過去。
處理思路是让狀態碼和内容狀態一致:内容确實没了,就返回 404 或 410;有對應的新地址,就做 301。不要用只顯示一句提示的 200 頁面来替代。
循环與近似無限的路径
日歷翻頁、篩選參數组合、带 session 或排序參數的連結,很容易互相指向,形成蜘蛛绕不出去的环。典型特征是日誌里同一個模板被反复抓取,URL 只差一两個參數,而真正的内容頁却更新缓慢。
- 查清哪些參數是内容必需的,哪些只是展示狀態。
- 非必需參數用 canonical 指向規范地址,或在 robots.txt 中做有限度的屏蔽。
- 检查分頁鏈路是否存在"下一頁"永遠指向新的组合 URL 的情况。
死胡同真正的影响在哪里
抓取预算是有限的,蜘蛛每次訪問都有成本。死胡同頁面的代價不只是這一次訪問,而是它占掉的位置本可以去發現新 URL、检查老頁面更新。当死胡同集中在深层列表頁时,表現往往是:Sitemap 里的新頁面迟迟不被抓,而日誌里全是老模板的重复訪問。
另一個容易被忽略的影响是内鏈權重。如果導航或面包屑把大量連結指向空頁面,通往詳情頁的路径就被稀释了。
怎么把這些頁面找出来
不要凭感觉猜,日誌和站点结构能给出比較明确的线索:
- 看日誌里的高频模板:同一路径模式被反复抓取,且 URL 參數不断變化,大概率是循环路径。
- 對比抓取量與产生的新 URL:某類頁面抓了很多次,却没有带来任何新地址的發現,需要重点检查。
- 抽查頁面狀態:随机抽取列表頁、标簽頁,確認狀態碼、正文長度和出鏈數量是否正常。
- 核對 Sitemap:Sitemap 里是否混入了空列表頁或已下线的地址。
判断标准可以简化成一句话:這個頁面被蜘蛛訪問之後,队列里應该多出什么?如果答案是"什么都没有",它就是一個需要處理的节点。
處理顺序與驗證
建议按影响面從大到小来改,而不是一次全動:
- 先處理软 404,因為它同时影响收錄质量和用戶体驗。
- 再断開指向長期空列表頁的内鏈,Sitemap 同步剔除。
- 最後處理參數循环,通常需要 canonical 和 robots 規則配合。
- 改動後观察一段時間日誌,確認同類模板的抓取次數下降,詳情頁抓取比例上升。
驗證时不要只看一天的資料。蜘蛛重新計算路径需要時間,尤其是内鏈調整後的效果,通常要等它把新结构走一遍才能体現。
顺带留意服務器端的表現
有时頁面本身结构正常,但蜘蛛走到一半就断了:超时、连接重置、响應過慢導致放弃。這種情况下日誌里會出現抓取未完成或狀態異常的记錄,看起来像死胡同,實际是服務器稳定性的問题。排查时把响應時間、错誤狀態碼和頁面结构一起看,避免把两類問题混在一起修。
死胡同不會让站点立刻出問题,但它會一点点削弱蜘蛛走遍站点的能力。定期清理這些节点,比事後追問"為什么新頁面没被發現"要省事得多。