很多站点内容本身不算多,但搜尋蜘蛛每天訪問的 URL 數量却很夸張。排查下来,問题往往出在列表頁:一個栏目頁加上排序、篩選、分頁之後,可以组合出成百上千個地址,而其中大部分内容高度重复。蜘蛛把時間花在這些地址上,真正需要更新的詳情頁反而等不到抓取。
先弄清抓取预算被谁吃掉了
抓取预算並不是一個官方公布的固定數值,可以粗略理解為:在服務器响應速度、站点規模、頁面重要程度等條件不變时,搜尋蜘蛛愿意並且能够在你的站点上訪問的頁面數量上限。它是相對的,不是绝對的額度。
当站内存在大量低價值或重复的地址时,蜘蛛仍需要逐個請求、下载、解析,這些動作會占用時間。结果就是新發布的頁面收錄變慢,或者老頁面更新很久才被重新抓取。
分頁自查:連結是否可抓、是否唯一
分頁本身不是問题,問题在于分頁的處理方式是否清晰。
- 分頁連結是否使用可点击的 a 标簽,而不是依赖 JS 点击後才生成。
- 每一頁是否有獨立且稳定的地址,例如 /list/page/2/ 這類固定形式,而不是带随机參數的地址。
- 第 1 頁是否存在两個地址(栏目根地址和 page/1),如果存在,建议只保留根地址,另一個做跳轉或規范。
- 分頁地址的标题、描述是否做了区分,避免几十頁共用同一個标题。
如果分頁内容只是列表摘要,且詳情頁已经能被正常抓取,可以让分頁繼續開放;如果分頁頁面上並没有獨立内容,只是重复排列,就需要考虑是否值得让蜘蛛逐頁深入。
篩選參數自查:控制组合數量
篩選是參數膨胀的主要来源。常见的诱因包括:排序參數、價格区間、标簽篩選、會话參數、推廣跟踪參數。
- 把排序、视图切換這類只改變展示顺序的參數,统一指向預設视图的規范地址。
- 會话 ID、来源跟踪等對内容没有影响的參數,尽量用 robots.txt 的 Disallow 規則拦截,或在服務器层面直接忽略。
- 篩選组合如果确實有搜尋需求,可以為少數几個高频组合保留獨立頁面,其余组合不做索引。
- 避免篩選结果頁之間互相連結成網,形成蜘蛛难以走出的循环。
判断标准很简單:這個參數地址,用戶會不會主動搜尋並希望看到它?如果答案是否定的,那它大概率不值得占用抓取资源。
canonical 與 robots 的配合
拦截參數有两種常见做法,各有取舍。使用 robots.txt 拦截,蜘蛛不會抓取该地址,但也不會看到頁面上的 canonical 提示;使用 canonical 指向規范地址,蜘蛛會抓取頁面,但能讀到你的合並意图。一般来说:
- 完全無價值、纯技術性的參數,适合用 robots.txt 拦截。
- 有一定價值但内容重复的篩選頁,更适合保留抓取並用 canonical 归並。
两者混合使用时要注意,不要让被拦截的地址又出現在站内連結或 sitemap 中,否則信息會互相矛盾。
用日誌驗證效果
調整之後不要凭感觉判断。可以定期查看服務器日誌,統計蜘蛛對列表頁和參數頁的訪問次數占比,观察調整前後是否下降,同时看詳情頁的抓取频次有没有變化。日誌需要保留足够長的時間,否則對比没有依據。
調整通常不會立刻见效,蜘蛛重新学习站内结构需要一定周期。建议一次只改一類問题,改完观察一段時間再動下一項,這样才分得清是哪一步起了作用。