站点运营

站点运营:搜索蜘蛛的URL发现,从站内搜索页的抓取挤占谈起

站内搜索页产生大量动态URL,容易被搜索引擎蜘蛛重复抓取,挤占真正重要页面的抓取机会。通过蜘蛛池模拟抓取可识别这类问题,并结合robots、nofollow及noindex进行隔离,帮助资源集中在高价值内容上。

站点运营

站点运营:搜索蜘蛛的URL发现,从站内搜索页的抓取挤占谈起

很多网站为了提升用户体验,都会在页面顶部或侧边栏设置站内搜索框。这本身没有问题,可如果站内搜索生成大量动态URL,并且被搜索引擎蜘蛛追踪,就会在不知不觉中挤占真正重要的URL发现机会。

比如一个内容站的站内搜索地址形如 /search?keyword=春节&page=2,关键词一旦组合,理论上可以衍生出几十万甚至上百万个网址。蜘蛛池的模拟抓取日志里,经常能看到这种毫无意义的请求:它们不断改变参数,访问大量搜索结果页面。这些页面除了一段列表摘要,并没有实质性内容,既不会帮助用户理解网站主题,也几乎不可能带来搜索流量。但蜘蛛却以为它们是普通页面,浪费时间反复抓取。

一、抓取挤占是如何发生的

搜索引擎蜘蛛发现一条新URL后,会依照链接关系继续爬行。如果某个搜索结果页面被收录了,它上面又往往没有太多链接,很快蜘蛛就会放弃,但关键问题在于蜘蛛尝试建立的索引条目数量是有限的。假设一个站点每天的总抓取配额是1万条,站内搜索URL占去一多半,那么频道页、详情页的抓取深度就会明显下降。

更隐蔽的地方在于,有些站内搜索框使用了AJAX自动补全,或者页面本身带有“虚拟URL”,即使没有真实链接,蜘蛛也可能通过javascript渲染发现这些地址。我们曾用蜘蛛池模拟了某个新闻站的抓取,在不到半小时内,蜘蛛池返回的抓取记录里就出现了三千个不同关键词的搜索页请求,而首页和栏目页的占比反而只有几百次。

容易被忽视的细节

  • 站内搜索框的页面源码里如果存在 action 属性直接指向搜索接口,蜘蛛有概率通过表单尝试。
  • 部分站点在文章详情页正文底部展示“热门搜索关键词”,这些词如果被做成带链接的标签,也会吸引蜘蛛点过去。
  • 如果搜索结果是分页显示的,那么“下一页”“第N页”的链接会继续引导蜘蛛深入,让URL规模成倍扩大。

二、用蜘蛛池做一次查验

运营人员不必等到搜索引擎日志里出现异常再去排查,可以主动用蜘蛛池模拟抓取站点首页和几个关键频道页,设置好用户代理,让模拟蜘蛛按照真实蜘蛛的路径爬行。随后打开蜘蛛池的抓取URL明细,重点查看有没有包含 /search?keyword=/s?word= 之类特征串的地址。

同时也观察一下这些被请求的搜索页返回的HTTP状态码。如果返回200,说明搜索引擎认为它们是有效页面;如果返回404或带noindex,多次请求会自动减少。蜘蛛池的统计中,若发现搜索页请求占比超过总抓取数的15%,就该引起注意了。

几种典型异常

  1. 搜索词不分大小写,关键词重复出现,但URL里带了随机值,导致无法归一。
  2. 搜索结果页的URL参数中带有关键词本身,比如 /search?keyword=蜘蛛池&tag=ABC,实际只要第一个参数就够。
  3. 站内搜索页在架构上是有翻页的,但robots没有屏蔽翻页参数,蜘蛛不断抓取第1页到第100页。
注意:蜘蛛池只是辅助排查的工具,它模拟的抓取行为越接近真实蜘蛛越好,但最终还是需要以搜索引擎站点平台的抓取统计为准。

三、隔离与引导的操作要点

1. robots层:直接禁止搜索页

在robots.txt中明确加入这样一行:

/search

注意需要根据站点的实际路径写,如果搜索入口是“/so/index.php?q=”,那么就写成 Disallow: /so/。别遗漏带协议的绝对路径形式。

2. 页面层:给搜索结果加 noindex

如果为了将来做数据监控,不希望直接禁止抓取,那么可以使用robots meta或 X-Robots-Tag 头。给站内搜索页统一输出 <meta name="robots" content="noindex,follow"> 也可以,但要注意这样仍然会消耗部分抓取资源,因为蜘蛛照样来访问发现它于是再离开。最稳妥的做法是robots层禁止,同时保留noindex作为兜底。

3. 链接层:防止诱饵

站内所有指向搜索结果页的链接,都应该加上 rel="nofollow"。尤其是热门搜索词区块和搜索框下方的“高级搜索”链接,这些是蜘蛛最常循着走的地方。

四、验证和处理

设置完成后,再用蜘蛛池模拟抓取一次。注意观察蜘蛛池是否能抓到 /search 下面的地址,正常的抓取日志里应该不再出现这类记录,或者至少数量大幅下降。同时也要检查首页、栏目页、详情页的有效抓取占比是否有所回升。

如果发现还在抓取,就要检查是不是有别的页面泄露了搜索页的链接,例如我们写过判断脚本,专门提取页面里包含“?keyword=”的链接。把这些链路断掉,就能恢复健康的抓取结构。

通过这样一个梳理,可以发现站内搜索页的挤占问题并不难解决,但需要运营人员对搜索蜘蛛的发现机制保持敏感。搜索引擎重视有价值的单位内容,URL发现依靠的是链接与抓取路径,保证站内搜索页不再干扰主要页面的爬取,我们的栏目和文章才有更多机会被蜘蛛看见。