常见问题

入口页链接每次刷新都换一批,搜索蜘蛛还能发现全部目标 URL 吗?

入口页用随机链接列表是蜘蛛池常见做法,但搜索蜘蛛能否发现全部目标 URL,取决于抓取次数、单页条数和池子总量三者的配合。本文拆开随机列表的覆盖逻辑,列出容易漏抓的几种情况,并给出更稳妥的固定列表加 sitemap 方案。

常见问题

入口页链接每次刷新都换一批,搜索蜘蛛还能发现全部目标 URL 吗?

蜘蛛池入口页有一种常见写法:每次请求从 URL 池里随机抽一批链接渲染到页面上,刷新一次换一批。这种做法对人工查看省事,但对搜索蜘蛛是否友好,很多人没想清楚。下面按发现逻辑拆开说。

先说结论

搜索蜘蛛是按 URL 处理的,不是按整站处理的。只要某个目标 URL 在至少一次被抓取到的入口页 HTML 里,以可解析的链接形式出现过,它就有机会进入待抓队列。随机返回本身不等于屏蔽,真正的问题是覆盖率入口页被抓取的次数够不够。

决定覆盖率的三个变量

假设 URL 池总量是 M,入口页每次返回 N 条链接,搜索引擎在一段时间内重抓该入口页 k 次,那么单个目标 URL 至少被展示一次的概率大致是 1-(1-N/M) 的 k 次方。三个变量分别对应:

  • M,池子总量:池子越大,单次抽样命中某个特定 URL 越难。
  • N,每次返回条数:太小则覆盖慢,太大则页面变重,容易被当成低质列表页。
  • k,入口页被重抓的次数:这是最容易被忽略的一项,也是随机方案能否成立的命门。

从上面这个关系能看出:如果入口页本身权重低、更新信号弱,k 长期停在个位数,随机方案基本等于永远覆盖不全。

几种常见的坑

页面看着变了,抓取工具看到的却是空壳

不少入口页的链接是前端渲染之后才出现的。如果链接来自异步接口,首次返回的 HTML 里根本没有它,那么随机对搜索蜘蛛就等于不存在,返回多少次都一样。验证方式很简单:关掉 JavaScript 再请求一次,看返回的 HTML 里有没有目标链接。

对爬虫和真人返回差异过大的内容

如果为了省事,直接按 UA 返回两套完全不同的页面,风险不只是漏抓。搜索引擎对刻意区分对待的行为一向敏感,这类做法可能被判定为伪装,得不偿失。

入口页被反复解析,抓取配额被浪费

随机列表意味着同一入口页每次返回的结构都在变。蜘蛛每次抓取都要重新解析页面,如果链接重复率高、指向的 URL 早就抓过,等于把抓取配额花在重复劳动上。池子越大,这种浪费越明显。

更稳妥的做法

  1. 静态列表加固定分页:把池子拆成固定分页,每页链接不变,蜘蛛可以按页推进,覆盖进度可控。
  2. 用 sitemap 兜底:入口页负责给入口,sitemap 负责给全集,两者分工,比让入口页承担全部发现任务可靠得多。
  3. 列表页之间要有区分度:至少让每页的标题、描述与其中收录的 URL 相关,别用同一套模板套一万页。
  4. 控制单页链接数量:一页几十条通常比一页上千条更容易被完整处理。
  5. 必须随机时,保留一个静态全量入口:随机页负责展示,静态页负责发现。

怎么验证有没有漏

  • 在服务器日志里看入口页被搜索蜘蛛抓了多少次、间隔多久。
  • 对比池子里的 URL 总数和日志中出现过抓取记录的 URL 数,算出覆盖率。
  • 挑几个长期没被抓的目标 URL,回头查它们有没有在某个版本的 HTML 里出现过。
随机展示不是不能用,但它把发现这件事交给了概率。如果入口页抓取频次上不去,随机只会让覆盖率长期停在低位;想稳定,还是靠固定列表加 sitemap。另外提醒一句,被发现、被抓取、被收录是三个不同的环节,本文只讨论第一环。