列表頁是站内連結最密集的地方,也是蜘蛛最容易绕圈的地方。分頁、翻頁、加载更多、排序篩選,這些交互在用戶体驗上很常见,但如果没有把地址和入口设計清楚,蜘蛛可能會在几十個相似列表之間反复爬,而真正有價值的詳情頁反而没被及时訪問。這份自查不针對某個具体框架,主要帮你看清列表頁的抓取路径。
先分清分頁的几種形態
不同實現方式,對蜘蛛的含义不一样。先盘点站内列表頁有哪几種:
- 静態路径型:/news/page/2/、/list/2.html,地址固定,最容易理解。
- 參數型:/news?page=2、/list?p=2,參數名和參數值要稳定。
- 按钮加载型:点击加载更多後追加内容,地址可能不變。
- 無限滚動型:滚動自動加载,地址通常不變。
- 篩選排序型:/list?sort=new&page=3,參數组合容易膨胀。
把形態列出来之後,再判断哪些地址應该被抓、哪些只是用戶操作,問题會清楚很多。
分頁地址要可预测、可终止
蜘蛛通常不會点击按钮,它依赖連結。分頁地址最好有規律:上一頁、下一頁、頁碼,都能通過普通連結到達。不要只依赖 JavaScript 事件绑定,否則蜘蛛可能只看到第一頁。
- 翻頁連結使用标准 a 标簽,href 指向真實地址。
- 頁碼递增清晰,不要出現 page=0、page=1、page=1&p=1 並存。
- 最後一頁不要繼續輸出下一頁連結,避免形成死循环。
- 每頁數量保持稳定,突然從 20 條變成 200 條會让地址含义變化。
如果列表頁有 canonical,要指向该頁自身,而不是全部指向第一頁。已有文章专门讲過 canonical,這里只提醒:分頁頁不是重复内容,別用規范标簽把它們合並掉。
加载更多與無限滚動:给蜘蛛留一條普通連結
加载更多和無限滚動對用戶友好,但對抓取不友好。如果内容只在点击或滚動後出現,蜘蛛可能拿不到後續條目。常见做法是保留一個分頁入口,例如查看全部連結到 /list?page=2,或者使用可被抓取的静態分頁作為兜底。
能点击出来的内容,最好也能通過 URL 直接訪問。這一点比纠结用哪種前端框架更重要。
如果确實使用無限滚動,可以在頁面底部放一個查看更多連結,指向普通分頁地址;也可以在 sitemap 中提交列表頁的後續分頁地址,但不要把所有頁碼都塞進去,優先提交有代表性的前几頁。
空结果頁、排序參數和翻頁循环
列表頁常见的浪費抓取场景有三種:
- 空结果頁:篩選條件组合後没有内容,頁面仍返回 200,蜘蛛會繼續抓。建议對無结果頁返回合适的狀態,並给出返回入口。
- 排序參數:按時間、热度、價格排序,同一批内容产生多個地址。可以只保留預設排序可抓,其他排序用 nofollow 或 robots.txt 限制,但要注意不要誤伤正常頁面。
- 翻頁循环:列表底部的上一頁和下一頁互相指向,或者頁碼超出總頁數仍返回内容。检查總頁數計算,超出范围返回 404 或跳到最後一頁。
這些场景不一定影响用戶,但會消耗抓取资源。抓取预算有限时,蜘蛛在列表頁多待一會,詳情頁就可能少抓一個。
一份可执行的自查清單
- 打開列表第一頁,查看源碼里是否有指向第二頁的普通連結。
- 手動把頁碼改成 2、3、最後一頁,看返回内容是否正确,是否出現重复或空白。
- 检查加载更多按钮對應的地址,能否直接複製到新标簽打開。
- 用抓取工具模拟訪問,確認不是只拿到空壳或骨架屏。
- 检查排序和篩選參數,看是否會产生大量無内容地址。
- 查看服務器日誌中列表頁的抓取频率,如果某几個參數被反复抓,考虑收敛。
- 確認分頁頁的标题、描述是否自動带上了頁碼,避免所有頁标题完全一样。
把入口留给詳情頁
列表頁的职责是發現和分發,不是把所有组合都展示给蜘蛛。分頁地址稳定、翻頁有终点、加载更多有普通連結兜底、空结果和排序參數有邊界,蜘蛛的路径就會清楚很多。做完這些自查,再回头看日誌,你可能會發現列表頁的重复抓取少了,詳情頁的發現更顺了。這不是一次就能做完的事,栏目改版、模板調整後都值得重新检查一遍。