结论先说:如果同一批URL中只有一部分被发现,不要按“已发现/未发现”直接分组对比,而要先按可独立变化的抓取条件分层,再在层内做对照。成立条件是你能确认这些URL来自同一站点地图或同一批内链投放,且服务器对它们的响应策略一致;不成立的反例是:未发现的那部分恰好位于更深的目录层级或由另一套模板渲染,此时分组差异反映的是结构差异,而不是“被发现与否”本身。
“被发现”通常是抓取调度和链接可达性共同作用的结果。直接拿这两组比标题长度、正文词数或更新时间,很容易得出错误结论,因为两组在生成方式、模板、上线时间上往往本来就不同。更稳妥的做法是把“是否被发现”当作结果变量,而不是分组变量。
你可以先固定一个可控条件,例如同一模板、同一目录深度、同一批内链位置,然后在这个条件内观察哪些URL被调度、哪些没有。这样得到的差异才更可能指向抓取预算或链接权重分配,而不是页面内容本身的差别。
假设你有一批1000个URL,其中约300个被发现,700个未发现。不要直接取这300和700做对比。先按以下维度各自分层:
分层后,在每个层内随机抽取数量相近的已发现和未发现URL,形成层内对照组。这样比较的是“同一条件下发现与未发现的差异”,而不是把结构差异误读成抓取差异。
假设某站点有A、B两个栏目,各500个URL。A栏目全部通过列表页第一页内链可达,B栏目需要翻到第三页才能看到链接。结果A有280个被发现,B只有20个。此时若把A的280个和B的20个直接对比,会得出“A栏目内容更好所以被收录”的结论,但真正变量可能是链接深度。
正确做法是:在A、B内部各自再按“是否出现在第一页链接”分层,然后只在同一层内比较。如果A栏目第一页链接的URL被发现率明显高于A栏目深层链接,说明链接位置比栏目本身更关键。下一步应优先把B栏目的关键URL提到更浅的链接位置,再观察发现量是否变化。
反例:如果未发现的URL中有相当一部分返回了与已发现URL不同的状态码,或者被robots.txt规则单独限制,那么“发现与否”的差异已经被响应策略解释掉了,继续按链接深度分组没有意义。robots.txt的抓取限制不等于可靠的索引移除,它只影响抓取行为;站点地图也不保证收录。此时应先统一响应和抓取规则,再重新划分对照组。
另一个失效条件是:两组的URL实际上指向同一内容的不同参数版本。这种情况下,抓取器可能只选择其中一个版本,分组对比会变成重复内容问题,而不是发现路径问题。
确定分层后,选一个最可能影响发现的变量做单点改动。例如,只把B栏目第三页的链接提到第一页,其他模板、内容、内链数量保持不变。改动后等待一个合理的抓取周期,再按原来的分层重新统计发现比例。
如果同一层内的发现比例上升,说明链接位置是有效变量,可以继续推广到其他深层栏目;如果没有变化,则回到响应特征或URL模式层排查。关键不是一次改动就下结论,而是让对照组在改动前后保持结构一致,这样你才能把发现量的变化归因到具体动作,而不是归因到批次差异。