搜尋抓取

列表頁分頁與蜘蛛抓取:翻頁連結该保留多少层

列表頁是站点里 URL 最密集的区域,翻頁連結既帮蜘蛛發現新頁面,也可能消耗大量抓取预算。本文讲清带頁碼連結、加载更多、查看全部三種形態的差別,给出折叠深层頁碼、收敛排序參數、設定 canonical 與調整内鏈位置的具体做法,並說明如何用日誌判断翻頁是否抓取過头。

搜尋抓取

列表頁分頁與蜘蛛抓取:翻頁連結该保留多少层

列表頁往往是站点里 URL 最密集的地方。一個栏目下有几百條内容,按每頁 20 條排下去就是十几個甚至几十個翻頁 URL。蜘蛛顺着這些連結走,既能發現新頁面,也可能把抓取額度大量花在同一批内容的第 N 種排序方式上。分頁本身没有問题,關键在于翻到多深、以什么形式翻。

翻頁連結的三種常见形態

带頁碼的連結(/list?page=3 或 /list/page/3)是最容易被蜘蛛跟踪的形式,連結就在 HTML 里,不依赖脚本执行。如果連結是标簽,蜘蛛會正常入队;如果是纯 JS 按钮或点击後才注入的 DOM,蜘蛛通常点不動,這條路径對它等于不存在。

“查看全部”或“每頁顯示 200 條”這類入口,會让同一批内容以另一種 URL 形態出現,容易和分頁頁互相竞争,出現多個頁面指向同一批内容的情况。它的好處是减少层級,代價是重复度上升,需要用 canonical 或内鏈策略加以约束。

蜘蛛為什么容易在分頁里越走越深

  • 翻頁連結大多位于列表底部,属于典型的鏈式结构:第 1 頁鏈到第 2 頁,第 2 頁鏈到第 3 頁,深度线性增長。
  • 每頁 20 條連結乘以 30 頁,一個列表頁就能贡献几百個 URL 出口,其中相当一部分是重复内容。
  • 当站点還有更重要的新頁面等着被抓时,這些翻頁 URL 會挤占队列,拖慢真正需要更新的頁面。

几個收敛分頁抓取的做法

  1. 只让前若干頁可点。例如前 5 頁保留普通連結,第 6 頁之後折叠起来,用戶需要操作才展開。蜘蛛仍有路径到達較深頁碼,但不會一上来就全部铺開。
  2. 不要用 noindex 来處理分頁,除非确定不需要這些頁出現在结果里。noindex 並不阻止抓取,蜘蛛照样會顺着連結翻下去,只是不放進索引,抓取額度该花還是花了。
  3. 分頁頁面建议 canonical 指向自身,而不是全部指向第一頁。把第 2、3 頁硬合並到第一頁,用戶搜到的長尾内容會失去入口。
  4. 排序參數(?sort=price、?order=desc)尽量收敛,只让預設排序的連結可被跟踪,其余交给篩選表單處理。
  5. 確認超出范围的頁碼不會返回 200 加空内容。列表為空时给一個合理的提示頁或直接 404,避免蜘蛛把空壳頁面当成有效 URL 收進队列。
  6. 重要的列表頁可以考虑放進站点地图,作為翻頁連結之外的补充入口,但不必把每一頁翻頁都提交一遍。

内鏈位置也在影响蜘蛛的選擇

導航栏里如果直接鏈到某個热门的二級列表,蜘蛛會更早、更频繁地回到這個列表頁。正文里出現的一條内鏈,通常比頁脚批量輸出的連結更容易被優先跟踪。所以在頁脚堆几十條分類翻頁連結,效果往往不如在正文里自然地引一條相關列表。多個入口指向同一個列表頁时,也可以顺便观察日誌里哪條路径更常被走到。

服務器與抓取节奏

分頁带来的請求量是實打實的。一個 30 頁的列表被频繁抓取,意味着同一路径下會连續产生几十次請求。如果此时响應偏慢,蜘蛛的並發會降下来,整体抓取速度随之變慢;若出現 5xx 或超时,队列里的其他 URL 也會被一起推迟。列表頁大多是動態查询,做好缓存、给分頁請求設定合理的超时與限速,往往比事後調整連結结构更有效。

怎么判断翻頁抓取走過头了

看日誌里带 page 參數的 URL 占比、抓取频次和响應狀態,再看這些抓取有没有带来新 URL 的發現。如果第 10 頁之後被频繁訪問,對應内容早已收錄、也没有新增頁面,說明這段路径的收益有限,可以考虑折叠連結或减少暴露。反過来,如果某個深层頁碼确實带来了大量新 URL 的首次發現,就不必急着砍掉。

分頁不是越少越好,也不是越多越好。核心是让蜘蛛在前几层就能拿到足够多的有效 URL 出口,至于第 N 頁之後的翻頁連結,交给用戶点击即可。