确认动态页面可见内容,不能只看浏览器里是否显示正常,也不能只靠“查看网页源代码”。正确做法是:先判断页面内容由服务端直接输出,还是由 JavaScript 在浏览器端渲染,再分别用抓取视角、渲染后 HTML 和实际用户视角交叉核对。对百度不收录的排查来说,关键不是页面“看起来有内容”,而是百度抓取和渲染后能否得到同样的正文、标题和链接。
很多动态页面用前端框架加载数据,浏览器打开时能看到商品、文章或列表,但右键查看源代码时,正文区域是空的。这只能说明初始 HTML 中没有正文,不能直接断定百度看不到内容。百度会尝试抓取并渲染部分 JavaScript 页面,但渲染能力、资源加载和等待时间都会影响结果。因此,需要确认的是“渲染后有没有内容”,而不是“源代码里有没有内容”。
第一步先看服务器返回的原始 HTML。可以用命令行工具模拟抓取请求,例如:
curl -A "Baiduspider" -L "https://example.com/page" -o page.html
打开 page.html,检查以下项目:
<div id="app"></div> 这类空容器;<noscript> 内容,以及它是否提供了核心信息。如果初始 HTML 没有正文,只能判断该页依赖后续渲染。此时不要立刻下结论,要继续检查渲染后的结果。
浏览器中按 F12 打开开发者工具,使用“元素”面板查看当前 DOM,而不是“查看源代码”。在控制台执行:
document.body.innerText.slice(0, 500)
如果这里能看到标题、正文和关键链接,说明浏览器渲染后内容存在。接下来还要确认这些内容是否在首屏可见、是否被 CSS 隐藏、是否在用户交互后才出现。百度不收录常见的原因之一是:内容需要点击按钮、滚动到底部或等待很久才加载,抓取和渲染时可能拿不到。
可以进一步在开发者工具的“网络”面板中禁用缓存并刷新,观察正文对应的数据请求是否成功。如果接口返回 403、超时或依赖登录,渲染后也可能没有内容。
动态页面确认可见内容时,建议按下面顺序逐项核对:
<a href>,而不是仅靠 JavaScript 点击事件;其中 robots.txt 的限制只影响抓取,不等于可靠的索引移除。如果页面被 robots.txt 阻止,百度可能无法抓取和渲染,也就难以判断可见内容。
如果确认正文只在客户端渲染后出现,可以根据页面重要程度选择处理方式。对于需要稳定收录的核心内容页,优先考虑服务端渲染或预渲染,让初始 HTML 就包含正文。对于交互性强、内容更新频繁的页面,至少要保证渲染后 DOM 中有完整正文,并减少对登录、弹窗和延迟加载的依赖。
一个假设例子:某商品列表页初始 HTML 只有空容器,数据由接口返回。用抓取视角请求时看不到商品名,但浏览器渲染后能看到。此时应检查接口是否允许百度抓取、渲染等待是否足够,并考虑把商品名和分类链接放入服务端输出。若接口本身返回 403,则问题已经定位在抓取权限,而不是页面结构。
下一步,选一个未被收录的动态页面,分别保存初始 HTML 和渲染后 DOM,对比正文、标题和链接差异。差异最大的部分,通常就是需要优先修复的位置。