列表頁翻到第几頁,往往决定了長尾内容能不能被看见。分頁看起来只是“上一頁、下一頁”两個按钮,真正做起来却容易變成两套逻辑:用戶看到的是下拉加载和無限滚動,爬虫拿到的只有一個空壳;或者翻頁入口全靠脚本在点击时才生成,HTML 里找不到任何可以跟随的地址。
分頁常见的几個坑
- 翻頁連結寫在按钮的点击事件里,頁面源碼中没有任何可点击的連結。
- 分頁參數不统一,page、p、start、offset 混着用,同一批内容出現好几套入口地址。
- “加载更多”把後續内容注入目前頁,但地址栏始终停在第 1 頁。
- 翻到最後一頁之後還能繼續翻,返回空列表却仍然是 200 狀態碼。
- 所有分頁頁面的标题和描述與第一頁完全相同。
自查可以從這几步開始
1. 關掉脚本再看一遍
用禁用脚本的方式打開列表頁,看看能不能顺着連結走到第 2 頁、第 3 頁。如果關掉脚本之後翻頁入口全部消失,說明分頁對爬虫来说等于不存在。做法通常是给“下一頁”保留一個真實的連結,脚本只负责增强体驗,不负责提供唯一入口。
2. 确定一套分頁參數
同一套列表只用一種參數格式,路径式分頁或查询參數式分頁都可以,關键是別混用。混用之後,同一批内容會被拆成多套地址,爬虫要在里面做取舍,你也很难判断哪些入口该留、哪些该收。
3. “加载更多”要有可抓取的备選
無限滚動和“加载更多”對浏览体驗友好,但如果後續内容只能通過点击加载,且地址從不變化,那這些内容就只能依赖第一頁的連結被發現。常见做法是保留真實的分頁地址作為兜底,滚動加载只当作前端增强。
4. 想清楚分頁頁要不要收錄
分頁頁通常不是用戶搜尋的终点,但也不是必须屏蔽的内容。可以让它們被正常抓取、正常返回 200,同时把标题寫成“栏目名 + 第 N 頁”這種能区分的形式,避免所有分頁共用一套标题。至于 rel=prev/next 這類分頁提示标记,主流搜尋引擎已经不再把它当作索引信号,寫不寫影响有限,別指望靠它解决重复内容問题。
5. 末頁要收口
最後一頁不要再给出“下一頁”的連結,避免形成無限翻頁。翻過末尾之後返回空列表的地址,最好是明确报错或跳回第一頁,而不是稳稳地返回 200 的空頁面。空頁面能返回 200,蜘蛛就有理由繼續跟着參數一路翻下去。
6. 分頁要和站点地图、内鏈配合
分頁頁一般不需要進 XML 站点地图,但列表頁本身要能被導航或栏目内鏈找到。如果第 2 頁之後的内容只能靠“下一頁”鏈條到達,一旦中間某頁出問题,後面几頁就可能長期得不到抓取。
一個简單的检查顺序
- 禁用脚本,看能否從第 1 頁走到第 3 頁。
- 查看翻頁連結的實际地址,確認參數格式统一。
- 检查第 2 頁及之後的标题、描述是否與第一頁重复。
- 翻到末頁,確認不再輸出“下一頁”,空结果不返回 200。
- 在服務器日誌里看分頁地址的抓取情况,是否只在第一頁打轉。
分頁做得好不好,标准其實很朴素:用戶能顺畅翻,爬虫也能顺着連結翻。两邊都不丢,才算把列表頁的入口和出口都留住了。
如果站点規模不大,分頁問题通常不會立刻顯現;等到栏目内容积累到几百上千條,第一頁之外的頁面能不能被稳定發現,才會真正影响長尾内容的曝光。與其等抓取異常了再回头查,不如在栏目上线时就把翻頁入口、參數格式和末頁處理一次性定好。