站点运营

站点运营:站内搜索与筛选参数页自查,别让结果页变成抓取黑洞

站内搜索、筛选、排序功能会生成大量带参数的 URL,用户用得少,蜘蛛却爬得勤。本文梳理如何通过日志确认抓取占比,区分有价值和低价值的参数组合,并用 robots.txt、noindex、canonical 与内链收敛等手段,把抓取时间留给真正需要更新的页面。

站点运营

站点运营:站内搜索与筛选参数页自查,别让结果页变成抓取黑洞

很多站点上线站内搜索和筛选功能之后,服务器日志里很快会出现大量带参数的 URL。这些页面用户用得并不多,蜘蛛却爬得很勤。它们内容重复、组合近乎无限,容易把有限的抓取时间占掉,真正需要更新的文章和商品反而被挤到后面。

先确认这些页面到底被抓了多少

不要凭感觉判断。打开访问日志,按 URL 里的参数关键词做一次统计,常见的参数名包括 q、s、keyword、search、sort、order、filter、page、price、tag 等。重点看几件事:

  • 同一路径下的参数组合数量是否在持续增长;
  • 蜘蛛每天在这些 URL 上的请求占全部请求的比例;
  • 这些请求返回的状态码分布,是 200 居多还是 404、302 居多;
  • 是否有参数页被外部链接指向,导致蜘蛛反复回访。

只有拿到这些数字,后面的取舍才有依据。占比不到百分之一和占比超过三成,处理方式完全不同。

结果页的三种处理思路

直接屏蔽抓取

在 robots.txt 里屏蔽带特定参数的搜索结果页,是最直接的做法,能较快减少抓取浪费。但要清楚一个前提:被屏蔽的 URL 如果被外链引用,仍可能以无描述的形式出现在搜索结果里,因为蜘蛛读不到页面上的说明标记。屏蔽解决的是抓取问题,不是索引问题。

允许抓取但标记 noindex

如果希望这些页面既不进索引、也不留下无描述收录,可以让蜘蛛正常抓取,由页面自己输出 noindex。代价是抓取成本依然存在,适合参数组合数量可控、总量不大的站点。

把有价值的筛选页拆出来单独维护

有些筛选组合对应的是真实需求,比如某个城市加某个品类的列表页。这类页面可以做成固定路径的静态入口,配上独立的标题、简介和内容摘要,从搜索结果页体系中分离出来单独维护。其余的随机组合继续用规则挡在外面。判断标准很简单:这条组合有没有人主动搜索过,页面上的内容是否与主列表页明显不同。

站内搜索页要额外注意两点

  • 搜索框的提交方式。纯 GET 表单会把用户每一次输入都变成一条可抓取的 URL,有些蜘蛛甚至会主动拼接常见关键词。改为 POST 提交,或者限制搜索入口只对站内交互开放,能减少大量无意义的地址。
  • 空结果页的处理。搜不到内容时不要用一个 200 状态码加上一句没有找到就结束,可以根据关键词推荐相关栏目或热门内容,避免留下大量空壳页面。

参数组合尽量收敛

排序方式、列表视图、每页条数这类参数本身不产生新内容。可以在程序层限制有效取值范围,过滤掉非法取值;同时合并等价的参数写法,避免 sort=price 和 order=price 这类同义不同名的地址同时存在。参数越少,可组合出的 URL 就越少,蜘蛛遇到的岔路也就越少。

一份可执行的检查清单

  1. 统计日志中带参数 URL 的抓取量和占比;
  2. 列出所有参数名,标注每个参数是否影响页面主体内容;
  3. 对不影响内容的参数组合设置 robots.txt 规则或 noindex;
  4. 检查参数页的 canonical 是否指向了合适的规范地址;
  5. 检查模板和内容区是否有大量链接直接指向参数页;
  6. 调整后隔一到四周回看日志,对比抓取分布的变化。

别忘了内链这一环

很多参数页之所以被频繁抓取,是因为模板里到处挂着带筛选条件的链接,比如相关推荐、标签云、猜你喜欢直接拼上参数。这类链接要么改成指向稳定的栏目页,要么控制数量,不要在每个页面都重复出现。链接少了,蜘蛛自然会把注意力收回到主干内容上。

参数页面本身不是错误,问题在于让蜘蛛把时间花在近乎无限的组合上。先分清哪些是有价值的入口,其余的用规则挡在抓取之外,比等到抓取出现异常再补救要省力得多。

调整之后不必期待第二天就看到变化,蜘蛛的抓取习惯通常需要几周才会平滑下来。把日志回看变成固定动作,比一次性设置完就长期不管更靠谱。