搜索抓取

筛选、排序与站内搜索:别让蜘蛛掉进无限抓取空间

筛选、排序和站内搜索很容易拼出成百上千个地址,蜘蛛顺着链接一路走,抓取额度就被大量相似页面吃掉。本文讲清三类常见无限空间的成因,以及关掉链接、robots.txt 兜底、canonical 收口、保留关键组合等做法,并给出从服务器日志判断是否绕圈的观察角度。

搜索抓取

筛选、排序与站内搜索:别让蜘蛛掉进无限抓取空间

蜘蛛在站内走路径,靠的是页面上一个个链接。链接有限,抓取就有限;链接可以无限组合出来,抓取就可能变成一场没有终点的旅行。筛选、排序、站内搜索这三类页面,恰恰最容易生成无限组合。

抓取路径为什么会被“放长”

正常的栏目页,一个列表翻到底也就几十页。可一旦列表上叠加了筛选条件,地址就会按组合数增长:颜色 × 尺码 × 价格区间 × 排序方式,任意两项相乘就是成百上千个地址。蜘蛛不会判断“这个组合有没有人搜”,它只看到链接就跟着走。

结果是抓取额度被一堆内容几乎相同的页面吃掉,真正需要更新的文章或商品反而排到了后面。

三种常见的无限空间

筛选与排序链接

把筛选项做成可点击的 a 标签,蜘蛛就会顺着点下去。两个筛选维度还能接受,四个以上基本等于开了一个无底洞。

站内搜索结果页

搜索框提交后的结果页,如果参数可拼,蜘蛛只要找到一个入口,就能造出无数个地址。这类页面对用户有用,对蜘蛛通常只是重复内容。

日历与归档

按日期归档的页面,如果允许无限翻下去,也会形成一条很长的抓取链。归档本身有价值,但不需要让蜘蛛翻到很多年前的第几十页。

路径长度与链接位置

除了无限组合,路径过深也会让 URL 发现变慢。首页到详情页最好控制在三到四次点击以内,导航、面包屑、相关推荐各承担一段。链接放在页面主体里的,通常比藏在页脚或折叠区里的更容易被走到。

列表页还要给蜘蛛明确的下一页入口,而不是只做无限滚动。无限滚动对用户友好,但蜘蛛看不到滚动之后的内容,需要额外提供可抓取的分页链接。

把路径收住的几种做法

  • 关掉链接,而不是只关掉页面:筛选项可以用表单或按钮实现,不产生可抓取的 a 标签,蜘蛛就不会沿着走。
  • robots.txt 兜底:把明确的参数模式屏蔽掉;注意被屏蔽的地址如果同时是重要页面,要单独放行。
  • canonical 指向主版本:让筛选结果页指向对应的主列表页,减少重复地址带来的干扰。
  • 保留有限的关键组合:确实有人使用的筛选组合,做成静态地址并加入内链,其余不留入口。
  • 给列表页稳定的入口:栏目页、Sitemap、面包屑保持稳定,蜘蛛有固定路线,就不必靠翻组合去找新内容。

怎么判断有没有绕圈

看服务器日志里被抓的地址:如果带参数的 URL 占比很高,而且这些地址的返回内容大同小异,就说明蜘蛛在无限空间里消耗额度。另一个信号是抓取次数涨了,但出现的新 URL 没怎么变。

抓取路径不是越短越好,而是要有边界。有边界的站点,蜘蛛每次来的路线稳定,新内容也更容易被发现。

小结

筛选、排序和站内搜索本身不是问题,问题是它们能不能被无限拼出来。把可抓取的链接数量控制在有限集合里,让内链和 Sitemap 指向真正需要被抓的入口,蜘蛛的抓取路径就会变得可预期,额度也花在更值得的页面上。