用浏览器打开页面内容完整,用爬虫工具抓一下却只拿到一个空壳,这类情况在核对收录时很常见。前端框架、异步接口、懒加载都会让用户看到的页面和搜索引擎拿到的页面不是同一份东西。要判断问题出在抓取还是索引,需要按固定顺序逐层核对,而不是直接去改模板。
一、先把几份内容摆在一起对比
核对的第一步不是改代码,而是采集几份可以互相对照的样本:
- 原始响应:用命令行工具或浏览器的查看源代码获取,不含任何脚本执行结果;
- 渲染后 DOM:在开发者工具的元素面板里查看,是脚本执行完之后的完整结构;
- 抓取快照:搜索控制台网址检查里展示的已抓取版本;
- 索引展示:搜索结果中的标题、摘要与落地地址。
如果原始响应里已经包含正文,问题就不在渲染;只有原始响应明显缺正文,才需要往渲染方向继续查。
二、区分三种常见的渲染状态
1. 初始 HTML 就是空壳
源代码里只有一个空的挂载节点和几行脚本引用,正文、导航、列表全部由脚本请求接口后写入。这种页面能否被完整抓取,取决于搜索引擎是否愿意执行脚本以及执行后接口是否正常返回。
2. 初始 HTML 有骨架,关键字段后补
页头、导航是服务端输出的,但价格、库存、正文段落等关键信息在渲染后才出现。这类页面的收录往往不稳定,因为不同抓取轮次拿到的内容可能不一致。
3. 需要交互才出现的内容
点击展开、滚动加载、切换标签后才显示的正文,通常不会被自动触发。用户能看到的第三屏内容,抓取侧可能完全没见到。
三、按这个顺序核对
- 确认请求没有被 robots、访问控制或登录状态拦截,原始响应返回的是正常状态码而不是 403 或跳转;
- 对比原始响应与渲染后 DOM,圈出具体缺失的区块,而不是笼统地说页面没内容;
- 在网址检查里看抓取快照,正文是否存在、是否与用户所见一致;
- 若快照里确实没有正文,再追踪这些内容由哪些接口返回,接口是否需要特定请求头或 Cookie;
- 检查渲染是否依赖滚动、点击等用户行为,这类触发条件在抓取时一般不成立;
- 确认标题、描述、canonical 等基础标签写在初始 HTML 里,而不是靠脚本注入;
- 最后再看索引状态,区分抓取阶段就没拿到内容,还是拿到了但判定为低价值。
四、抓取问题和索引问题不要混在一起
抓取到的 HTML 里缺正文,属于渲染与抓取层面的问题;正文齐全却仍未被索引,则更可能涉及页面质量、重复内容或站点整体信号。两者的处理方式完全不同,混着改容易白花力气。核对时先回答前一个问题,再讨论后一个问题,判断会清楚很多。
五、处理上的优先级
- 能服务端直出的内容尽量直出,尤其是标题、正文主体和主要导航;
- 必须异步加载的部分,保证接口无需登录、无需特殊请求头就能返回数据;
- 标题、描述、canonical、结构化数据放在初始 HTML 里,不依赖脚本写入;
- 避免把正文塞进点击后才展开的折叠区域;
- 列表、分页等重复性强的模板,优先保证首屏可见内容完整。
六、改完之后怎么确认
改动完成后不要只看浏览器显示。重新抓一次原始响应,确认正文是否出现;在搜索控制台重新请求抓取,等待快照刷新;再观察一段时间内该模板下页面的索引状态是否变化。渲染层面的调整通常需要经历一轮重新抓取,才会体现在索引结果里。
建议固定核对顺序:原始响应 → 渲染后 DOM → 抓取快照 → 索引状态。前三步解决的是搜索引擎能不能拿到内容,最后一步才讨论拿到之后要不要收。