搜尋抓取

蜘蛛在一個頁面里先走哪條連結:HTML 顺序、位置與上下文的影响

同一批新連結,被發現的先後往往差別很大。除了 Sitemap 和外部入口,頁面本身就是一個岔路口:蜘蛛按 HTML 书寫顺序抽取連結,位置、锚文本和連結數量都會影响它先走哪一條。本文從解析顺序、常见区块差异、可控引導手段和日誌观察四個角度,梳理如何让重要頁面更早進入抓取队列。

搜尋抓取

蜘蛛在一個頁面里先走哪條連結:HTML 顺序、位置與上下文的影响

同一批新連結,有的几小时就被抓,有的埋了两周也等不到。除了 Sitemap、外鏈和主動推送,頁面本身就是一個岔路口:蜘蛛解析完 HTML 後,會把遇到的連結放進待抓队列,而它先走哪一條,和連結出現的位置、顺序、上下文都有關系。

蜘蛛解析頁面时的基本顺序

蜘蛛拿到的是一段 HTML 文本,它的讀取大致是從上往下的:

  • 先處理头部区域,包括 canonical、hreflang、meta robots 等,這些會先影响它對整個頁面的判断;
  • 再顺着 body 往下走,遇到 a 标簽的 href 就抽出 URL;
  • 連結所在的区块、前後的文字、锚文本本身,通常也會被一起记錄。

需要留意的是,這里的顺序是 HTML 里的书寫顺序,不是视觉上的位置。用 CSS 把某個区块挪到頁面上方,對蜘蛛来说它依然排在後面;反過来,寫在源碼靠前的模块,即使视觉上不起眼,也更容易被先處理。

几種区块位置的抓取体感差异

從訪問日誌里長期观察,大致能看到這样的差別,可以作為參考:

  1. 主導航:出現频率最高,几乎每次抓取都會重新走一遍,是站内最稳定的入口。
  2. 正文内的連結:抓取意愿通常僅次于導航,尤其是有上下文、锚文本描述清楚的連結,更容易被当成有效路径。
  3. 相關推荐與列表翻頁:中等水平,受頁面自身被抓频率的限制,翻到後面几頁的概率明顯下降。
  4. 頁脚、备案與版權連結:被完整走到的概率偏低,很多頁面只走其中一部分。

這不是硬規則,但可以拿来判断“重要連結该放哪儿”。如果几個關键頁面迟迟不被抓,先確認它們是不是只出現在頁脚、折叠层或者需要点击才展開的区域里。

几種可控的引導手段

把關键入口放進導航或面包屑

導航和面包屑几乎出現在每個頁面上,又位于源碼靠前的位置,是让一批頁面被反复走到的省力做法。新上线的栏目頁、聚合頁,優先考虑在這里给一個稳定入口,而不是只靠底部連結。

正文里给出带上下文的锚文本

“点击這里”“更多”這類锚文本,對蜘蛛判断目标頁面主题帮助有限。換成能概括目标内容的短语,既方便讀者,也让這條連結在被抽取时更有意义。同一頁面内,指向同一目标的多條連結尽量合並或统一寫法,减少重复。

列表頁保持稳定的分頁结构

分頁連結使用固定的 URL 規則,並让上一頁、下一頁、頁碼這些連結在源碼中位置稳定。频繁變動分頁路径,會让已经建立的抓取路径需要重新走一遍。

少用纯 JS 点击跳轉

依赖脚本在点击时才生成 URL 的寫法,第一遍抓取往往拿不到目标地址。如果必须這样做,至少在頁面上保留一份可被直接讀取的普通連結,让不执行脚本的抓取也能看到出口。

連結數量與顺序的取舍

一頁塞進几百條連結,蜘蛛不一定每條都走。队列里排不進去的連結,等于没寫。比較稳妥的做法是:把最重要的十几二十條放在靠前、有上下文的区域,其余的分流到列表頁或专题頁,由更专门的頁面去承载長尾。

連結多不等于机會多,抓取队列里排不進去的那部分,實际效果接近不存在。

怎么观察它是否按你预期在走

判断引導是否有效,最直接的方式還是看日誌,重点關注几件事:

  • 新頁面從上线到第一次被抓,間隔了多久;
  • 同一頁面是被導航带進来的,還是由列表頁、正文連結带進来的;
  • 哪些連結長期没有出現在日誌里,它們在源碼中的位置是否有共性;
  • 調整内鏈位置之後的一两周,抓取分布有没有變化。

把這几項做成一個简單的记錄表,比凭感觉判断更可靠。一次只改一個變量,观察一個窗口期,才分得清是哪一處改動起了作用。

整体上,頁面内的連結顺序和位置不决定抓取结果,但它决定了蜘蛛走到某個目标的难易程度。源碼顺序顺一点、锚文本清楚一点、連結數量收一点,長期积累下来,重要頁面的發現速度會更稳定一些。