确认动态页面可见内容的核心方法,是查看浏览器完成脚本执行后的渲染结果,而不是只看服务器返回的原始 HTML 源码。很多动态页面的正文由 JavaScript 在浏览器端生成,原始源码里可能只有空容器和脚本引用。如果只凭源码判断,容易把实际可见的内容误判为不存在,也可能把已经隐藏或删除的内容误判为仍然可见。正确做法是同时收集三类证据:渲染后的页面文本、内容所在容器的可见状态、以及该内容对搜索引擎抓取的实际暴露情况。
动态页面常见的结构是:服务器先返回一个骨架页面,再由脚本请求数据并写入页面。此时用“查看网页源代码”搜索某段文字,可能完全找不到,但用户在浏览器里能看到。反过来,源码里存在某段文字,也不代表用户能看到,因为它可能被 CSS 隐藏、被脚本移除,或位于折叠区域之外。
因此判断“可见内容”要分两层:第一层是渲染后 DOM 中是否存在该文本;第二层是该文本对应的元素是否处于可见状态。只有两层都成立,才能较有把握地说这段内容对用户可见。
这是最直接、可实际执行的检查方式,适用于你能用浏览器正常打开该页面的情况。
getComputedStyle($0).display 和 getComputedStyle($0).visibility,其中 $0 指当前选中的元素。若结果为 none 或 hidden,该内容对用户不可见。$0.getBoundingClientRect(),若宽高均为 0,通常说明它没有被实际渲染出可见区域。判断结果:元素面板能搜到、display 不是 none、visibility 不是 hidden、尺寸大于 0,可以认为该内容已经渲染且可见。若元素面板搜不到,说明脚本可能尚未执行、请求失败,或内容确实不存在,需要继续看网络请求和控制台报错。
用户能看到,不等于搜索引擎一定能拿到同样的内容。动态内容依赖脚本执行,而不同搜索引擎对脚本渲染的支持程度和处理时机并不相同,需要分别核查,不能因为一个搜索引擎能处理就推断其他搜索引擎也一样。
可以做的核查包括:
如果抓取测试结果里没有目标文本,而浏览器里可见,说明问题很可能出在渲染阶段,例如脚本被阻止、接口返回失败或加载超时。这时应先修复渲染链路,而不是急于提交收录。
有些动态页面会把内容放在标签页、折叠面板或懒加载区域中。它们在初始视口内不可见,但展开后可见。判断这类内容时要注意适用条件:
这里要区分“可能原因”和“已经定位的原因”。搜索不到目标文本,可能是脚本未执行、接口失败、内容被条件渲染跳过,也可能是内容本身不存在。只有结合控制台报错、网络请求状态和 DOM 检查结果,才能确定是哪一种。
面对“收录好的域名”下的动态页面,建议固定一套取证顺序,避免凭感觉判断:
下一步,选取一个具体动态页面,按上述流程完整走一遍,把浏览器渲染结果与搜索引擎抓取测试结果并排比对。两者不一致的地方,就是需要优先定位的技术问题所在。