动态页面要确认可见内容,不能只看浏览器里“看起来有字”,而要看搜索引擎抓取到的HTML响应中是否包含这些文字。更准确地说,应把“用户可见”“HTML源码可见”“渲染后可索引”三种状态分开核对。很多页面用JavaScript在浏览器端填充内容,用户能看到,但初始HTML里没有对应文字,抓取程序未必能等到渲染完成,于是页面可能被认为内容稀薄,进而影响被收录的速度与稳定性。
这是动态站点最典型的误判。浏览器会执行脚本、请求接口、再把数据插入页面,所以人眼看到的是最终结果。而搜索引擎抓取时,可能先拿到一份未执行脚本的HTML,也可能在渲染队列中等待后再执行。两种情况下看到的正文可能不同。
因此,“页面能访问”不等于“正文可被抓取”,“接口返回了数据”也不等于“这些数据会成为页面可见内容”。需要确认的是:抓取程序拿到的HTML里,是否已经包含标题、主体文字和关键链接。若正文完全依赖脚本注入,收录表现通常更不稳定,但这不是绝对失败,只是需要额外核查渲染结果。
动态页面要优先保证核心正文至少有一种稳定的可抓取路径。若正文只存在于接口JSON中,而HTML和渲染结果都读不到,那么“可见内容”对抓取程序而言就是不存在的。
noindex、登录权限或robots.txt限制。需注意:robots.txt的抓取限制不等于可靠的索引移除,它只控制抓取,不保证页面一定从索引中消失。判断结果可以这样看:如果初始HTML和渲染后DOM都能读到核心正文,说明可见内容基本可靠;如果只有渲染后能读到,需要接受抓取和渲染存在延迟,并持续观察;如果两者都读不到,应先改造成服务端输出或预渲染,而不是反复提交URL。
若动态页面数量少、更新频率低,可优先采用服务端渲染或预渲染,让核心正文直接出现在HTML中。若页面数量大、交互复杂,可保留客户端渲染,但必须保证标题、首段、主要链接和关键数据在渲染后可读,并单独核查每个模板。
一个假设例子:某商品列表页由接口返回数据后由脚本插入。查看源代码时,只有<div id="app"></div>,没有商品名称。此时用户能看到商品,但抓取程序在初始HTML中读不到。若把商品名称和简介改为服务端输出,抓取程序就能直接读到;若继续依赖脚本,则需确认渲染服务确实执行了脚本,并检查接口是否被robots.txt阻止。这个例子的判断条件是:正文是否出现在初始HTML或渲染后DOM中,而不是页面是否好看。
另外,HTTPS不保证安全无漏洞,也不保证排名;它只是传输层条件之一。确认可见内容时,不要把HTTPS当成内容可抓取的证明。
优先检查那些“用户能看见、但源代码搜不到正文”的模板。通常首页、栏目页和详情页各选一个代表URL,按上面的步骤对比初始HTML与渲染后DOM。若核心正文缺失,先改这一个模板,再观察抓取和收录变化。不要同时改全站,也不要只提交站点地图就等待结果。
下一步:选一个动态页面,用“查看源代码搜索正文”和“禁用JavaScript刷新”两种方式各测一次,记录正文是否可见,再决定是改服务端输出、预渲染,还是继续观察渲染抓取。