网站收录

抓取日志里有它,索引里没有它:先做一次交叉核对

日志里能看到蜘蛛访问,索引里却查不到这个地址,是收录核对中最常见的困惑之一。本文给出一套交叉核对的做法:先对齐时间窗和 URL 口径,再把“抓了未收录”的样本按模板分组,最后抽查蜘蛛实际拿到的页面内容,把模糊的感觉拆成可以分别处理的具体原因。

网站收录

抓取日志里有它,索引里没有它:先做一次交叉核对

做收录核对时经常会遇到这样一种情况:日志里明明有蜘蛛访问记录,状态码也是 200,但过一两周去查索引,这个 URL 依然不在。抓取和收录本来就是两件事,抓取只说明蜘蛛把内容取走了,是否建索引还要看内容质量、重复程度、站点整体信号。把两者混为一谈,很容易得出“蜘蛛已经来了,收录只是时间问题”的错误结论。

为什么要做交叉核对

日志记录的是蜘蛛来过几次、拿到了什么响应;索引数据记录的是最终留下了哪些地址。这两份数据的口径、时间、粒度都不一样,直接对比很容易得出错误结论。交叉核对的目的不是找出一个“正确数字”,而是找出那些抓了多次却始终没进索引的 URL,把它们当成一批样本来分析。

第一步:先把两份数据的口径对齐

时间窗要对齐

索引有延迟,今天的抓取不可能反映在今天的索引数据里。核对时通常要留出缓冲期,或者只分析那些在抓取后经过较长时间仍未出现的 URL。

URL 要对齐

日志里的地址往往带着参数、大小写、结尾斜杠的差异,索引数据里是归一化之后的版本。核对前先做一轮 URL 归一,否则会把同一个页面当成两个,得出“抓了很多却没收录”的假象。

第二步:给“未被收录”的 URL 分组

  • 内容偏薄,或与其他页面高度相似的模板页;
  • 被 noindex、robots、canonical 外指的地址;
  • 正文依赖 JS 渲染,蜘蛛拿到的是空壳;
  • 参数、排序、筛选生成的地址;
  • CDN 或缓存返回了旧版本甚至错误版本。

分组之后往往会发现,问题通常集中在少数几类模板上,而不是均匀散落在全站。

第三步:抽查响应内容,别只看状态码

状态码 200 不代表蜘蛛拿到的是你预期的内容。抽查几个未收录的 URL,看看蜘蛛视角下返回的 HTML 里到底有什么:正文是否存在、标题是否是模板化的、有没有大段的导航和广告。可以结合抓取工具的渲染结果,和浏览器里看到的内容做对比。

抓取是入场券,收录是评审结果。日志只能证明“来过”,不能证明“留下了”。

一个可执行的核对顺序

  1. 选定时间窗,导出该窗口内被抓取的 URL 列表;
  2. 做 URL 归一,去重;
  3. 与当前索引数据取差集,得到“抓了未收录”的样本;
  4. 按页面模板分组,统计各类占比;
  5. 对占比最高的一类做内容抽查,确认是质量问题、信号冲突还是抓取版本问题;
  6. 改完之后不要只看数字变化,继续用同一套流程复测。

这套流程不会立刻提高收录量,但它能帮你把“为什么没收录”从一个模糊的感觉,变成几类可以分别处理的具体原因。