网站明明有内容,为什么AI抓不到?JavaScript、SSR与正文渲染检查指南
一个页面在浏览器里看起来正常,不代表爬虫看到的内容也完整。浏览器可能先下载一个几乎没有正文的HTML,再加载JavaScript、调用接口并把内容插入页面。任一环节失败,爬虫可能只看到:
<div id="app"></div>
先用症状定位
| 现象 | 常见原因 | 优先检查 |
|---|---|---|
| 浏览器正常,源代码无正文 | 纯客户端渲染 | SSR、SSG、预渲染 |
| 偶尔空白 | API超时或脚本错误 | 接口和错误监控 |
| 首页正常,详情页不可见 | 动态路由或接口依赖 | 详情页直达 |
| 标题有,正文缺失 | 正文异步加载 | HTML响应和接口 |
| 后半段缺失 | 依赖滚动或点击 | 懒加载逻辑 |
| 登录后正常,匿名不可见 | Cookie或权限依赖 | 匿名访问 |
| 200但显示错误 | 软404 | 状态码和正文 |
十分钟快速检查
1. 检查服务器返回的HTML
curl -L https://www.example.com/article/example -o page.html
grep "正文中的独特句子" page.html
能找到正文,说明正文已进入初始HTML;找不到但浏览器能看到,说明依赖JavaScript。
2. 禁用JavaScript
检查标题、H1、摘要、正文、品牌、联系方式和内部链接是否仍可理解。交互可以失效,但核心事实不应完全消失。
3. 检查渲染后DOM
网页源代码是服务器返回内容,开发者工具Elements是JavaScript执行后的DOM。源代码无正文、DOM有正文,说明使用客户端渲染。
CSR、SSR和SSG
CSR
正文由浏览器生成。适合后台、数据看板和高度交互应用,不适合让公开首页、服务页、文章页的核心信息完全依赖它。
SSR
服务器先生成完整HTML,再由JavaScript增强交互。更适合公开内容和需要稳定抓取的页面。
SSG
发布时预先生成静态HTML。适合文章、帮助中心、服务介绍和案例库。
企业可采用混合方案:公开内容使用SSR/SSG,后台和实时应用继续使用CSR。
常见失败点
- 关键JS被robots.txt禁止;
- CDN向机器人返回403或验证码;
- 正文API要求Cookie;
- API跨域失败;
- 接口超时;
- JavaScript运行时报错;
- 页面不存在却返回200;
- 正文依赖滚动或点击才加载。
重要正文不要依赖用户滚动或点击。图片可以懒加载,但文章正文、服务说明和核心参数应直接存在。
开发排查流程
curl -I https://www.example.com/article/example
curl -IL https://www.example.com/article/example
curl -L https://www.example.com/article/example | grep -E "<h1|<article|独特句子"
随后进行:匿名访问、控制台检查、禁用JavaScript、Search Console渲染检查和服务器日志检查。
验收清单
- URL直接返回200;
- 初始HTML含唯一title和H1;
- 初始HTML含摘要和主要正文;
- 公开内容无需登录;
- 正文不依赖点击和滚动;
- 关键JS和API无4xx/5xx;
- 不存在页面返回404或410;
- 移动端与桌面端核心内容一致。
先保证正文能够稳定到达机器,再讨论内容是否会被索引和引用。