蜘蛛從一個已知 URL 出發,沿着頁面上的連結向外走。它先到哪個頁面、多久回訪一次,很大程度上取决于這個頁面距离入口有多少层連結。這個层數通常被称為点击距离或抓取距离。它不是硬性的規則,但會實實在在影响頁面被發現的先後顺序。
抓取距离是怎么算出来的
最简單的算法:從首頁開始,点几下能到目标頁面。首頁算第 0 层,導航直接指向的栏目算第 1 层,栏目里的列表指向的文章算第 2 层,依次類推。蜘蛛没有站点全貌,它靠連結一层层爬,這個层數就是它理解站点结构的顺序。
實际計算时要注意几点:
- 從已被抓取的任一入口算起都有效,不限于首頁
- JS 渲染後才出現的連結,對蜘蛛来说距离會變長
- 同一個頁面有多條路径时,取最短的那條
层級太深的常见表現
内容层級深,問题往往不是完全抓不到,而是被抓得太晚、太稀疏。
- 新發布的頁面几天甚至更久没有出現在日誌里
- 老内頁更新後,蜘蛛迟迟不回訪,看到的還是舊版本
- 抓取請求大量落在中間层列表頁,真正的内容頁被挤到後面
- 同類頁面之間没有互鏈,只能靠列表頁维持连接,一旦列表改版就断了路径
把抓取预算看成有限的訪問次數,路径越绕,花在中間环节的次數就越多。
把重要頁面的层級压下来
不需要把全站压平,但核心内容應该有几條短路径。
- 主導航和二級分類保持稳定,不要频繁調整位置
- 首頁保留數量克制、指向明确的一級入口
- 正文里的相關文章、上下篇、同主题推荐,是缩短距离最直接的手段
- 面包屑既给向上路径,也可以横向指向同級分類
下拉菜單、悬浮導航、需要点击才展開的模块,如果連結只在交互後才寫入 DOM,蜘蛛看到的距离會比用戶感觉的長。
深层頁面也不能只靠 Sitemap
Sitemap 能提供入口,但它更像一份清單,不负责說明頁面之間的關系和重要性。深层頁面的發現,通常要多種方式叠加:
- 在相關内容的正文里自然鏈出
- 由同主题的聚合頁或标簽頁收拢
- 通過上下篇、系列文章形成鏈式路径
- Sitemap 兜底,避免遗漏
层級不是越平越好
把所有頁面都塞到首頁連結里,首頁連結數量會迅速膨胀,單條連結能分到的關注度反而下降。适度的分层能让同主题頁面彼此靠近,也让蜘蛛在抓一個栏目时顺便覆盖到相關内容。對多數站点来说,核心内容控制在三跳以内可達,是一個現實的目标。
怎么驗證抓取距离
- 按目錄統計日誌里蜘蛛的訪問次數,看深层目錄是否長期偏低
- 记錄新頁面上线到第一次被抓的時間,對比不同层級
- 检查列表頁翻頁、篩選參數是否制造了大量中間层 URL
- 手動從首頁出發点击,看看能不能走到最重要的那几個頁面
抓取距离不是一次性配置,而是随栏目調整、模板改版不断變化的東西。發布新内容时顺手想一想:這個頁面從哪個已有頁面点得到,路径有多長,往往比事後反复提交更有效。