很多页面的正文在浏览器里是完整的,但抓取端拿到的 HTML 里只有一句“加载中”。这类问题在收录环节很常见:页面既没有被屏蔽,也不是质量不够,而是关键内容一开始就不在初始 HTML 里。
先分清两件事:源码和渲染结果
抓取到一段 HTML 之后,搜索引擎通常会做一次渲染,把 JavaScript 执行完再取 DOM。理论上,渲染后的内容也能进入索引,但渲染排期有延迟、有资源上限,也更容易因为脚本报错或接口超时而失败。所以一个实用的判断标准是:这段内容在“查看网页源代码”里能不能直接搜到。搜得到,问题不大;搜不到,就要做好它可能被漏掉的准备。
另外要区分抓取与收录:抓取只是把 HTML 取回来,之后还要经过处理、去重、质量评估,才决定是否建立索引。渲染失败会卡在靠前的环节,后面的步骤也就无从谈起。
三类常见的“伪隐藏”内容
图片与 iframe 的原生懒加载
图片上使用原生的懒加载属性,只影响浏览器什么时候去下载图片,地址依然写在 HTML 中,图片本身仍能被发现。iframe 也是同样的道理。真正有问题的是把地址留空、等滚动到位置再用脚本赋值,这种做法会让图片和嵌入页面的 URL 在抓取阶段完全消失。
Tab、折叠面板、弹窗里的正文
如果这些内容从一开始就写在 HTML 中,只是用 CSS 控制显示与否,抓取端通常能看到。但不少实现走的是“点击后再请求接口、把返回结果插进 DOM”的路径,那么不点击就等于不存在。
- 产品参数放在“更多参数”折叠里,默认不请求;
- FAQ 的答案在点击时才拉取;
- 评论区、用户问答走接口加载,且每条内容没有可点开的独立 URL。
这几类内容往往包含长尾词和用户真实提问,丢掉它们,页面能匹配的查询就少了一大截。
无限滚动与“点击加载更多”
如果滚动只往同一个 URL 里追加卡片,后面的内容就没有自己的地址,也没有内链入口。更稳妥的替代做法是保留分页 URL,用可抓取的链接串起来,滚动加载只作为体验层的增强。
按这个顺序自查
- 用“查看网页源代码”,搜一段只在折叠或懒加载区域出现的关键句;
- 用抓取测试或渲染测试工具,看渲染后的 HTML 里这句是否出现;
- 如果渲染后才有,检查控制台是否报错、接口路径是否被 robots.txt 挡住;
- 再看这条 URL 有没有内链或 sitemap 入口,确认它能被发现;
- 最后核对索引状态,确认页面是否真的进了索引,而不是停在“已发现”。
渲染能让 JavaScript 生成的内容进入索引,但它不是把内容推迟到点击之后的理由。关键正文最好在初始 HTML 里就有。
调整方向
- 折叠内容默认输出在 DOM 中,用 CSS 控制可见性,而不是等点击再取;
- 图片保留原生懒加载属性,但地址必须写在 HTML 中,别用脚本后置;
- 评论区、问答区至少把前若干条服务端输出,或给每条内容独立 URL;
- 列表页保留分页链接,避免只靠无限滚动;
- 把接口路径一并检查,确认没有在 robots.txt 里被误屏蔽。
判断标准其实很简单:把 JavaScript 关掉,页面还剩多少正文?剩下的那部分,才是收录最稳的部分。