搜索抓取

蜘蛛掉进无限 URL 空间:筛选、日历与站内搜索怎么收口

站内筛选、日历、站内搜索等功能会自动生成大量 URL,蜘蛛只要发现链接就会把它们排进队列,抓取预算容易被这些无实质内容的页面消耗。本文梳理无限 URL 空间的常见来源,并给出参数取舍、robots.txt 与 noindex 的分工、分页 canonical、Sitemap 正向引导等收口思路,同时提醒用日志观察调整后的效果。

搜索抓取

蜘蛛掉进无限 URL 空间:筛选、日历与站内搜索怎么收口

站内有些页面不是编辑写出来的,而是功能自动生成的:筛选、排序、日历、站内搜索结果。它们对用户有用,但对蜘蛛来说可能是一条没有尽头的路。只要链接可抓取,蜘蛛就会把这些 URL 排进队列,一个个走进去。抓取预算是有限的,被这些页面消耗掉,真正需要更新的内容反而排不上队。

无限 URL 空间从哪来

常见的来源有几类:

  • 筛选与排序参数:?color=red&size=42&sort=price 这类组合,维度一多,URL 数量会成倍增长。
  • 日历与日期归档:/2024/03/15/ 这种路径可以不断生成,即使那天没有内容。
  • 分页叠加筛选:筛选结果里再分页,每一页都是新 URL,翻到最后也没有实质内容。
  • 站内搜索:搜索结果页本身可被抓取,查询词的组合又是无限的。
  • 会话与追踪参数:带 session id、?ref= 之类参数的 URL 指向同一份内容,却让蜘蛛当成不同页面。

蜘蛛为什么会一路走下去

蜘蛛没有“判断这个页面有没有价值”的能力,它只认信号:URL 是否可抓取、是否有链接指向、页面是否返回正常状态。只要筛选链接在 HTML 里以 a 标签出现,或者分页的“下一页”一直存在,它就会继续排队。很多站点的筛选组合页对用户是空结果,但依然返回 200,蜘蛛无法区分这跟真实内容页有什么不同。

怎么给这条路收口

先分清哪些参数值得留

不是所有参数都要开放。对内容有实质影响、且有独立检索需求的维度,可以保留;纯排序、纯展示切换、时间戳类的参数,通常不值得单独抓取。把它们从可抓链接里去掉,是最省事的一步。

robots.txt 与 robots meta 的分工

robots.txt 适合处理“整类路径不必抓”的情况,比如带特定参数的搜索结果;但它只阻止抓取,不阻止 URL 被发现——如果别处有链接指向,地址还是可能进队列。对于需要被看到、但不该被索引的页面,用 robots meta 的 noindex 更合适,前提是别在 robots.txt 里把整段路径屏蔽掉,否则蜘蛛读不到 noindex。

挡住抓取和挡住索引是两件事,混用容易两头落空。

分页不要全部指向第一页

有的站点把所有分页的 canonical 都写向列表第一页,想让蜘蛛只认一个地址。对真正存在的分页内容来说,这会削弱后面几页的可见性。更稳的做法是让分页自指 canonical,同时在页面里明确“下一页”的关系,让蜘蛛知道它翻的是同一组内容的延续。

站内搜索页单独处理

站内搜索生成的结果页,通常没有长期检索价值。用 noindex 让它们不参与索引,同时避免把搜索框提交后的 URL 直接做成可抓链接。如果已经有大量搜索 URL 被抓,可以在日志里看它们的抓取占比,再决定是否收紧。

用 Sitemap 给一份正向清单

Sitemap 不一定能让蜘蛛马上抓,但它能告诉蜘蛛哪些 URL 是站点认可的。对于大站,把真正需要更新的内容放进 Sitemap,过滤掉参数组合页,是一种把抓取预算往有用方向拉的办法。前提是 Sitemap 里的 URL 自身可抓、状态正常,否则这份清单本身也会变成噪音。

监控与调整

调整后不看数据等于没调。可以在服务器日志里按 URL 模式做简单分组,看参数页、搜索结果页、日历页在总抓取量里的比例。如果某类 URL 抓取频繁但从未带来访问,就值得检查它是否还在被内链暴露。反过来,如果重要内容抓取量下降,也要确认是不是收口收得过头,把蜘蛛挡在了有用的路径之外。

收口的目的不是禁止蜘蛛探索,而是让它在有限次数里走到有价值的地方。把无限生成的 URL 关在门外,剩下的路自然更清晰。