蜘蛛在站内走路径,靠的是頁面上一個個連結。連結有限,抓取就有限;連結可以無限组合出来,抓取就可能變成一场没有终点的旅行。篩選、排序、站内搜尋這三類頁面,恰恰最容易生成無限组合。
抓取路径為什么會被“放長”
正常的栏目頁,一個列表翻到底也就几十頁。可一旦列表上叠加了篩選條件,地址就會按组合數增長:颜色 × 尺碼 × 價格区間 × 排序方式,任意两項相乘就是成百上千個地址。蜘蛛不會判断“這個组合有没有人搜”,它只看到連結就跟着走。
结果是抓取額度被一堆内容几乎相同的頁面吃掉,真正需要更新的文章或商品反而排到了後面。
三種常见的無限空間
篩選與排序連結
把篩選項做成可点击的 a 标簽,蜘蛛就會顺着点下去。两個篩選维度還能接受,四個以上基本等于開了一個無底洞。
站内搜尋结果頁
搜尋框提交後的结果頁,如果參數可拼,蜘蛛只要找到一個入口,就能造出無數個地址。這類頁面對用戶有用,對蜘蛛通常只是重复内容。
日歷與归档
按日期归档的頁面,如果允许無限翻下去,也會形成一條很長的抓取鏈。归档本身有價值,但不需要让蜘蛛翻到很多年前的第几十頁。
路径長度與連結位置
除了無限组合,路径過深也會让 URL 發現變慢。首頁到詳情頁最好控制在三到四次点击以内,導航、面包屑、相關推荐各承担一段。連結放在頁面主体里的,通常比藏在頁脚或折叠区里的更容易被走到。
列表頁還要给蜘蛛明确的下一頁入口,而不是只做無限滚動。無限滚動對用戶友好,但蜘蛛看不到滚動之後的内容,需要額外提供可抓取的分頁連結。
把路径收住的几種做法
- 關掉連結,而不是只關掉頁面:篩選項可以用表單或按钮實現,不产生可抓取的 a 标簽,蜘蛛就不會沿着走。
- robots.txt 兜底:把明确的參數模式屏蔽掉;注意被屏蔽的地址如果同时是重要頁面,要單獨放行。
- canonical 指向主版本:让篩選结果頁指向對應的主列表頁,减少重复地址带来的干扰。
- 保留有限的關键组合:确實有人使用的篩選组合,做成静態地址並加入内鏈,其余不留入口。
- 给列表頁稳定的入口:栏目頁、Sitemap、面包屑保持稳定,蜘蛛有固定路线,就不必靠翻组合去找新内容。
怎么判断有没有绕圈
看服務器日誌里被抓的地址:如果带參數的 URL 占比很高,而且這些地址的返回内容大同小异,就說明蜘蛛在無限空間里消耗額度。另一個信号是抓取次數涨了,但出現的新 URL 没怎么變。
抓取路径不是越短越好,而是要有邊界。有邊界的站点,蜘蛛每次来的路线稳定,新内容也更容易被發現。
小结
篩選、排序和站内搜尋本身不是問题,問题是它們能不能被無限拼出来。把可抓取的連結數量控制在有限集合里,让内鏈和 Sitemap 指向真正需要被抓的入口,蜘蛛的抓取路径就會變得可预期,額度也花在更值得的頁面上。