搜尋抓取

站内搜尋與日歷頁:蜘蛛掉進 URL 陷阱後的封堵與出口设計

站内搜尋、日歷控件和排序參數會按组合生成大量地址,把抓取资源摊薄。本文梳理 URL 陷阱的常见成因,给出用抓取日誌判断是否掉坑的方法,並整理内鏈收敛、參數規范、Sitemap 與 robots.txt 的配合顺序,以及調整之後的观察重点。

搜尋抓取

站内搜尋與日歷頁:蜘蛛掉進 URL 陷阱後的封堵與出口设計

很多站点的抓取問题不是出在重要頁面抓不到,而是出在蜘蛛被大量無意义的地址带走。站内搜尋结果頁、日歷頁、排序與篩選參數,都能在很短時間里生成成千上萬個地址。這些地址往往内容稀薄、互相重复,却和内鏈、Sitemap 處在同一层,蜘蛛很难自己判断哪個该放弃。

URL 陷阱是怎么形成的

常见的结构是:一個基础頁加一组可選參數,參數可以任意组合,頁面之間又互相連結。地址數量按组合數增長,而不是按内容量增長。几類典型情况:

  • 站内搜尋结果頁可以被索引,而结果頁里又带分頁連結,形成自我循环;
  • 日歷控件每天都能生成一個新日期地址;
  • 排序參數(按價格、按時間、按销量)各自成頁,且都带完整内鏈;
  • 會话 ID、来源追踪參數被寫進連結,同一内容产生多個地址;
  • 打印頁、移動版、AMP 版没有做規范收敛,各自成為一套獨立路径。

這些地址本身不一定错誤,問题在于數量失控後會摊薄抓取资源,也让重要栏目和詳情頁的抓取間隔被拉長。

先確認蜘蛛是不是真的掉進去了

不要凭感觉判断,可以從抓取日誌和站点工具里找證據:

  1. 統計一段時間内被抓取地址的分布,看带參數的地址占比是否明顯高于内容頁;
  2. 看抓取频次最高的目錄是哪一個,是否集中在站内搜尋、日歷或标簽頁;
  3. 把 Sitemap 里的規范地址與日誌里實际被抓的地址對照,差集有多大;
  4. 抽查這些地址返回的狀態碼與内容,是否存在大量近似重复的正文。
如果抓取量在涨、但新增收錄的實质内容没涨,通常說明资源被低價值地址消耗了。

封堵手段的邊界要清楚

几種常用做法效果不同,需要分清:

  • robots.txt 的 Disallow:阻止抓取,但已收錄或被外鏈指向的地址仍可能出現在结果里;
  • noindex:必须允许抓取才能生效,和 Disallow 同时用會互相抵消;
  • rel=canonical:用于合並近似頁面,属于建议信号,不能替代入口收敛;
  • nofollow 或直接移除連結:减少蜘蛛發現新组合地址的机會,通常是最直接的一步。

實践顺序一般是:先减少内鏈出口,再處理參數規則,最後才考虑屏蔽。只做屏蔽而不動内鏈,蜘蛛仍會反复尝试已经知道的地址。

给蜘蛛留下有用的出口

封堵的同时,要保證主路径依然通畅。可以按下面的做法自查:

  1. 分類頁、分頁、詳情頁保持普通 HTML 連結可達,不完全依赖脚本点击;
  2. Sitemap 只提交規范地址,不把篩選组合寫進去;
  3. 分頁使用可抓取的連結形式,並限制最大頁數;
  4. 站内搜尋頁设 noindex 或禁止抓取,同时從主導航和正文区域移除入口;
  5. 排序、篩選預設走參數並做規范合並,避免每個组合生成獨立静態地址。

改完之後看什么

調整不會立刻见效,通常要观察几周的抓取日誌:带參數地址的抓取占比是否下降、重要目錄的抓取频次是否回升、Sitemap 中包含的地址被抓取的比例是否提高。如果發現抓取總量整体下滑、而内容頁的抓取並没有跟上,說明封堵過紧,需要把必要路径重新放出来。抓取结构的調整更像調阀门,需要邊看日誌邊微調,而不是一次設定完就不再管。