站内有些页面不是编辑写出来的,而是功能自动生成的:筛选、排序、日历、站内搜索结果。它们对用户有用,但对蜘蛛来说可能是一条没有尽头的路。只要链接可抓取,蜘蛛就会把这些 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 关在门外,剩下的路自然更清晰。