蜘蛛抓取一個站点,起点通常是首頁或少數几個被外鏈指向的 URL,然後沿着頁面上可抓取的連結一层一层往下走。所以一個詳情頁“离入口几步能点到”,會直接影响它被發現的時間,也會影响它之後的回訪频率。這個层級,通常叫連結深度。
連結深度是怎么算的
連結深度指的是從站点入口到某個 URL,需要经過的最少点击层數。首頁本身算第 1 层,導航里直接列出的栏目頁是第 2 层,栏目列表里排在前面的詳情頁是第 3 层。如果某個頁面只能從第 5 頁的分頁列表進入,那它的深度就是 5 层左右。
蜘蛛没有“站点地图式”的全知视角,它靠連結走。深度越深,意味着它需要先抓取並解析更多中間頁面,才能轮到這個 URL。
深度過深时,通常會看到哪些現象
- 發現變慢:新發布的詳情頁提交後迟迟没被訪問,日誌里只有栏目頁和分頁被抓。
- 回訪减少:老頁面更新後,蜘蛛很久不来一次,抓取間隔明顯比對浅层頁面長。
- 抓取预算被中間层消耗:大量抓取次數花在分頁、篩選和聚合頁上,真正的内容頁反而分不到。
- 抓取路径高度依赖單一入口:日誌里几乎所有詳情頁都從同一個栏目進来,一旦這個栏目改版,整片頁面就断了入口。
這些現象並不等于“頁面有問题”,更多时候是路径设計的問题。
先自查:某個 URL 到底藏得多深
在動手改之前,先弄清楚現状,比凭感觉調整更有意义。
- 拿十到二十個有代表性的 URL(新内容、老内容、冷门内容各挑几個),從首頁開始只用鼠标点击,记錄到目标頁需要几步。
- 用抓取類工具從首頁模拟爬行,限制最大深度,看哪些頁面在设定的层數内没有被訪問到。
- 翻一段時間的服務器日誌,观察蜘蛛進入某個詳情頁时,前一個訪問的 URL 是什么,是不是每次都要從栏目翻到很後面的分頁。
- 對比同類頁面的抓取频次,看深度差异是否和抓取間隔有明顯關联。
几種常见的“人為加深”寫法
- 列表頁預設只展示前若干條,其余靠“加载更多”按钮,而這個按钮的連結不可抓取。
- 分頁只提供“下一頁”,没有跳轉到指定頁的普通連結,也没有可稳定訪問的頁碼 URL。
- “相關内容”“猜你喜欢”等模块统一指向栏目首頁或文章列表,而不是具体文章。
- 标簽、专题只做一級,二級内容藏在多重條件组合的篩選结果里,没有固定入口。
- 導航和栏目連結由 JavaScript 事件绑定,href 為空或是“#”,蜘蛛拿不到可跟随的地址。
- 把一批内容放在需要選擇地区、語言或登入之後才能看到的頁面里。
把层級压回来的几個做法
让連結稳定可抓
凡是希望被發現的頁面,尽量给出普通的 a 标簽連結,让地址直接寫在 href 里。加载更多、下拉菜單這類交互组件,可以保留原有体驗,同时补一份可抓取的静態入口。
给分頁和聚合頁留固定 URL
分頁頁碼、标簽頁、专题頁如果能各自拥有稳定地址,並且互相之間形成正常的連結關系,蜘蛛就有更多條路走到深层内容。不必把每一頁都放到導航里,但至少不要让深层頁面只有“翻到第 8 頁”這一個入口。
在正文頁做相關性内鏈
正文頁之間的横向連結,是缩短深度比較自然的方式。指向同主题、同系列、前後篇的具体文章,比指向栏目首頁更有價值,也更容易被蜘蛛顺着走。
把重要入口放在稳定位置
核心栏目、热门专题、站点地图頁,放在導航或頁脚這類全站可见的位置,相当于给它們一個固定的浅层入口。
Sitemap 是补充,不是替代
Sitemap 能帮助蜘蛛知道有哪些 URL 存在,但它替代不了层級结构。只提交 Sitemap、内鏈却层层包裹,抓取效果往往會打折扣;两者配合,同时保證服務器响應稳定,URL 被發現和回訪的节奏才會更可预期。
連結深度不是越浅越好,而是在保證頁面可讀性的前提下,別让重要内容被埋在三层以上,也別為了扁平把几百個連結堆在首頁。
整理路径這件事没有一劳永逸的答案。站点结构、内容量、更新频率都會變,比較務實的做法是定期抽查一批 URL 的点击深度,结合抓取日誌看看蜘蛛實际走的路线,再针對最明顯的那一两個卡点做調整。