搜尋抓取

抓取路径上的断点:空列表、软 404 與孤岛頁怎么把蜘蛛带偏

蜘蛛沿着連結一頁頁走,真正决定它能不能走到深處的,往往不是頁面數量,而是路径上有没有断点。本文梳理空列表頁、软 404、參數循环、孤岛頁這几類常见断点,說明它們為什么會让抓取停下来,以及用内鏈、分頁和 Sitemap 补路的具体做法。

搜尋抓取

抓取路径上的断点:空列表、软 404 與孤岛頁怎么把蜘蛛带偏

蜘蛛進入一個站点,靠的不是一張完整的地图,而是不断從一個 URL 走到下一個 URL。多數人關注“有多少頁面”,但真正决定蜘蛛能走多深的,是路径上有没有断点。一條内鏈指向的頁面如果返回空内容、错誤狀態,或者干脆没有出口,蜘蛛走到那里就會停住,後面的頁面也就不會被發現。

什么是抓取路径上的断点

断点可以理解為:蜘蛛按正常预期走到某個 URL,却没有得到可以繼續前進的東西。它可能是狀態碼层面的,也可能是内容层面的。判断标准很简單——如果蜘蛛站在這個頁面上,找不到任何值得繼續跟的連結,或者拿到的内容與連結承诺的不一致,這里就是一個断点。

几類常见的断点

  • 空列表頁。分類頁、标簽頁、搜尋结果頁在資料為空或篩選條件過窄时,只返回一句“暂無内容”。蜘蛛會認為這條路到头了,反复抓到几次之後,這類 URL 的抓取频次會明顯下降。
  • 软 404。頁面返回 200,但正文是“内容不存在”“已下架”。蜘蛛拿到的是成功狀態,却没有任何可用信息,既不會像真 404 那样清理索引,也带不出下一步連結。
  • 硬 404 與 410 混用。本该保留並跳轉的舊地址直接给 404,原本存在的路径被切断;而已经確認刪除的頁面又長期给 301,等于让蜘蛛一遍遍去走一條其實已经废弃的路。
  • 參數循环。篩選、排序、分頁參數互相组合,A 頁面鏈到 B,B 又鏈回 A,蜘蛛在里面来回走,抓取量被消耗掉,却没有触達新内容。
  • 孤岛頁。頁面本身没問题,但從首頁、栏目頁都点不到它,只能靠 Sitemap 或外鏈進入。這類頁面通常只有入口没有出口,蜘蛛抓到一次之後很难再回来。
  • 依赖交互的連結。連結只在点击按钮、展開折叠、滚動之後才寫入 DOM,蜘蛛在初始 HTML 里看不到,路径在源碼层面就是断的。

软 404 為什么比硬 404 更麻烦

硬 404 是一個明确的信号,蜘蛛知道该放弃並清理。软 404 則是含糊的:狀態碼说“這里没問题”,内容说“這里什么都没有”。结果往往是頁面被保留在索引里,蜘蛛還會按固定間隔回来复查,一次次空手而归。如果站点里存在大量這種頁面,抓取预算就會被摊薄。

處理思路是让狀態碼和内容對齐:确實不存在的頁面返回 404 或 410;由篩選、排序等參數产生的空结果頁,應该做規范化或直接禁止抓取,而不是让它們以 200 狀態長期存在。

断点不等于错誤:有些頁面本来就该停

並不是所有出口都要补上。篩選组合、會话參數、站内搜尋的查询结果頁,本来就属于無限扩展的地址空間,把它們的連結收敛掉,反而是對抓取路径的保護。真正需要补的是有内容價值、但入口太窄或出口太少的頁面,而不是所有返回空结果的地址。

怎么自查路径上的断点

  1. 從首頁出發,手動点進主要栏目,记錄每一步能不能繼續往下走。
  2. 挑一個目标頁面,看它距离首頁需要几次点击,中間有没有跳到空頁或错誤頁。
  3. 關閉 JavaScript 再走一遍,確認關键連結是否寫在初始 HTML 里。
  4. 在抓取日誌里筛出 404、软 404 集中的目錄,看它們是不是同时承担着入口作用。
  5. 检查分頁最後一頁:如果下一頁鏈在最後一頁仍然存在,蜘蛛就會被带到空頁。

补路的几種做法

  • 给空列表頁一個出口。在“暂無内容”的位置放回上級分類、热门條目或相關标簽的正常連結。
  • 收敛分頁。最後一頁不再輸出“下一頁”,或者把超出范围的分頁地址做規范化。
  • 修好參數。用 canonical 指向無參數版本,把不产生新内容的篩選组合從連結中摘掉。
  • 给孤岛頁加内鏈。在相關的正文、专题或栏目頁里补一個上下文合理的連結,比只放在 Sitemap 里更有用。
  • 让面包屑真實可用。面包屑不只是展示,它是蜘蛛理解层級和找到上級出口的重要通道。
抓取路径不是越宽越好,而是每一步都要有明确的下一步。补路的目标是让蜘蛛少绕圈,而不是让它抓到更多無關地址。

把断点当作路径设計的一部分来检查:入口是否可達、出口是否存在、狀態碼與内容是否一致。這三件事理顺之後,蜘蛛能走到的深度通常會自然改善,URL 發現也會更稳定。