分頁是一條连續的抓取路径
列表頁翻頁时,蜘蛛面對的不是一個孤立地址,而是一串按顺序排列的 URL。這條路径和普通内鏈不太一样:頁與頁之間是强顺序關系,蜘蛛很容易顺着“下一頁”一路走到底,而不是像在導航里那样四處散開。
理解這一点之後,很多現象就好解释了:為什么某一類列表頁被抓了几百次,而同一個站里手工寫的詳情頁却迟迟不见動静。
蜘蛛通常從哪一頁進入
多數情况下,蜘蛛是從第一頁進入的,因為第一頁最容易被首頁、频道頁或 Sitemap 指向。但也不绝對:外部連結、歷史快照、站内搜尋留下的地址,都可能把蜘蛛直接送到第 7 頁或第 30 頁。
從中間頁進入时,蜘蛛拿到的上下文比較少。它只能看到這一頁的上一頁、下一頁和若干頁碼,需要自己往前补或者往後走。如果分頁入口只有“下一頁”而没有“上一頁”(比如完全靠 JS 渲染),蜘蛛很容易只朝一個方向走。
頁碼連結、“下一頁”和“加载更多”的差別
- 可点击的頁碼連結:蜘蛛一眼能看到全部頁面的地址,知道這條序列大概多長,安排抓取时更有余地。代價是頁數多的时候,一頁上會挂出几十個連結。
- 只有“下一頁”:序列是鏈式的,蜘蛛得一頁一頁往前推。走得通,但越深回头再抓的概率越低。
- 無限滚動與“加载更多”:内容靠 JS 追加时,蜘蛛在首屏能拿到的連結可能只有前几條。除非有可爬取的分頁地址兜底,否則後面的内容基本只能靠 Sitemap 單獨递過去。
分頁地址怎么设計更省事
?page=2 和 /page/2/ 都能被抓,区別主要在可讀性和規范化。更關键的是同一批内容別出現多種分頁地址:带排序、带篩選、带會话參數的版本如果都能打開,蜘蛛會看到一堆内容近似的序列,抓取量就花在重复頁面上了。
常见做法是固定一個預設排序地址,排序和篩選參數用 canonical 指回預設頁,或者用 robots meta 让參數頁不參與索引。這里要留意:是不索引,不是不抓取。蜘蛛仍需要讀這些頁面,才能顺着往下發現新内容。
什么时候该限制分頁深度
分頁挖得太深,收益通常递减:第 40 頁之後的内容,用戶很少点,蜘蛛也很少回来。如果這類頁面數量很大,會明顯挤占整個站点的抓取次數。
可以考虑把深分頁的連結改成不跟随、但地址仍可訪問;或者把内容按時間、分類、标簽切成更细的入口,让深层内容從更浅的路径被到達。前提是這些入口自己也要能被發現,否則只是把問题從分頁挪成了新的孤岛。
服務器端要注意的地方
分頁請求往往集中在同一個動態接口上,蜘蛛连續翻頁时會产生一串間隔很短的請求。如果這個接口本身慢,蜘蛛的等待時間就會被拉長,後續抓取节奏也跟着變慢。给分頁接口加缓存、避免全表掃描,通常比事後改 robots 更直接。
另外,翻到最後一頁怎么處理也值得想清楚:返回 404 會留下一條错誤记錄,返回一個空列表頁並保留 200 又容易形成大量内容重复的空頁。相對稳妥的是给出明确的“没有更多”頁面,让它和前面几頁有区分,同时不再往下挂分頁連結。
小结
分頁本身不难,难点是這條序列有多長、蜘蛛從哪進来、走到深處之後還有没有別的路可走。把分頁地址收敛成一套、让關键内容從更浅的层級也能到達,通常比纠结用哪種 URL 形式更有用。