做站点运营时,列表頁往往是最容易被忽略的 URL 来源。首頁、栏目頁、詳情頁之間的連結通常有人管,但翻頁連結怎么放、放几個,很多人是随手一设。而蜘蛛的 URL 發現,很大一部分恰恰發生在這些翻頁連結上。
蜘蛛在列表頁里看到的是什么
蜘蛛抓到一個列表頁後,會把 HTML 中出現的連結提取出来,排進待抓取队列。它不會“点击下一頁按钮”,也不會滚動頁面,只是讀服務端返回的 HTML。所以能不能翻到第二頁、第三頁,取决于第一頁的 HTML 里有没有真正指向那些頁面的 a 标簽。
由此可以得出一個很直观的结论:翻頁連結最好是可以直接解析的普通連結,落在 href 里,而不是靠脚本拼接、或包在一個 button 元素上。
几種常见的翻頁寫法
- 數字分頁:1、2、3……再加一個“下一頁”,連結直接可讀,蜘蛛能顺着走,运营侧也容易判断目前在第几頁。
- 只有“下一頁”:能线性推進,但需要一层层爬,翻到第 20 頁的成本並不低。
- “查看全部”頁面:把整列表铺在一個長頁面上。優点是連結集中,一次抓取能發現更多 URL;缺点是頁面体积大、响應慢,容易拉長單次抓取時間。
- 無限滚動或“加载更多”:如果新内容全靠脚本追加,又没有對應的可抓取地址,那么第二屏之後的内容對蜘蛛来说基本不存在。
抓取深度本身是有限度的
蜘蛛不會無休止地翻頁。翻頁越深,連結在队列里的優先級通常越低,被安排到後面的可能性越大。一個列表有 500 頁,真正被稳定抓取的往往只是前面若干頁。這不是惩罚,只是抓取资源在不同 URL 之間的自然分配。
所以與其纠结“蜘蛛為什么没翻到第 300 頁”,不如先想想這批 URL 值不值得被翻到那里。如果第 300 頁之後是大量低差异内容,没被翻到未必是坏事。
几個容易踩的坑
- 用 nofollow 挡翻頁連結。它挡住的通常只是連結的传递属性,而 URL 是否被發現、是否進入抓取队列,並不完全同步,结果是没省下多少抓取,反而让新内容發現變慢。
- 翻頁地址用同一批參數来回變,比如 sort、view、page 混着用,产出大量内容几乎相同的 URL。
- 翻頁連結指向的頁面返回 200,但實际是空列表或重复列表,蜘蛛反复来、反复拿不到新東西。
- 把翻頁做成纯脚本路由,地址變了,服務端返回的 HTML 里却没有對應連結。
可以落地的几件事
- 保證每頁都有指向下一頁的普通 a 标簽,翻頁連結不要藏在脚本里。
- 列表頁给出足够但不過量的翻頁入口,數字分頁配合“下一頁”通常就够用。
- 内容量不大时,可以考虑“查看全部”来减少层級;内容量很大时,反而要控制它的范围。
- 给翻頁 URL 一個稳定的形式,避免同一批内容出現多個地址。
- 定期看抓取日誌中翻頁 URL 的抓取比例,判断翻頁路径是否真的被走到。
翻頁連結只是 URL 發現鏈條中的一环。它不需要多复杂的设計,只要連結真實存在于 HTML 中、地址足够稳定、數量不要失控,就已经比大多數站点做得更好。
小结
列表頁的翻頁連結是很實在的一個入口。蜘蛛最终翻到第几頁,更多是抓取资源分配的结果,不必强求。运营侧能做的,是把連結寫清楚、把地址收干净、把低價值頁面控制住,剩下的交给時間。