做站点运营,列表頁和栏目頁常常是最容易被搁置的部分。首頁和詳情頁有人盯着,翻頁那块却往往只求“能点就行”。時間一長問题就出来了:第一頁的内容蜘蛛常来,第二頁往後的文章可能几個月都没有新的訪問记錄。
分頁常见的問题長什么样
- 翻頁按钮绑在 JavaScript 事件上,没有真實的 href,蜘蛛顺不下去;
- “加载更多”通過接口把後續内容拼進頁面,HTML 源碼里找不到任何連結;
- 翻頁參數一會儿 ?page=2,一會儿 ?p=2,一會儿 ?start=20,同一批内容對應好几套地址;
- 翻到很後面全是空列表,頁面依舊返回 200;
- 排序、篩選參數被放開抓取,和翻頁组合出大量低质量頁面。
先让翻頁連結“看得见”
最基础的一條:每一頁的上一頁、下一頁、頁碼,都應该是标准的 a 标簽,带真實的 href,而不是靠 onclick 或者 href="javascript:;" 来跳轉。連結能被鼠标中键新開窗口,能被複製,能被蜘蛛顺着走,這三件事其實是同一件事。
rel="next" 和 rel="prev" 現在已经不是主流搜尋引擎的索引信号,删掉不影响什么,留着也不算错。真正要紧的是連結本身可爬、可解析,而不是這對标簽寫没寫。
“加载更多”和無限滚動怎么办
無限滚動對訪客体驗不错,對抓取却很不友好。比較稳妥的做法是:保留一套传统的分頁地址,比如 /news/?page=3,点“加载更多”的同时用 history.pushState 更新地址栏,让這一頁有獨立可訪問的地址;用戶直接粘這個地址打開时,也能看到對應内容。這样既不打断交互,也不至于把所有後續内容鎖死在接口里。
如果實在不想维護两套,至少保證首屏之後有一段“查看第 N 頁”的普通連結,作為兜底入口。
URL 參數尽量收敛
同一套分頁只保留一種參數寫法,並且全站统一。排序參數、篩選參數如果對訪客價值不大,可以在 robots.txt 中限制抓取,或者用 canonical 指回主列表頁,避免和分頁叠加出成百上千個近似頁面。
一份可以照着做的分頁自查清單
- 随机打開三個栏目,检查第二頁、第三頁的翻頁連結是否為真實 a 标簽,href 是否能直接訪問;
- 確認分頁參數寫法全站一致,没有歷史遗留的多套規則;
- 检查“加载更多”是否有對應的静態可訪問地址;
- 翻到最後一頁之後的一頁,確認是 404 或者跳回第一頁,而不是一片空白加 200 狀態碼;
- 翻一下服務器日誌或抓取日誌,看第二頁以後的地址多久被訪問過一次;
- 確認篩選、排序參數没有和分頁一起放開,形成大量重复頁面。
空尾頁和“死循环”特別容易被忽略
很多 CMS 在頁碼超出范围时會返回一個空列表,狀態碼却是 200,标题和第一頁一模一样。這類頁面一旦被大量抓取,既浪費抓取预算,也容易让搜尋引擎對列表頁的质量产生誤判。能返回 404 就返回 404,做不到就做一個明确的“没有更多内容”提示,並给出返回第一頁的連結。
分頁本身不是内容頁,但它决定了内容頁有没有被看到的机會。翻頁做不好,後面寫的文章就真的只是躺着。
小结
分頁自查不需要改版,也不用動模板结构,多數时候只是把連結改回普通 a 标簽、把參數统一、给“加载更多”补一個可訪問的地址。做完這几件事,再回头看日誌,第二頁之後的地址出現的频率往往會不太一样。