列表頁往往是蜘蛛進入站点後停留最久的地方:它從首頁走到栏目頁,再顺着翻頁一层层往下翻。翻頁和篩選參數怎么设計,直接决定了蜘蛛能走多深、會不會在參數组合里绕圈,也决定了它能不能顺路把詳情頁带走。
翻頁的三種寫法,蜘蛛看到的路径不一样
常见的分頁實現有三種:服務端渲染的 a 連結、JS 渲染的翻頁按钮、無限滚動。對蜘蛛来说,這三種的可走性差別很大。
- a 連結翻頁:最稳。每一頁都有獨立 URL,蜘蛛可以逐個跟進,也方便在日誌里核對。
- JS 按钮翻頁:如果按钮只改寫前端狀態而不改變 URL,蜘蛛基本走不到下一頁;即便改了 URL,也要看渲染後連結是否真的出現在 DOM 里。
- 無限滚動:通常只渲染前几屏,後面的内容没有 URL 入口,蜘蛛只能看到第一屏。
如果站点是後两種實現,至少给分頁补一套可抓取的 a 連結兜底,比如把翻頁按钮做成真實連結,或者在頁面底部放一组頁碼連結。
rel=next/prev 現在還值不值得加
搜尋引擎已经不再把它当作索引信号,但它仍然是一種清晰的路径声明,對内部工具和日誌排查有帮助。加不加都不直接影响抓取本身,真正起作用的是連結是否可点、可解析。
篩選參數:岔路口最容易變成迷宫
排序、篩選、每頁條數、會话标识,這些參數叠在一起,理论上能生成成百上千個 URL。蜘蛛一旦開始尝试组合,抓取预算就會被大量消耗在没有新内容的頁面上。
處理思路一般是收敛而不是全堵:
- 把排序、每頁條數這類不改變内容集合的參數,统一 301 或 canonical 到一個規范 URL。
- 會话 ID、来源追踪參數尽量不進入連結,或者用 robots.txt 屏蔽對應模式。
- 保留少量真正有搜尋需求的篩選组合,比如品牌、價格区間,让它們成為可抓取的入口頁。
判断哪些该留,可以看日誌:被抓得多、又确實有外部点击進来的參數頁,說明它有存在價值;只有蜘蛛在抓、几乎没人訪問的,多半是浪費。
让列表頁把詳情頁带出去
蜘蛛走列表頁的最终目的是發現詳情頁。這里有几個容易出問题的细节:
- 詳情連結用 a 标簽直接寫 href,不要用 onclick 或 data-href 這類渲染後才生成的形式。
- 避免卡片懒加载:連結要随首屏 HTML 一起出現。图片可以懒加载,連結不行。
- 分頁深度別太深。重要的詳情頁尽量出現在前几頁,或者通過栏目、标簽、专题頁做横向入口,减少對深层翻頁的依赖。
抓取顺序不等于價值顺序
蜘蛛會按連結位置和站点结构决定優先級,列表里靠前的連結更容易被先抓,但這不是硬性排序,也不代表會收錄。把重要的内容放在稳定的入口位置,比指望蜘蛛翻到第 50 頁更實际。
用日誌核對翻頁是否被走通
發布或改版之後,可以按下面的顺序核對一遍:
- 在訪問日誌里筛出分頁 URL,看是否只有第一頁反复被抓,後續頁几乎没有记錄。
- 检查分頁 URL 是否返回 200,有没有因為參數過長或超时出現 5xx。
- 看詳情頁的抓取量是否随翻頁推進而增長。如果長期只有從第一頁進来的連結被抓,說明路径断了。
- 對比改版前後的抓取分布,確認參數收敛之後,抓取是否轉向了更有價值的頁面。
翻頁和篩選參數本身不是問题,問题是让蜘蛛走進一個没有尽头的组合空間。把參數收敛、把翻頁做成真實連結、把詳情連結放在首屏,這三件事做完,列表頁的抓取路径基本就顺了。