跳至正文
GEO · Google SEO

AI爬虫能读JavaScript吗?从HTML、渲染到平台证据逐步查

// / / 光算科技

浏览器能显示内容,不等于所有抓取程序都取得了相同内容。排查JavaScript页面时,先比较服务器返回的HTML、禁用脚本后的页面、执行脚本后的DOM,再看目标平台实际取得或处理的版本。Google与Bing都有公开的渲染能力说明;其他产品要按具体机器人、访问用途和当前证据判断,不能统称为“AI都不执行脚本”。

对企业官网,先选一条真正影响客户决策的信息,例如产品规格、适用型号或询价条件。核它在哪一步出现,比只看首页是否漂亮、框架是否流行更容易定位问题。即使内容可取得,也仍要分别检查规范网址、索引资格和实际搜索或AI回答。

四种观察各自说明什么

观察对象主要用途不能替代什么
HTTP响应头和HTML原文核本次请求的状态、跳转、控制指令和返回内容不代表脚本执行后的DOM,也不证明平台使用了这次响应
禁用JavaScript的浏览器核无脚本时用户实际可见的信息与入口仍会解析HTML并应用CSS,不等于原始源码或某个爬虫
启用脚本后的DOM与网络记录定位接口、脚本、交互和等待条件带来的变化本机成功不能证明搜索引擎或AI产品已成功渲染
平台工具与真实访问证据核对应URL、时间和工具所报告的抓取或渲染状态实时测试不等于已索引;索引也不等于被某次回答引用

比较前先统一条件:精确URL、登录状态、语言、Cookie、请求头和测试时间。服务端也可能按这些条件返回不同内容;若原始响应已不同,就不能把所有差异都归因于JavaScript。保存原件后再做文本提取,避免提取器丢掉表格、折叠区或正文节点。

一次本机教学演示:同一响应,两种浏览器结果

本次用本机测试页演示库存区:HTML只提供“库存信息尚未加载”的容器,外部脚本再请求一个教学接口并更新页面。分别在600像素和320像素宽度下启用、禁用JavaScript;四次页面响应字节相同,启用脚本后出现虚构的“12件”和“3个工作日”。这些数字只用于识别两个状态,不是客户库存、真实交期或业务效果。

同一本机教学页禁用脚本时库存尚未加载,启用后显示虚构库存12件和交期3个工作日
本次本机教学截图:①禁用JavaScript,②启用后由接口载入虚构库存12件、交期3个工作日。两种状态返回的页面HTML字节相同;桌面并列、手机上下排列。截图只说明此演示的脚本依赖,未模拟或测试Google、Bing及任何AI平台。

这个实验能证明该测试页的库存文字依赖脚本和接口,不能证明某个AI产品会怎样读取它。无脚本截图也不是HTML源码截图:浏览器仍做了布局,并显示noscript提示。若真实页面把数据放在内嵌JSON里,简单搜索源码可能找到数字,但这也不等于用户能看到对应说明;要继续核数据的语义和呈现位置。

Google公开了抓取、渲染与索引的区别

Google的JavaScript SEO基础文档把处理分为抓取、渲染和索引。Googlebot先检查抓取权限,再取得并解析响应;对于应用外壳页面,需要执行JavaScript才能出现真正内容。抓取队列与渲染队列是不同环节,不宜解释成每次请求都立刻完成渲染。

文档说明,返回200的页面会进入渲染队列,除非相应robots meta或响应头告知不要索引;即使没有JavaScript,也可能进入该队列。资源允许后,无头Chromium执行脚本,再解析渲染后的HTML。非200页面可能跳过渲染。这个流程没有给每个网站承诺统一的完成时间,也不能把“进入队列”写成“内容已被索引”。

被robots.txt阻止的页面或脚本会影响Google的渲染。需要同时检查页面、脚本、样式和数据请求:关键脚本被拦、接口返回错误或内容必须点击后才请求,都可能使测试结果不同。但某个文件失败不意味着页面“永远无内容”,仍要核有无服务端正文、缓存或降级内容。

还有一个常见误配:原始HTML先输出noindex,再打算靠脚本删除它。Google遇到noindex可能跳过渲染,因此不要把这种做法当作可靠的临时占位方案。需要索引的公开页面,应从正确的原始响应开始核验。

Bing与其他产品分别核,不从UA猜能力

Bing在2019年公开说明采用Microsoft Edge执行JavaScript并渲染网页;本次取得的Bing帮助正文也说明它会定期更新网页渲染引擎。不能因相关段落同时解释UA版本号,就否定其公开的渲染能力。反过来,具备渲染引擎也不保证每个页面、每次访问或所有Microsoft产品都按同一种方式处理。

OpenAI、Anthropic与Perplexity的本次所核爬虫文档,分别说明搜索、训练或用户触发访问等用途及访问控制。在这些具体文档中未看到足以保证所有页面JavaScript执行的承诺;这只能说明本次资料的范围,不能推出厂商所有产品从未渲染网页。

日志中一个带机器人名称的UA也不是完整证据。应按相应平台方法核请求身份、时间、URL和响应;只看到脚本请求不证明它已执行,只看到页面请求不证明索引或引用成功。用户触发的浏览器、搜索抓取器与训练爬虫可能是不同访问路径,分别记录。

哪些内容适合先进入HTML

建议优先让公开的主体说明、关键参数及单位、适用条件、型号关系和必要链接进入初始HTML,减少读取方必须执行脚本才能取得基本信息的依赖。Google的AI功能说明也建议重要内容以文本形式提供;这并不是禁止使用JavaScript或保证任何AI会引用。

价格、库存与交期要同时考虑时效。如果服务端提供的是缓存值,页面应正确表达其条件,并让更新机制与实际业务一致;不能为追求“源码有数字”输出已经失效的值。没有公开固定价格的产品,也不应在HTML或标记里编一个价格。

轮播、筛选器、地图和配置器也可能承载关键事实,不能按组件名称直接归为“无关交互”。例如配置器决定某型号是否兼容,就要给用户可理解的结果、条件和失败提示;需要搜索发现的独立产品页仍应有可直接打开的稳定URL。是否适合索引筛选结果,则按内容价值与重复关系判断。

先定位缺口,再选择渲染方案

服务端渲染、构建期静态生成与客户端渲染可以组合使用。更新频率、缓存刷新、发布耗时、服务器负载和用户交互会影响选择;预渲染也并非必然只适合短期止血。关键是实际响应是否及时、完整,以及后续hydration是否把正确内容改错。

不必因为用了Vue或React就重建整站。如果产品页源码已含主体,问题可能在接口错误、链接发现、路由、控制指令或内容本身。可按Vue/React网站的渲染与路由诊断逐项检查;需要针对缺失内容找证据时,继续看JavaScript渲染问题的检测方法。

  1. 直接访问目标深层地址。保存原始响应与跳转链,确认不是登录页、挑战页或返回200的错误壳。
  2. 按语义查关键内容。同时核可见正文、表格、链接及内嵌数据;一次字符串没匹配到,可能涉及编码、空白、分节点或另一语言版本,不直接宣布内容不存在。
  3. 比较无脚本与有脚本结果。等待具体目标节点或接口完成,记录失败资源和控制台错误;固定等待几秒不能证明所有异步任务完成。
  4. 再看对应平台工具。区分实时测试、已索引数据及工具所提供的渲染HTML,不把本机截图换名为Googlebot实际所见。
  5. 发布后重新取回。检查源站、CDN及用户可见内容,同时验证必要内链和错误路径;记录抽样模板及未覆盖范围。

脚本也可能改变canonical、标题或结构化数据。出现原始HTML与渲染DOM不一致时,沿SSR与hydration的canonical冲突排查核谁在何时输出了什么,而不是只看最后一个标签。标签存在本身也不保证Google选择该规范地址。

后续可把Sitemap、canonical与索引检查放到同一目标URL记录中。相关文件话题见llms.txt的用途与边界;文件不能替代本次HTML或渲染核验,是否被读取要看具体服务,不能把Google不需要它扩大成对所有系统都无用。

如果需要把内容、技术与海外市场的实际问题一起处理,可结合光算GEO服务确定项目范围。交付时分别说明已修复的页面行为、平台工具已核状态,以及仍需观察的索引、引用和咨询结果。