网站收录

蜘蛛拿到的 HTML 和你看到的页面不一样,收录会怎么走

浏览器打开页面会执行脚本,搜索蜘蛛拿到的却常常是原始 HTML,两边的差异会直接影响收录判断。这篇文章说明客户端渲染、服务端渲染和预渲染对收录的不同表现,并给出一套从查看源码到抓取测试的排查顺序,帮你确认关键内容是否真的交到了蜘蛛手里。

网站收录

蜘蛛拿到的 HTML 和你看到的页面不一样,收录会怎么走

很多站长排查收录问题时,会把注意力放在内容和外链上,却忽略了一个更靠前的环节:搜索蜘蛛抓到的那个页面,和你用浏览器打开看到的页面,可能并不是同一份东西。以前端渲染为主、组件异步加载的站点,这种差异尤其明显。

为什么会出现两份不一样的页面

浏览器打开页面时,会先拿到一份原始 HTML,然后执行其中的脚本、请求接口、再把内容逐步填进 DOM。用户看到的是执行完成后的结果。搜索蜘蛛也会执行脚本,但这件事成本高、需要排队,很多情况下它先接触到的是那份还没被填满的原始 HTML。

于是同一个 URL 就有了两种形态:原始 HTML 里的内容,和渲染后页面里的内容。收录判断建立在哪一份上,取决于引擎的处理能力、页面重要程度和抓取配额。差异就是从这里开始的。

三种常见做法,收录表现差别很大

客户端渲染的单页应用

原始 HTML 里往往只有一个空容器和几段脚本,标题、正文、内链都要等脚本执行完才出现。这类页面的收录通常最不稳定:可能被抓到,但索引里留下的内容很薄;也可能因为脚本里的链接没有被解析,导致整批 URL 迟迟等不到下一次抓取。

服务端渲染

服务器直接返回带内容的 HTML,用户和蜘蛛拿到的是同一份,对收录最友好。代价是每次访问都要由服务端拼装页面,运维成本相对高一些。

预渲染与静态化

在构建或请求时生成静态 HTML,兼顾响应速度和内容可见性,适合变动不频繁的列表页、详情页。需要注意的是预渲染缓存要能跟着内容更新,否则索引里会长期停在一个旧版本上。

排查时按这个顺序看

  1. 先看原始 HTML。用查看源码,而不是开发者工具的元素面板,确认标题、核心正文、主要内链是否已经在里面。元素面板展示的是渲染后的结果,容易造成误判。
  2. 再看渲染后的结果。用搜索平台提供的抓取测试或渲染截图功能,看蜘蛛执行脚本后实际拿到什么。两边都看,才能判断差异有多大。
  3. 确认内链是否可见。如果列表页的链接由脚本渲染生成,蜘蛛在第一步就可能看不到通往详情的路径,URL 发现会因此变慢。
  4. 检查元信息。标题、描述、canonical 如果是脚本动态写入的,要确认渲染后能被正确读取,否则收录后呈现的标题可能和你的预期不一致。

几个容易忽略的细节

  • 首屏内容异步加载,蜘蛛抓取时接口尚未返回,页面看起来就像被截断了。
  • 依赖用户交互才展开的内容,比如点击查看更多,蜘蛛通常不会主动去点。
  • 脚本报错会让整页渲染中断,线上偶发的接口故障就可能让一批页面被抓成空壳。
  • 同一套模板下个别页面渲染失败,往往只体现在收录数据上,日常访问未必能发现。

处理原则:关键内容不依赖脚本

不必追求所有内容都静态输出,但要让决定收录的那部分信息在不执行脚本的情况下也能读到:页面主题、核心正文的首段、指向下一层的链接、基本的元信息。这些是蜘蛛判断页面价值、决定是否继续爬取的依据。

如果短期内无法改造架构,至少保证三点:主要导航和列表链接是可抓取的普通链接;页面有一个稳定的、与内容相符的标题;内容更新后预渲染或缓存能被触发刷新。做到这几点,收录的波动通常会收敛不少。

抓取与收录是两件事,但它们共用同一份输入。你交到蜘蛛手里的那份 HTML,决定了它有没有东西可收。