列表頁往往是一個站点里 URL 發現能力最强的地方。詳情頁再多,如果蜘蛛進不来,等于不存在;而蜘蛛進入詳情頁的主要通道,通常就是那些按顺序排列的列表與分頁。翻頁方式设計得合不合理,直接决定了蜘蛛能走多深、能發現多少條 URL。
传统數字分頁:對蜘蛛最友好的一種结构
形如 /list/page/2/ 或 /list?page=2 的分頁連結,是蜘蛛最容易處理的形式:它是一個真實的 a 标簽,href 指向一個獨立 URL,点進去就是一個新頁面。蜘蛛顺着 1、2、3 一路爬下去,每翻一頁就多拿到一批詳情頁地址。
- 每個分頁 URL 獨立可訪問,不要用 JS 点击事件代替連結。
- 頁碼連結出現在 HTML 源碼里,而不是等 JS 执行之後再插入。
- 保留“下一頁”連結的同时,也保留一段连續的數字頁碼,避免蜘蛛只能靠猜。
瀑布流與“加载更多”:蜘蛛可能只看到第一屏
無限滚動和“加载更多”按钮對用戶友好,但對抓取路径不友好。如果新增内容是在用戶滚動或点击之後由 JS 請求接口才渲染出来的,蜘蛛在 HTML 里往往只能看到最開始的十几條。按钮本身如果是 button 或 div,没有 href,蜘蛛也没有理由去“点”它。
常见的补救方式有三種:
- 在頁面底部放一條真實的分頁連結,指向带參數的下一頁 URL,让不执行 JS 的抓取也能繼續走。
- 让“加载更多”對應的接口地址在 HTML 中以連結形式出現,例如带 page 參數的静態入口。
- 用 Sitemap 分片把深层列表 URL 直接交给蜘蛛,作為路径之外的补充。
分頁參數本身也要能被抓
可抓取性還取决于分頁地址長什么样。带多個篩選參數的地址容易产生大量组合,蜘蛛會在這類頁面上消耗掉不少抓取预算,却拿不到多少新 URL。相對稳妥的做法是:
- 排序參數、會话參數尽量別混進分頁連結里,保持地址可预测。
- 分頁頁面的 canonical 指向自身,不要统一指向第一頁,否則分頁 URL 容易被判定為重复而减少被抓的机會。
- 篩選结果頁超過一定组合量时,用 robots.txt 或 nofollow 收口,把路径留给真正需要被發現的頁面。
让蜘蛛有一條走到底的路
列表很長时,蜘蛛通常不會一路翻到最後一頁,越靠後的分頁被抓的频率越低。想让深层内容仍有机會被發現,可以搭配几種手段:
- 時間归档頁:按月份或分類归档,给老内容一個稳定的入口。
- Sitemap 分片:把深层詳情頁寫進單獨的 Sitemap 文件,用索引文件串起来。
- 相關推荐與内鏈:在詳情頁之間横向互鏈,让蜘蛛從任意一條被爬到的 URL 繼續扩散。
判断路径是否通畅,不要只看頁面在浏览器里能不能翻,而要看源碼里有没有可抓取的 href。浏览器的滚動和点击,不會自動變成蜘蛛的抓取路径。
用日誌驗證,而不是靠猜
想知道分頁到底被走到第几层,最直接的办法是翻服務器日誌:筛出列表頁和分頁 URL,看它們的抓取频次怎么随頁碼衰减。如果第 2、3 頁都很少被抓,後面的詳情頁自然發現得慢。這时優先調整分頁連結的可抓取性和 Sitemap 覆盖,而不是盲目增加内容量。