⭐ 推荐:社区规则条款 V1.0

如何分析蜘蛛爬虫对网站 JS 动态加载内容的抓取?

lqyyzz
lqyyzz 观望站长
发布于 2026-10-14 09:59 ·1 浏览 ·0 回复
内容摘要

判断爬虫能否抓取 JS 动态内容应比对访问日志、原始 HTML 与渲染后 DOM,并用反向 DNS 验证身份、观察静态资源和接口请求;Googlebot/Bingbot 稳定渲染,百度有限,其余多不执行 JS,可借 Search Conso

结论先说:要判断爬虫能不能抓到 JS 动态加载的内容,唯一可靠的办法是把「爬虫访问日志」「原始 HTML(关掉 JS 的返回)」「渲染后 DOM」三份数据对齐比对;只看 UA 或只看收录快照都会误判。Googlebot、Bingbot 走的是 Chromium 渲染管线,百度主要靠 Baiduspider-render 做二次渲染,覆盖率和时效都弱于 Google,其余多数爬虫基本不执行 JS。

为什么不能只看 UA 就判断爬虫会不会执行 JS?

结论:UA 可以随意伪造,而且「爬虫来过」不等于「它渲染了 JS」。先验明身份,再看行为。

验证身份用反向 DNS:Googlebot 的 IP 反解到 googlebot.com 或 google.com,且正向解析能回到同一个 IP;Baiduspider 反解到 *.baidu.com 或 *.baidu.jp。正反两次解析都吻合,才认定为真爬虫,否则日志里的「Googlebot」很可能只是别人伪装的采集器。

身份确认后再看它请求了什么。这一步是判断渲染能力的核心。

日志里看什么,才能确认爬虫执行了 JS?

结论:看三层请求是否来自同一个爬虫 IP——第一层 HTML 文档、第二层静态资源(.js/.css/字体)、第三层 XHR/fetch 接口。

具体做法:在日志里按 UA + IP 分组,过滤出 .js、/api/、/graphql 等路径,统计每个爬虫的请求构成。如果某个爬虫只请求 HTML、从来不碰你的 bundle.js 和列表接口,那它拿到的就是没有内容的空壳页面。

注意一个干扰项:如果你已经上了预渲染服务或 CDN 缓存了渲染结果,日志里同样不会出现 JS 请求,但内容照样能被收录。所以要把它和「关键词是否被搜到」结合判断,不要单看日志下结论。

Google 和百度对 JS 的抓取能力差在哪?

结论:Googlebot 和 Bingbot 具备稳定渲染能力,百度是有限渲染,其他搜索引擎基本当没有 JS 处理。

Googlebot 使用常青版 Chromium,抓取分两个阶段:先取原始 HTML,把需要渲染的页面放进渲染队列,渲染结果可能明显晚于首次抓取。因此首屏核心内容不能只靠 JS 拼出来。Baiduspider 长期不执行 JS,后来补充了 Baiduspider-render(UA 形如 Baiduspider-render/2.0),它也是先抓原始 HTML、判断需要渲染后再排队,覆盖面和时效都不如 Google。至于 360Spider、Sogou、YisouSpider 等,执行能力有限甚至完全不做渲染。

有哪些工具能直接看到「渲染后的 HTML」?

结论:Google 侧有官方可视化工具,百度侧只能靠日志 + 抓取诊断间接判断。

  • Google Search Console → URL 检查 → 「查看已抓取的页面」,能对比原始 HTML、渲染后 HTML 和屏幕截图,还能看到它加载了哪些资源。
  • 富媒体搜索结果测试、移动设备适合性测试会真实渲染页面,适合验证单页。
  • 本地复现:用 curl -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" https://你的域名/页面 | grep "关键词" 看原始 HTML 有没有内容;再用 puppeteer / Playwright 渲染同一 URL,把两份文本做 diff,差异越大风险越高。
  • 百度搜索资源平台的抓取诊断可以发起一次真实抓取并展示返回内容,用它对比服务端输出即可。

JS 内容抓不到,应该怎么改?

结论:优先做服务端渲染,动态渲染只作为过渡方案。

  1. 用 SSR 或同构框架(Next.js、Nuxt)把标题、正文、价格、分页链接等服务端直接输出。
  2. 动态渲染(dynamic rendering):识别爬虫 UA 返回预渲染 HTML,用户仍走 SPA。Google 官方把它定位为过渡方案,别当长期架构。
  3. 预渲染 + 缓存:用 headless 浏览器生成静态 HTML,配 TTL 缓存,成本低但要注意内容时效。
  4. 内链必须写成 <a href>,不要用 onclick="location.href";History API 路由要保证每条 URL 直接访问返回 200 且带内容。
  5. 避免长时间轮询和无限动画,渲染有超时限制,页面迟迟不进入空闲状态会导致渲染结果不完整。

上线后怎么持续监控?

结论:每周做三个固定动作就够。一是看日志中爬虫对 JS 和接口的请求占比是否稳定;二是在 GSC 里抽查已抓取页面的渲染截图;三是用 site: 加核心关键词抽查 10 个 URL 的摘要是否包含 JS 渲染出来的文字。如果 Baiduspider 从来不请求你的 bundle.js,且抓取诊断返回的 HTML 里没有正文,那就必须上 SSR,没有别的捷径。

一句话收束:判断靠三份数据对齐,解决靠服务端渲染,监控靠日志与 GSC 截图定期抽查——这三件事做完,JS 抓取问题基本就没有盲区了。

如何分析蜘蛛爬虫对网站 JS 动态加载内容的抓取?,本文转载自 GJ站长论坛,原文地址:https://www.gj0.com/thread-1949.html
转载请注明出处,版权归原作者所有。
—/ 5暂无评分
还没有评分,来打第一分吧

全部回复 0

还没有回复,来抢沙发~