确认动态页面在百度眼中是否有可见内容,核心是检查三件事:百度蜘蛛拿到的HTML里有没有正文、这些正文是否依赖JavaScript才出现、页面是否被robots.txt或登录状态挡住。只要蜘蛛抓取时看到的是空壳,收录就无从谈起。
要查什么:不执行JavaScript时,页面返回的HTML里是否包含标题、正文段落、关键链接。
怎么查:用百度搜索资源平台里的抓取诊断工具,或者用curl命令直接请求页面。例如:
curl -A "Baiduspider" https://example.com/detail?id=123
结果说明什么:如果返回的HTML里只有<div id="app"></div>和一堆脚本标签,正文全靠浏览器执行JavaScript后渲染,那么百度蜘蛛很可能看到的是空页面。反之,如果标题、正文、内链都出现在原始HTML中,说明内容对蜘蛛可见,可以进入下一步。
适用条件:这一项优先查,因为它是动态页面收录失败最常见的原因。时间和人手有限时,先抽10个重要动态页做这个检查,比全站铺开更有效。
要查什么:页面正文是在服务器端生成,还是浏览器执行脚本后才插入DOM。
怎么查:在浏览器里禁用JavaScript后刷新页面,看正文是否还在;或者查看网页源代码(不是审查元素),对比源代码和渲染后的DOM差异。如果源代码里没有正文,而审查元素里有,说明正文是脚本渲染出来的。
结果说明什么:百度对JavaScript渲染有一定处理能力,但渲染需要额外抓取和计算资源,动态参数页、层级较深的页面更容易被漏掉。原始HTML中已有正文的页面,被抓取和判断的成本更低,收录更稳定。这不是说JS渲染一定不收录,而是说它多了一层不确定性,需要单独验证。
判断结果:禁用JS后正文消失,就把该页列入需要服务端渲染或预渲染的清单;禁用JS后正文仍在,说明可见性没问题,可以把精力放到别处。
要查什么:robots.txt是否屏蔽了动态参数路径,页面返回的状态码是否为200。
怎么查:直接访问站点的/robots.txt,看Disallow规则是否覆盖了带?参数的URL;再用抓取诊断或curl查看HTTP状态码。
结果说明什么:robots.txt禁止抓取,蜘蛛就不会去取页面内容,自然谈不上收录。需要区分的是,robots.txt只能阻止抓取,不能可靠地把已收录页面从索引中移除,两者不是一回事。如果页面返回302跳转到登录页、404或500,蜘蛛同样拿不到正文。
检查项:确认重要动态页返回200;确认robots.txt没有误伤需要收录的参数路径;确认没有把动态页统一跳转到首页。
要查什么:蜘蛛访问时是否被登录墙、验证码、地域判断或强制弹窗拦住。
怎么查:用未登录状态、不同来源IP或抓取诊断模拟访问,观察首屏返回的是正文还是登录提示。
结果说明什么:如果正文只在登录后可见,或者弹窗遮罩让正文不在初始HTML里,蜘蛛看到的就是无内容页面。这类页面即使被收录,也可能只收录到登录提示文字。
判断结果:内容确实需要登录才能看的,不要指望百度收录正文;可以改为让摘要部分公开可见,或另建可公开访问的静态版本。
要查什么:重要动态页是否提交了站点地图,抓取诊断返回的内容是否与预期一致。
怎么查:在搜索资源平台提交包含动态页URL的sitemap,再用抓取诊断逐个检查重点页,看返回的HTML、状态码和正文。
结果说明什么:站点地图只是告诉百度有哪些URL,不保证一定收录,但它能减少蜘蛛发现页面的成本。抓取诊断返回的正文与用户看到的正文一致,才说明可见性过关。
执行顺序建议:先做原始HTML检查,再做JS渲染判断,然后排查robots.txt和状态码,最后处理登录与弹窗限制。这套顺序按影响面从大到小排列,适合人手有限时优先处理。
下一步:挑出流量或转化价值最高的10个动态页,按上面的清单逐项记录结果,把“原始HTML无正文”和“被robots.txt拦截”两类问题先修掉,再重新提交抓取。