列表頁和分頁是站点里數量最容易被低估的一類地址。一個分類下几十條内容,配上每頁 10 條的分頁,就是几十個 URL;如果再加上排序、時間篩選、每頁條數這些參數,地址數量會迅速膨胀。這些頁面本身有訪問價值,但如果没有邊界,蜘蛛很容易把抓取预算耗在永遠翻不到头的列表里。
先數清楚:分頁到底有多少個地址
動手治理之前,先在服務器日誌里做一次統計,看看蜘蛛實际抓了哪些列表頁和分頁地址,各自被抓了多少次,返回狀態是什么。很多問题不是猜出来的,是數出来的。
- 統計每個栏目的分頁總深度,超過 30 頁的分頁要重点看。
- 看分頁 URL 是否带參數,參數顺序是否稳定。
- 看是否有頁面返回 200 但内容為空,或者内容與上一頁大量重复。
- 看蜘蛛是否在深层分頁上反复抓取,却很少訪問内容頁。
分頁 URL 的寫法要统一
路径式
形如 /column/page/2/ 的寫法,结构清晰,便于在日誌中归類和統計,也方便後續做規則匹配。缺点是每一頁都是一個獨立路径,數量會线性增長。
參數式
形如 /column?page=2 的寫法改版成本低,但要保證參數顺序、大小寫、是否带其他篩選參數都稳定。同一個頁面出現多種拼寫方式,等于凭空造出一批重复地址。
不管用哪種寫法,同一個分頁只應有一個規范地址,頁面上其他形式的入口都指向它,避免同一頁出現多個版本。
让蜘蛛翻得動,但別让它翻不到头
分頁連結必须是 HTML 里可以直接抓到的 a 标簽。很多站点用“加载更多”按钮配合脚本請求資料,视觉上没問题,但蜘蛛顺着連結爬的路径就断了。如果确實要做异步加载,至少在頁面上保留可点击的传统分頁連結。
對于深度很大的分頁,常见做法是保留前若干頁的抓取入口,更深的分頁不再主動暴露連結,同时在 robots.txt 或頁面 meta 层面做相應處理。需要提醒的是,被 robots.txt 阻止抓取的地址仍可能因為外鏈等原因出現在索引里,所以更稳妥的方式是让這些深层分頁不再被連結到,或者内容确實不值得留存时直接做减頁處理。
空分頁和越界參數要有明确交代
參數被随意改動後,常常出現 ?page=999 這種没有内容的地址。如果它返回 200 加一句“暂無内容”,就會被当成正常頁面;比較合适的處理是返回 404,或者重定向回该栏目的第一頁或最後一頁,並保持狀態碼语义正确。
另外,篩選參數與分頁參數叠加时,尽量让组合數量可控。比如只允许篩選條件在首頁生效,進入第二頁即回到無篩選狀態,避免出現几百種參數组合。
列表頁自身也要有内容
列表頁不只是标题的堆叠。给栏目加一段简短的介绍、說明收錄范围或更新频率,能让頁面有獨立的信息增量。列表頁的标题和描述也值得單獨设計,避免所有分頁共用同一套模板文字,造成大量近似頁面。
一份可以照着做的检查清單
- 從日誌中導出列表頁與分頁的抓取记錄,标注狀態碼與抓取频次。
- 確認分頁連結在 HTML 中可抓取,不依赖脚本注入。
- 统一分頁 URL 形式,多余寫法做 301 或收敛入口。
- 為越界分頁、空结果頁设定明确的狀態碼與跳轉規則。
- 限制篩選參數與分頁參數的组合方式,给出數量上限。
- 為深层分頁设定邊界,超過阈值的頁面不再主動暴露連結。
- 给栏目頁补一段獨立說明文字,检查标题描述模板是否雷同。
- 調整後隔一到两周再看一次日誌,確認抓取分布是否變化。
分頁治理的目标不是把頁面删到最少,而是让每一個保留下来的列表地址都有清楚的位置、明确的狀態和可预期的抓取成本。
做完這些,通常不會立刻看到什么戏剧性的變化,但日誌里深层分頁的抓取次數會慢慢下降,内容頁被訪問的比例會逐步回升。這本身就是站点结构在往健康方向走的信号。