用搜索引擎的 URL 检查工具或直接翻索引结果时,偶尔会遇到一种别扭的情况:标题、网址都对得上,抓取时间也很新,但快照里的正文几乎是空的,只剩导航、页脚和一句加载提示。这类页面常被误判成“内容质量差”,其实更常见的原因是:搜索引擎在收录时看到的那份 HTML 里,本来就没有正文。
先把“空”分成三种
同样是空白,成因并不一样,先归类再排查会快很多。
- 初始 HTML 里就没有正文:服务器返回的源码只有框架和脚本,内容要靠浏览器执行 JS 之后才出现。
- 有渲染,但渲染失败:JS 能跑,可它要请求的接口被挡、需要登录态或依赖时效 token,执行完依然是空。
- 内容存在但没被算进去:正文靠滚动或点击才插入,或者被遮罩层、折叠面板藏起来,首屏之外的部分没进快照。
按顺序核对的四步
- 看无 JS 的源码。用 curl 抓一次原始响应,或在浏览器里禁用 JavaScript 后刷新,看看正文是否还在。如果这时页面是空的,问题就落在渲染环节,而不是内容本身。
- 看 robots.txt 是否挡了资源。有些站点只允许抓 HTML,顺手把 JS、CSS 或接口路径一起屏蔽了。渲染需要的资源取不到,页面自然渲染不出来。
- 看接口的可抓性。数据接口是否需要 Cookie、登录态、Referer,或者 URL 里带了会过期的签名参数。这类接口对普通浏览器有效,对爬虫往往无效。
- 看内容的触发方式。正文是否只在滚动到某个位置、点击“展开更多”之后才加载;折叠起来的内容是否连 DOM 都没生成。
几个容易忽略的细节
渲染不是无限期的
搜索引擎愿意为页面执行 JS,但通常有时间与资源上的限制。页面依赖的脚本越多、请求链越长,渲染出完整内容的概率越低。把关键内容拆成多次异步请求,等于把风险叠加起来。
分页与折叠最好给独立 URL
如果长文被拆成“点击加载下一页”,或者评论区默认收起,搜索引擎很可能只看到第一段。给分页、展开后的内容一个可通过链接直接访问的地址,比依赖交互更稳。
同一页面在不同引擎下表现可能不同
各家的渲染能力、资源配额和等待时间并不一致。同一个 URL 在一个引擎里快照正常、在另一个引擎里是空壳,这种情况并不罕见,核对时最好分引擎各看一次。
可以落地的调整方向
- 对正文页做服务端渲染或预渲染,让初始 HTML 至少带上标题、正文主体和关键链接。
- 放开渲染所需的 JS、CSS 与数据接口,不要用 robots.txt 一刀切。
- 把核心内容放在首屏的 DOM 里,交互只负责展示,不负责生成。
- 改完后对比“渲染前源码”和“渲染后 DOM”,确认差异确实缩小了。
- 保留一份抓取日志,观察一段时间内的抓取与索引状态,而不是看一次就下结论。
索引快照是搜索引擎看到的那一份页面,不是你打开浏览器时看到的那一份。核对收录问题时,先对齐这两者,再谈内容质量。
前端渲染本身没有问题,问题在于有没有给爬虫留下一份能直接读懂的内容。把这一层补上,剩下的收录节奏交给时间就好。