搜尋抓取

抓取路径上的死胡同:空列表頁、软 404 與循环連結怎么處理

蜘蛛靠連結一路往前走,走到没有出口的頁面就會停在那里。空列表頁、返回 200 却無内容的软 404、以及參數或日歷造成的循环路径,都會消耗抓取预算、拖慢新 URL 的發現。本文讲怎么用日誌和站点结构定位這些死胡同,按什么顺序修,以及修完怎么驗證。

搜尋抓取

抓取路径上的死胡同:空列表頁、软 404 與循环連結怎么處理

蜘蛛的工作方式很朴素:從一個已知 URL 出發,解析頁面里的連結,把新的 URL 放進队列,再一個個訪問下去。它没有站点地图,只能靠連結一步步走。所以当某個頁面既没有有效内容,也没有通往別處的連結时,蜘蛛就走進了一條死胡同——訪問完就停,队列里不會多出任何東西。

單看一個空頁面似乎没什么损失,但死胡同往往成片出現,而且多分布在列表頁、篩選頁、分頁這類承担着URL 發現职责的位置上。它們不只是浪費几次抓取,還可能让整片詳情頁失去入口。

三類最常见的死胡同

空列表頁與"暂無内容"

分類下暂时没有商品、标簽下只有一篇文章、搜尋结果為零——這類頁面本身没有错,問题出在它們仍然返回 200 狀態碼,並且被内鏈和 Sitemap 反复指向。蜘蛛每次来都空手而归。

  • 確認頁面是否真的長期為空,還是只是資料同步延迟造成的临时空態。
  • 長期為空的列表頁,可以從内鏈和 Sitemap 中撤掉,但保留頁面本身供用戶從站内搜尋進入。
  • 如果只是季节性缺货,頁面保留連結通常更合适,避免恢复时入口要重新积累。

软 404:返回 200 却没有内容

頁面模板還在,主体内容已经刪除或迁移,服務器照样回 200。蜘蛛會把它当成正常頁面收錄,用戶点進来却看到空白或一句"内容不存在"。更麻烦的是,這類頁面常常還挂着舊的内鏈,把抓取预算持續引過去。

處理思路是让狀態碼和内容狀態一致:内容确實没了,就返回 404 或 410;有對應的新地址,就做 301。不要用只顯示一句提示的 200 頁面来替代。

循环與近似無限的路径

日歷翻頁、篩選參數组合、带 session 或排序參數的連結,很容易互相指向,形成蜘蛛绕不出去的环。典型特征是日誌里同一個模板被反复抓取,URL 只差一两個參數,而真正的内容頁却更新缓慢。

  • 查清哪些參數是内容必需的,哪些只是展示狀態。
  • 非必需參數用 canonical 指向規范地址,或在 robots.txt 中做有限度的屏蔽。
  • 检查分頁鏈路是否存在"下一頁"永遠指向新的组合 URL 的情况。

死胡同真正的影响在哪里

抓取预算是有限的,蜘蛛每次訪問都有成本。死胡同頁面的代價不只是這一次訪問,而是它占掉的位置本可以去發現新 URL、检查老頁面更新。当死胡同集中在深层列表頁时,表現往往是:Sitemap 里的新頁面迟迟不被抓,而日誌里全是老模板的重复訪問

另一個容易被忽略的影响是内鏈權重。如果導航或面包屑把大量連結指向空頁面,通往詳情頁的路径就被稀释了。

怎么把這些頁面找出来

不要凭感觉猜,日誌和站点结构能给出比較明确的线索:

  1. 看日誌里的高频模板:同一路径模式被反复抓取,且 URL 參數不断變化,大概率是循环路径。
  2. 對比抓取量與产生的新 URL:某類頁面抓了很多次,却没有带来任何新地址的發現,需要重点检查。
  3. 抽查頁面狀態:随机抽取列表頁、标簽頁,確認狀態碼、正文長度和出鏈數量是否正常。
  4. 核對 Sitemap:Sitemap 里是否混入了空列表頁或已下线的地址。
判断标准可以简化成一句话:這個頁面被蜘蛛訪問之後,队列里應该多出什么?如果答案是"什么都没有",它就是一個需要處理的节点。

處理顺序與驗證

建议按影响面從大到小来改,而不是一次全動:

  1. 先處理软 404,因為它同时影响收錄质量和用戶体驗。
  2. 再断開指向長期空列表頁的内鏈,Sitemap 同步剔除。
  3. 最後處理參數循环,通常需要 canonical 和 robots 規則配合。
  4. 改動後观察一段時間日誌,確認同類模板的抓取次數下降,詳情頁抓取比例上升。

驗證时不要只看一天的資料。蜘蛛重新計算路径需要時間,尤其是内鏈調整後的效果,通常要等它把新结构走一遍才能体現。

顺带留意服務器端的表現

有时頁面本身结构正常,但蜘蛛走到一半就断了:超时、连接重置、响應過慢導致放弃。這種情况下日誌里會出現抓取未完成或狀態異常的记錄,看起来像死胡同,實际是服務器稳定性的問题。排查时把响應時間、错誤狀態碼和頁面结构一起看,避免把两類問题混在一起修。

死胡同不會让站点立刻出問题,但它會一点点削弱蜘蛛走遍站点的能力。定期清理這些节点,比事後追問"為什么新頁面没被發現"要省事得多。