在收录工具里看到“已抓取,尚未编入索引”,说明爬虫已经把页面拿走了,但索引环节没有放行。这个状态和“已发现但未抓取”不是一回事:前者卡在判断,后者卡在排队。把这两件事分开,排查才有落点。
先确认不是抓取层面的问题
状态已经写明抓到了,所以 robots、抓取频次这些通常不是首要怀疑对象。但有两处仍然值得先看一眼:抓到的是不是真正的正文版本,以及返回给爬虫的内容和用户第一次看到的内容是不是同一份。
- 响应的状态码是不是 200,中间有没有夹带跳转
- 靠 JS 渲染的页面,抓到的 HTML 里有没有实质文字
- 主要内容是不是放在需要点击、滚动或登录之后才加载的区域
如果这一步就发现差距明显,那么先解决抓取内容的问题,再谈其他。
内容层面:索引要的是一份能独立成立的页面
索引不是把 HTML 原样存下来,它要判断这一页能不能单独回答一个问题。以下几类内容会让这个判断变得困难。
- 正文主要由其他页面拼凑或摘要组成,自己新增的信息很少
- 页面上大部分文字是导航、筛选条件、参数表,真正说明问题的句子没几句
- 同一批页面只改了几个词,其余完全一样
- 内容依赖用户输入、地理位置或登录状态,爬虫拿到的是默认空态
这些情况不一定非要删页面,但需要给页面补上别的页面没有的信息,或者把它收敛到主页面上去。
结构层面:让页面之间的关系说得清楚
页面被索引时,系统还要判断它在站内处在什么位置、和哪些页面相似。这里的常见问题有几个。
- 同一内容有多个 URL 都能打开,规范指向没有明确收敛
- 内链都指向列表页,具体页面只有 sitemap 里一个入口
- 目录层级很深,中间没有可以点进去的路径
- 页面上的主要出口都是站外链接,站内没有承接
规范标签、内链、sitemap 这三者说的事情如果互相矛盾,索引环节更倾向于先放着不动。
一份可以照着走的排查顺序
- 拉出一份状态为“已抓取,尚未编入索引”的 URL 清单,按模板和目录分组
- 每组抽两三个页面,在无缓存、未登录的状态下看用户第一次看到的是什么
- 用抓取工具看爬虫实际拿到的 HTML,和上一步的结果对比
- 看这组页面在站内有没有独立入口,入口是不是正文里的链接
- 看这组页面之间、以及和主页面之间,内容重合到什么程度
- 记下改动时间,隔一段时间再回来看同一批 URL 的状态
分组的意义在于,同一个模板出问题,往往是几十上百个页面一起卡在同一个状态,逐个页面改既慢又容易漏。
改动之后不要急着下结论
索引状态的更新有自己的节奏。同一批页面改完,几天到几周内出现不同步很常见。与其每天刷新状态,不如先把同一模板的问题一次改完,再固定几个 URL 作为长期观察样本。
另外也要注意,这个状态并不等于页面被否定。搜索需求本身稀薄、同类页面已经足够多的时候,状态也可能长期停在这里。这种情况更值得考虑的是页面要不要合并,而不是继续往上面堆内容。