排查收录问题时,多数人的第一步是打开自己的页面看一遍:正文完整、结构清楚,于是默认蜘蛛看到的也是这一版。实际链路里,蜘蛛拿到的原始 HTML、渲染之后的 DOM、以及最终写进索引的内容,三者可能互不相同。这种差异平时不显眼,却是不少页面停在“已抓取未索引”的直接原因。
差异一般来自哪里
正文靠 JS 注入
抓取和渲染是两个阶段。如果服务器返回的原始 HTML 只是一个空壳,正文要等接口返回后才填进去,那么页面能不能被理解,就取决于渲染环节是否顺利完成。渲染本身有额外成本,也更容易被超时、资源加载失败、接口报错打断。
登录态、个性化、A/B 测试
蜘蛛是以未登录身份访问的。如果未登录时页面只显示一句“请登录后查看”,那么索引里很可能就是这句话,而不是真正的正文。A/B 测试同理:如果对不同访客随机给出不同版本,而蜘蛛也被卷进分流,同一 URL 在两次抓取中返回的内容就不一样,容易造成索引版本反复摇摆。
缓存、CDN 与 UA 分流
有些站点会按 User-Agent 返回不同模板,移动端给精简版,蜘蛛给另一版;也可能因为 CDN 缓存了旧版本,导致蜘蛛长期抓到过期内容。还有一种情况是按 IP 或地区返回不同内容,蜘蛛从另一个出口访问,看到的是完全不同的页面。
怎么确认差异存在
- 用搜索平台提供的抓取测试工具,分别查看“抓取到的 HTML”和“渲染后的 HTML”,确认正文是否完整、标题是否一致。
- 用命令行带蜘蛛 UA 请求一次目标 URL,看返回的 HTML 原始内容、状态码和跳转链路。
- 临时关闭浏览器 JS 再打开页面,看还剩多少可读内容,剩下多少就代表纯抓取阶段能拿到多少。
- 翻服务器日志,看蜘蛛实际请求了哪些 URL、关键接口有没有被请求、返回码是不是 200。
这种差异会怎样影响收录
- 渲染后内容单薄:索引里存的版本信息量不足,页面容易被判定为低价值,长期停在“已抓取未索引”。
- 同一 URL 内容不稳定:索引版本跟着变化,展示出来的标题或摘要可能和用户实际看到的不一致。
- 关键资源被拦截:渲染失败会触发反复重试,白白消耗抓取预算,挤压其他页面的抓取机会。
- 首屏与渲染结果错位:靠 JS 补出来的导航和内链,如果渲染阶段没跑完,站内链接的发现路径也会断掉。
按什么顺序处理
- 先让核心内容在原始 HTML 里就能读到,服务端渲染或预渲染是最直接的方案,不必全部改,优先保证正文和主标题。
- 检查 robots.txt,确认渲染所需的 JS、CSS、接口路径没有被误拦,这类屏蔽往往是自己加上去的。
- 对蜘蛛固定一个版本,不要把 A/B 测试或个性化推荐套用到蜘蛛身上;如果做不到区分,至少让蜘蛛走默认版本。
- 检查缓存策略,避免错误版本被长时间缓存;改版后可主动清理一次相关缓存。
- 调整完成后,用抓取测试工具复验一次,之后再看索引状态的变化,不要指望当天就生效。
处理收录异常时,先确认“蜘蛛看到的是什么”,往往比直接改内容更省时间。抓取和收录是前后两步,前一步没走对,后一步怎么优化都使不上力。