蜘蛛抓取一個頁面,並不是把整段 HTML 存下来就完事。它會解析頁面、抽取出所有可跟随的連結、做去重,然後把這些 URL 放進待抓队列。真正影响抓取路径的,往往不是連結的總數,而是這些連結出現在頁面的什么位置。
蜘蛛拿到頁面後先做什么
大致顺序是:下载 HTML、解析 DOM、识別可抓取的 href、過滤掉 nofollow 或 robots 不允许的地址、合並重复項,最後按某種優先級入队。這個優先級没有公開的固定公式,但從抓取日誌中能观察到一些規律:位置靠前、上下文清晰、指向内容頁的連結,更容易在後續几次抓取中出現。
三種常见連結位置的差別
主導航與面包屑
這两類連結出現在每個頁面上,属于全站重复出現的强信号。它們的好處是稳定——蜘蛛走到任何一個頁面都能顺着它們回到主干路径,不容易迷路。缺点是數量有限,通常只能覆盖一級或二級栏目,深层頁面還是得靠別的方式被發現。
正文中的上下文連結
正文内鏈是價值較高的一類:它和被連結頁面在主题上相關,锚文本通常也更有描述性。蜘蛛在解析正文时,這類連結會带着上下文一起進入队列。如果内鏈只是堆在文末的“相關推荐”里,效果會打折扣,因為位置和语境都變弱了。
頁脚與侧栏的重复連結
頁脚和侧栏常被用来铺全站入口,但同一批連結出現在每一個頁面上,去重之後並不會带来更多新 URL。它們的主要作用是给低频頁面留一個稳定入口,而不是扩大發現范围。
- 導航與面包屑:路径稳定,覆盖面窄
- 正文内鏈:语境强,适合把重要内容串起来
- 頁脚與侧栏:重复度高,适合兜底
- 列表頁與聚合頁:量大,需要控制质量
锚文本和連結數量會影响判断
锚文本是蜘蛛理解目标頁面的重要线索。“点击這里”和“服務器日誌分析入门”传递的信息完全不同。前者只能說明這里有個連結,後者能帮助蜘蛛判断目标頁大致讲什么,從而在後續抓取时更有把握。
連結數量同样有影响。一個頁面铺几百條連結,尤其是其中大量指向篩選參數、排序组合或站内搜尋结果时,蜘蛛會挑着走,剩下的可能長時間排在队列後面。與其把所有可能入口都塞進頁面,不如把有限的位置留给真正需要被發現的 URL。
Sitemap 與内鏈的分工
内鏈决定了蜘蛛在站内“怎么走”,Sitemap 更像是给出一份清單,說明“有哪些頁面值得看”。两者並不冲突:内鏈提供路径和语境,Sitemap 弥补那些没有内鏈入口、或者入口很深的重要 URL。需要注意的是,Sitemap 里列出但不被任何内鏈指向的頁面,抓取频率通常不稳定。
让重要頁面同时拥有内鏈入口和 Sitemap 记錄,比只依赖其中一種更稳妥。
服務器狀態會打断整條接力
連結抽取得再干净,如果服務器在蜘蛛訪問时频繁返回 5xx、429 或者响應時間過長,抓取节奏就會被打乱。蜘蛛會降低對该站点的抓取频率,之前排好的队列也可能被推迟。抓取路径是一條接力,任何一棒掉在地上,後面的頁面都要等。
几個可以落地的检查点
- 在日誌里找一找,被频繁抓取的 URL 是不是大多来自導航或某個列表頁。
- 抽查重要内頁,確認它至少有一條来自正文的上下文連結,而不只是頁脚。
- 检查列表頁和聚合頁的連結數量,把無意义的參數组合收一收。
- 把没有内鏈入口但确實重要的 URL 补進 Sitemap,並保持更新。
- 關注服務器响應時間與错誤碼,別让稳定性問题掩盖了结构問题。
抓取路径不是一次设計就能定型的,它會随着栏目調整、模板改版和内容增長不断變化。定期看日誌、對照頁面上的連結位置,比套用某個固定模板更有用。