确认百度蜘蛛能看到动态页面的可见内容,核心不是看浏览器里显示了什么,而是看服务器返回给爬虫的HTML源码中是否包含这些文字。最直接的办法是用百度搜索资源平台的抓取诊断工具,或使用curl命令模拟百度蜘蛛的User-Agent请求页面,然后检查返回的HTML里有没有目标内容。如果源码里只有空的容器标签和JavaScript代码,百度蜘蛛就无法确认这些内容。
动态页面通常依赖JavaScript在浏览器端渲染。用户在浏览器里看到完整内容,是因为浏览器执行了JS并修改了DOM。但百度蜘蛛抓取时,是否执行JS、执行到什么程度,取决于百度当时的渲染能力。因此判断依据应该放在服务器原始响应上,而不是截图或开发者工具里的Elements面板。
具体检查项:
curl -A "Baiduspider"请求目标URL,把返回的HTML保存下来。display:none或visibility:hidden。适用条件:这个方法适合服务端渲染、静态生成和纯前端渲染的页面。判断结果很明确——源码里有核心文字,才算可见内容有了基础;源码里没有,就不能假设百度蜘蛛一定会执行JS后看到。
如果发现源码里没有可见内容,改进方向通常有三种,代价和适用条件不同。
选择步骤:先抓取诊断确认百度蜘蛛实际拿到的HTML;如果核心内容缺失且页面有收录价值,优先考虑SSR或预渲染;如果只是少量次要内容缺失,可以先观察百度抓取诊断的渲染结果,再决定是否投入改造。
百度搜索资源平台提供的抓取诊断,可以查看百度蜘蛛抓取时返回的HTML、状态码和部分渲染信息。这是最接近百度实际抓取情况的检查方式。操作时注意:
robots.txt禁止抓取,渲染很可能不完整。需要特别提醒:robots.txt的抓取限制不等于可靠的索引移除。禁止百度蜘蛛抓取某个JS文件,可能导致页面渲染失败,但已经收录的页面不会因此自动消失。站点地图也不保证收录,它只是辅助发现URL。
有些动态页面源码里其实有文字,但被CSS隐藏,或者放在需要点击、滚动、切换标签后才出现的区域。百度蜘蛛对这类内容的可见性判断,和普通用户不同。
检查项:
<script>模板字符串里。display:none、visibility:hidden或零尺寸容器遮挡。fetch或XMLHttpRequest在页面加载后才请求内容。这类接口返回的数据,不一定进入百度蜘蛛看到的HTML。如果核心内容属于上述情况,优先把它改成初始HTML可见,或者至少保证有一个不依赖交互的静态版本可供抓取。
选一个你关心的动态页面,用curl -A "Baiduspider"抓取原始HTML,搜索页面核心文字。如果搜不到,再登录百度搜索资源平台做一次抓取诊断,对比诊断结果中的HTML源码。根据两次结果决定是改造渲染方式,还是先调整robots.txt和资源加载顺序。不要只凭浏览器截图判断百度蜘蛛能看到什么。