站内搜尋和篩選是提升浏览体驗的功能,但它們也是參數化 URL 的主要来源。一個關鍵詞、一個排序方式、几個篩選條件叠加,就可能产生几十上百個地址。
這些地址如果全部放開给搜尋引擎抓取,站点在蜘蛛眼里會變成大量内容稀薄、彼此高度相似的頁面集合。抓取预算被消耗,真正需要收錄的栏目頁和内容頁反而排队變慢。下面按几個环节做自查。
一、確認這些頁面的抓取權限
先明确一点:你希望蜘蛛抓到這些頁面吗?大多數站点並不希望搜尋结果的组合頁被大量索引,但也不该直接一刀切。
robots.txt 與 noindex 的区別
- robots.txt 屏蔽:蜘蛛不會抓取该路径,但已经存在的連結仍可能出現在外部引用里,搜尋引擎也無法讀取頁面上的 noindex 指令。
- 頁面級 noindex:蜘蛛需要抓取頁面才能看到這個指令,抓取後會從索引中移除,但抓取動作本身已经發生。
常见做法是把無意义的纯參數组合放進 robots.txt 屏蔽,對有價值的篩選頁保留抓取但加 noindex。注意不要让同一個 URL 同时被 robots.txt 屏蔽又指望它讀取 noindex,两者會互相打架。
二、盘点參數的數量和组合方式
把站点里會出現在 URL 上的參數列出来,看清楚每一個的作用:
- 搜尋關鍵詞參數,例如 ?q= 或 ?s=
- 排序參數,例如 ?sort=price、?order=desc
- 篩選參數,例如 ?color=red&size=m
- 分頁參數,例如 ?page=3
- 跟踪或来源參數,例如 ?utm_source=、?ref=
重点看篩選參數之間能不能自由组合。如果颜色、尺碼、價格区間可以任選,URL 數量會呈乘法增長。對這類頁面,要么限制可组合的维度,要么在服務端做規范,让蜘蛛只看到有限几個入口。
三、搜尋结果頁的空结果與低质结果
站内搜尋很容易产生空结果頁。訪客搜到一個不存在的词,頁面只顯示“没有找到”,這種頁面没有内容價值,也不该被抓取。可以在空结果时返回合适的狀態碼,或至少加上 noindex,並给訪客一些推荐入口。
另一個問题是搜尋结果质量。如果搜尋頁只是把标题和摘要简單罗列,内容重复度高,即便被收錄也很难带来有效訪問。與其让蜘蛛大量抓取這類頁面,不如把站内搜尋当作訪客工具,而不是收錄入口。
四、canonical 和内部連結怎么寫
篩選頁的 canonical 要自己拿主意。如果篩選结果和主栏目内容高度重合,可以考虑 canonical 指向主栏目;如果确實是一個獨立可用的集合頁,就指向自身。不要所有篩選頁都统一指向首頁,那样會传递错誤的信号。
内部連結同样要注意。導航、面包屑、内容里的連結,尽量指向不带多余參數的干净地址。只有在明确的篩選入口上,才使用带參數的連結,並保持參數顺序和拼寫一致,避免同一個篩選條件出現多種寫法。
五、分頁、加载更多和篩選的衔接
很多篩選頁配合“加载更多”或無限滚動。若采用前端加载而没有可抓取的分頁連結,蜘蛛只能看到第一頁。可以保留一套标准的分頁連結,让每一頁都有獨立的可訪問地址,再在頁面上叠加加载更多的体驗。分頁連結的排序參數、篩選參數要和頁面實际内容對應,否則會出現翻到後面内容重复的情况。
六、可执行的检查清單
- 列出所有會产生參數化 URL 的功能,标注是否需要被索引。
- 检查 robots.txt 中是否有誤伤正常栏目的規則,也检查是否漏掉了明顯無意义的參數路径。
- 抽查搜尋结果頁、篩選頁、空结果頁的狀態碼和 noindex 标簽。
- 查看篩選頁的 canonical 指向是否统一、是否符合预期。
- 用站内連結工具或日誌,看看蜘蛛實际抓了哪些參數组合,是否超出预期。
- 確認分頁和加载更多的頁面都能通過連結到達,不依赖用戶点击行為。
- 定期复盘:如果某些篩選頁長期没有带来有效訪問,可以考虑收紧抓取范围。
參數化頁面不是洪水猛兽,關键是让搜尋引擎抓你愿意让它抓的那部分。把范围划清楚,比事後從索引里清理要省事得多。
這些检查不需要一次性做完,可以先從日誌里蜘蛛抓取最频繁的參數入手,逐步收拢。改動之後观察一段時間,再看抓取分布是否回到你希望的内容頁上。