列表頁承担了大部分 URL 發現
對内容型站点来说,除了首頁,蜘蛛發現新 URL 最集中的地方就是列表頁和分類頁。詳情頁之間往往互不相连,或者只连向少數相關頁面,真正把全站串起来的還是列表頁。所以列表頁的翻頁结构,直接决定了蜘蛛能走多深、多久能把新内容走一遍。
三種常见翻頁寫法,蜘蛛看到的差別很大
數字頁碼連結
形如 /list?page=2 或 /list/2 的連結排成一排时,蜘蛛可以從任意一頁跳到前後几頁,路径短,覆盖也稳定。需要注意的只是頁碼條別太長,一屏塞進几十個連結會摊薄站内連結的指向,但對抓取本身通常不是問题。
只有上一頁、下一頁
這種结构對用戶友好,對蜘蛛来说却是一條鏈:要先抓到第 2 頁,才能拿到第 3 頁,再拿到第 4 頁。鏈路越長,末端頁碼被抓到的机會越小。想让它走到後面,可以在前几頁里给出跳到靠後頁碼的入口,或者用 Sitemap 补一份分頁 URL 清單作為辅助。
加载更多與無限滚動
如果翻頁靠按钮点击、靠 JS 拼接下一批資料,而 HTML 里没有對應的普通連結,蜘蛛通常点不到。比較稳妥的做法是给每一批内容配一個真實可訪問的 URL,並在頁面里放上 a 标簽,让用戶和蜘蛛都能沿着連結走過去,而不是只依赖脚本触發。
別让分頁掉進循环
有些站点给翻頁叠加了時間戳、會话參數或排序參數,同一批内容會生成大量不同 URL,蜘蛛越走越多,抓取額度被消耗在重复頁面上。可以往几個方向收敛:
- 保持分頁 URL 參數的名稱、數量和顺序稳定,不要每翻一頁就多出新參數;
- 给分頁设一個合理的頁碼上限,更早的内容用归档頁或按時間切分承接;
- 列表内容没變时,同一頁的 URL 保持稳定,避免每次刷新都生成新地址。
canonical 別把分頁统一指向第一頁
一個常见的誤操作是,把第 2 頁到第 N 頁的 canonical 全部指向第 1 頁。這样蜘蛛會判断後面几頁属于重复内容,减少繼續深入,頁面上獨有的那批詳情頁連結也就失去了被發現的机會。分頁頁面一般把 canonical 指向自身;如果确實想表達這是同一列表的延續,也要留意別把後續頁面變成没有抓取入口的死角。
怎么確認蜘蛛真的翻到了後面
去看服務器日誌里列表頁的請求分布:如果第 2 頁有請求,第 5 頁之後几乎為零,問题多半出在連結结构或鏈路太長,而不是蜘蛛不愿意来。也可以對照抓取統計中各類頁面的占比,列表頁長期接近于零,說明入口没有被有效暴露出去。
几点落地建议
- 在列表頁给出跳到較後頁碼的入口,减少纯鏈式翻頁带来的深度;
- 翻頁用可抓取的 a 标簽,加载更多同时保留普通連結;
- 限制分頁參數组合,避免同一批内容产生大量變体 URL;
- 列表里的詳情連結數量保持合理,把抓取引導到更重要、更新的内容上;
- 新内容上线时让它出現在靠前頁碼或置顶位置,比等蜘蛛慢慢翻到後面更可控。
翻頁结构的作用不是把蜘蛛留在列表頁,而是把该被發現的詳情頁尽快交出去。