# AI 爬虫不会执行 JavaScript

> GPTBot、ClaudeBot 与 PerplexityBot 只解析服务器返回的原始 HTML，从不执行脚本，Google 是唯一的例外。客户端渲染的参数化目录，在 AI 助手眼中只是一具空壳。本文讲清如何用一条 curl 命令测出你的产品目录是否可见，以及如何在不重写整站的前提下把它修好。

**Language:** zh-Hans  
**Published:** 2026-08-09  
**Category:** Technical · **Tags:** AI crawlers, JavaScript rendering, server-side rendering, GPTBot, structured data, product data  
**Canonical:** https://partsgraph.ai/zh/blog/ai-crawlers-do-not-run-javascript

## 简而言之

**GPTBot、ClaudeBot 这类 AI 爬虫会执行 JavaScript 吗？**

不会。Vercel 与 MERJ 基于单月承载 5.69 亿次 GPTBot 请求的网络所做的联合分析发现，没有任何证据表明 GPTBot、ClaudeBot、PerplexityBot 或 Meta 的爬虫会执行 JavaScript：它们只解析服务器返回的原始 HTML，并丢弃其中的脚本。Google 是唯一的例外，因为 Gemini 沿用了 Googlebot 的渲染基础设施。如果你的参数化目录在客户端组装产品数据，那么 AI 助手看到的就只是一具空壳，本该出现规格参数的地方空无一物。

---

## 简短的答案

AI 爬虫不会执行 JavaScript。当 GPTBot、ClaudeBot 或 PerplexityBot 请求一个页面时，它执行的是一次普通的 HTTP GET，取走服务器返回的字节，再按文本解析。没有浏览器，没有 DOM 构建，没有水合，也不会等待 XHR 返回结果。Vercel 与 MERJ 基于单月承载 5.69 亿次 GPTBot 请求和 3.70 亿次 ClaudeBot 请求的网络所做的联合分析发现，没有任何证据表明主流 AI 爬虫会执行 JavaScript。这些爬虫有时确实会下载脚本文件——GPTBot 在 11.50% 的请求中抓取了 JavaScript，ClaudeBot 为 23.84%——但下载之后从不运行它们。

> **Figure.** What a browser receives versus what an AI crawler receives for the same product page.

Google 是唯一的例外，这也正是许多团队至今没有察觉到问题的原因。Googlebot 运行着一套无头 Chromium 渲染服务，Gemini 则以这套基础设施作为事实依据。因此，一个客户端渲染的参数化目录完全可以在 Google 搜索中获得很好的排名，同时又在 ChatGPT、Claude 和 Perplexity 中彻底缺席。而这两类受众如今已不再是同一批人：Forrester 的 2026 年采购方研究发现，**94% 的企业采购者已在采购过程中使用 AI**，Adobe 也测得 2026 年第一季度零售网站的 AI 引荐流量**同比增长 393%**。

## GPTBot 实际收到的是什么

有必要把这里涉及的两份文档说清楚，因为大多数目录团队从头到尾只看过第二份。

**原始 HTML** 是源服务器写入响应的那段字节流。它就是 `curl` 打印出来的东西、`view-source:` 显示的东西，也是纯文本 HTTP 客户端所解析的东西。

**渲染后的 DOM** 则是浏览器解析完那份 HTML、下载并执行完每一个脚本、完成每一次 `fetch()` 调用、应用完每一处变更之后，留在内存里的东西。它就是浏览器开发者工具 Elements 面板中显示的内容。

在一个现代 SPA 目录里，这两份文档几乎毫无共同之处。原始 HTML 只是一具空壳：一个 `<div id="root">`、一份预加载清单，外加上百 KB 的打包文件引用。每一条有意义的字符串——型号、封装、容差、工作温度范围、RoHS 状态、生命周期状态、库存、价格阶梯——都是稍后才到达的，来自一次爬虫永远不会发起的 API 调用。

> AI 爬虫看到的只有你的原始 HTML，此外别无他物。如果某项规格没有出现在服务器返回的字节里，那么对模型而言，这项规格就不存在。

## 哪些客户端会渲染，哪些不会

| 客户端 | 运营方 | 是否执行 JavaScript | 用途 |
|---|---|---|---|
| GPTBot | OpenAI | 否 | 训练数据采集 |
| OAI-SearchBot | OpenAI | 否 | 为 ChatGPT 建立搜索索引 |
| ChatGPT-User | OpenAI | 否 | 针对用户提问的实时抓取 |
| ClaudeBot | Anthropic | 否 | 训练数据采集 |
| PerplexityBot | Perplexity | 否 | 搜索索引 |
| Meta-ExternalAgent | Meta | 否 | 训练与索引 |
| Bytespider | ByteDance | 否 | 训练数据采集 |
| Googlebot | Google | **是**，无头 Chromium | 搜索，以及为 Gemini 提供依据 |
| Applebot | Apple | **是**，可能在浏览器中渲染 | Siri、Spotlight、Safari |

表中每一个“否”都是 Vercel 与 MERJ 数据集中实测到的行为，而不是推断。每一个“是”都有运营方的公开文档支持：Google 公布了自己的渲染流程，Apple 自家的爬虫文档也写明 Applebot“可能在浏览器中渲染你网站的内容”。Anthropic 较新的 Claude-SearchBot 与 Claude-User 出现在该研究之后，未被单独测量；此后也没有任何运营方宣布为它们建立渲染流程。

这带来的实际后果，是一种很不利的不对称。渲染是抓取过程中昂贵的那一环，而省掉这一环的运营方，恰恰就是如今横在你的产品与你的买家之间的那些。

## 为什么参数化目录比其他任何页面都失败得更彻底

Adobe 在 2026 年 4 月的分析中为零售页面的机器可读性打分，结果发现产品详情页只有 **66%——所有页面类型中最低的**，低于首页（75%）、类目页（74%），甚至低于 FAQ 页面（80%）。这个排序并非偶然。承载着最结构化、最有价值、与决策最相关数据的页面，恰恰也是用 JavaScript 堆得最多的页面。

大部分损失可以归结为五种模式：

1. **筛选状态只存在于客户端。**你的参数选型器是一个从本地 store 取数的 React 组件。“0603、100nF、X7R、50V”这样的组合没有对应的服务端渲染 URL，因此爬虫无从抓取，也无从引用。
2. **规格表其实是一个 API 响应。**页面外壳先渲染出来，然后由一次对 `/api/product/attributes` 的请求把表格填满。爬虫止步于外壳。
3. **价格与可用库存被刻意放在客户端。**从缓存角度看这很合理，但对机器可见性是致命的，因为看不到库存的模型不会推荐这个型号。
4. **标签页和折叠面板延迟加载内容。**数据手册、应用笔记、合规证书和 CAD 链接通常都是点击之后才加载的。而爬虫从不点击。
5. **无限滚动取代了分页。**从第 51 个产品开始，根本就没有可抓取的 URL。

2026 年 8 月，Partsgraph 审计了全球 984 个分销商与制造商域名，覆盖北美、欧洲和亚洲。AI 可见性得分的中位数是 **100 分中的 50 分**，而且**样本中有 70% 被评为 D 级或 F 级**。大约有一半的网站，无法向一个标准的非浏览器客户端提供哪怕一个可读的目录页面。电子元器件分销是其中最弱的细分领域，中位数仅为 34。

## 我如何测试 AI 爬虫能否读取我的目录？

请针对你自己的源站来做这件事。伪造爬虫 user-agent 去测试竞争对手的网站只会得到假阴性结果，因为企业级机器人管理系统是按来源 IP 而非 user-agent 字符串来验证爬虫的——一个来自未知地址的伪造请求头，无论 robots.txt 怎么写都会被拦下验证。

1. **抓取原始 HTML。**挑出你最有价值的那一个产品页面。

```
curl -sS --compressed -o page.html -w "status=%{http_code} bytes=%{size_download}" "https://example.com/products/part-number"
```

2. **在字节里查找型号。**不是在浏览器里查——是在文件里查。

```
grep -c "MPN-12345" page.html
```

如果返回的是 `0`，那么没有任何 AI 爬虫能够识别出这个页面讲的是那个型号。

3. **查找三个参数值**，也就是你认为工程师会拿来筛选的那些参数。

```
grep -oiE "operating temperature|tolerance|package|rohs|lifecycle" page.html | sort | uniq -c
```

4. **数一数结构化数据块的数量。**

```
grep -c "application/ld+json" page.html
```

结果为零，说明没有任何机器可读的产品记录。结果为一个或多个，那你应当把它提取出来，验证它确实带有 `sku`、`mpn`、`gtin`、`brand`、`offers` 以及你关键的 `additionalProperty` 条目，而不只是一串面包屑导航。

5. **与渲染后的页面做对比。**在禁用 JavaScript 的浏览器中打开同一个 URL。留下来的内容，大致就是爬虫拿到的内容。它与正常页面之间的差距，就是你的不可见部分。

6. **检查整条路径，而不是单个页面。**对类目页、搜索结果页、数据手册链接和 CAD 下载重复上述步骤。一个爬虫即便能读懂产品页，如果无法从可抓取的类目列表走到那里，照样寸步难行。

一个通过测试的页面，会出现几十次型号，参数标签以文本形式存在，并且至少有一个 JSON-LD 块。作为参考，一个构建良好的产品页面通常会返回 60–200 KB 的 HTML，其中包含完整的规格表；而一个失效的 SPA 外壳只返回 4–15 KB，里面除了打包文件引用什么都没有。

## 如何在不重写网站的前提下修好它？

你不需要更换技术平台，你需要的是让源站返回的字节里包含事实。有四条路径，而且它们并不互斥。

| 方案 | 投入 | 解决了什么 | 主要风险 |
|---|---|---|---|
| 产品路由的服务端渲染 | 高 | 一劳永逸地解决全部问题 | 更换平台的成本与回归风险 |
| 预渲染 / 动态渲染 | 中 | 原始 HTML 中的内容 | 价格与库存的缓存过期 |
| 服务端渲染的 JSON-LD | 低 | 机器可读的事实 | 正文仍为空时会被忽略 |
| Markdown 镜像与覆盖层 | 低 | 内容、文档与代理访问 | 需要持续维护规范链接 |

对产品路由和类目路由做**服务端渲染**，是可持续的答案。如果你所用的框架本来就支持它，那么把目录路由迁到服务端组件、或迁到带增量重新验证的静态生成，通常是以周为单位的工作量，而不是以季度计，因为数据层早就存在了——只不过一直是从错误的一侧调用的。

**预渲染**是诚实的过渡方案。在构建时或按计划把每个产品页面渲染一次，把 HTML 缓存在边缘节点，再对所有访问者提供同一份内容。给人和机器提供同一份文档；向爬虫伪装投放另一个版本的页面，既是合规风险，实际上也是自毁长城，因为模型只会引用它收到的那个版本。

**服务端渲染的 JSON-LD** 是投入最小、杠杆最高的改动。把它放进服务器输出的 HTML 里，而不是放进标签管理器。

```
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "sku": "MPN-12345",
  "mpn": "MPN-12345",
  "name": "100 nF 50 V X7R 0603 ceramic capacitor",
  "brand": { "@type": "Brand", "name": "Example Components" },
  "additionalProperty": [
    { "@type": "PropertyValue", "name": "Capacitance", "value": "100 nF" },
    { "@type": "PropertyValue", "name": "Voltage rating", "value": "50 V" },
    { "@type": "PropertyValue", "name": "Dielectric", "value": "X7R" },
    { "@type": "PropertyValue", "name": "Operating temperature", "value": "-55 to +125 C" }
  ],
  "offers": {
    "@type": "Offer",
    "priceCurrency": "USD",
    "price": "0.042",
    "availability": "https://schema.org/InStock"
  }
}
</script>
```

**Markdown 镜像**是让一个页面变得毫无歧义的最廉价手段。为每个产品页面在一个稳定且被链接到的 URL 上提供纯文本版本，规格表以 markdown 表格的形式呈现。纯文本客户端能完美解析它，用同一份数据源生成它几乎不花什么成本，而且它给了你一个规范的机器接触面，前端改版时也不会漂移。请注意 `llms.txt` 并不是这回事：截至 2026 年，没有任何主流 AI 运营方承诺会读取它，Google 的 Search Relations 团队也明确拒绝为它背书。镜像之所以有效，是因为它们就是普通的、被链接到的页面。

**覆盖层**则是把上述一切放到现有网站的前面，而不是塞进网站里面。一个 sidecar 服务或边缘 worker 从你现有的 PIM 读取数据，在你自己的域名上提供服务端渲染的、代理可读的页面、JSON-LD、markdown 镜像，以及一个托管的 MCP 端点。面向客户的网站则毫无变化。这正是 Partsgraph 采取的做法，也是越来越多制造商正在自建的东西：Microchip 于 2025 年 11 月发布了面向其产品数据的免费公共 MCP 服务器，ECIA 旗下的 TrustedParts 也在 2026 年 6 月推出了库存 AI 代理服务。

## 按顺序，先做什么

1. 对你最重要的十个产品运行上面那套六步测试，并记录字节数。
2. 在产品页面上以服务端渲染的方式输出 JSON-LD。这是改动最小、可测量效果最大的一步。
3. 让每一项规格、每一个数据手册链接和 CAD 链接都出现在初始 HTML 里，即便交互版本仍然留在客户端。
4. 为每一个重要的参数筛选组合，提供一个真实的、可抓取的、服务端渲染的 URL。
5. 为每个产品发布一份 markdown 镜像，并从页面上链接过去。
6. 做完这些之后，再去操心排名、提示词和回答占有率。检索先于引用；在内容真正存在于响应正文里之前，没有什么可以优化。

这里的机制既不微妙，也没有争议。模型只能引用它收到的东西，而它收到的就是你的原始 HTML。除此之外的一切，都只是一个从未发生过的渲染步骤。

*想知道你的产品目录处在什么水平？Partsgraph 免费的 AI 可见性评分工具会在 [/audit](/audit) 上针对你自己的域名运行本文中的这些检查。*

## 常见问题

### GPTBot 会渲染 JavaScript 吗？

不会。Vercel 与 MERJ 发现，GPTBot 在约 11.5% 的请求中会下载 JavaScript 文件，但从不执行它们。它只从服务器在首次响应中返回的 HTML 里提取内容。页面加载后由你的打包脚本注入 DOM 的一切，对它而言都是不可见的。

### 为什么 Google 能看到我的单页应用，ChatGPT 却看不到？

Googlebot 运行着一套无头 Chromium 渲染服务，会执行你的 JavaScript 并对渲染出的 DOM 建立索引，Gemini 也以同一套基础设施作为事实依据。而 OpenAI、Anthropic 和 Perplexity 使用的只是不带浏览器引擎的简单 HTTP 抓取程序。因此同一个页面完全可能在 Google 上排名良好，却在 AI 的回答中彻底缺席。

### 预渲染或动态渲染能解决这个问题吗？

可以，而且对于短期内无法更换技术平台的目录来说，这是一种正当的过渡方案。风险在于价格与库存的缓存过期，以及向爬虫提供一个与用户所见存在实质差异的页面。要让预渲染出的 HTML 在语义上与渲染后的页面保持一致，并为易变字段设置较短的重新验证窗口。

### 只靠 JSON-LD 就够了吗？

只有当它出现在服务器返回的 HTML 中时才够。由标签管理器或客户端脚本注入的 JSON-LD，是在爬虫抓取结束之后才到达的。请在服务端渲染这段 script 标签，并把 JSON-LD 当作可读正文的补充，而不是它的替代品。

### 我怎样在一分钟内自己测一测？

对某个产品 URL 运行开启压缩的 curl，把响应保存下来，然后在原始字节中用 grep 搜索你的型号，以及两三个参数值。如果这些内容在文件里找不到、却能在浏览器中看到，说明它们是由 JavaScript 生成的，任何 AI 爬虫都永远看不到它们。

### AI 爬虫会遵循我的站点地图吗？

它们用得并不稳定。Vercel 与 MERJ 测得 ChatGPT 的抓取中有 34.82% 落在 404 上，而 Googlebot 只有 8.22%，这说明它更多是从陈旧来源发现链接，而非严格依照站点地图抓取。一份 lastmod 值正确的准确站点地图会有帮助，但它无法弥补页面本身不返回任何内容的问题。

### 这对 CAD、BIM 和数据手册下载同样适用吗？

适用，而且问题更严重。如果下载链接由 JavaScript 生成、藏在中间过渡页之后，或者要通过一个短时效的签名 URL 才能解析，那么非浏览器客户端根本无法跟进它。这份文档等同于不存在。

## 资料来源

1. [Vercel and MERJ, The rise of the AI crawler, December 2024](https://vercel.com/blog/the-rise-of-the-ai-crawler)
2. [Adobe Digital Insights, AI traffic and retail machine-readability, April 2026](https://business.adobe.com/blog/ai-traffic-surge-retail-sites-not-machine-readable)
3. [eCommerceNews, Adobe machine-readability scores by page type, April 2026](https://e-commerce.news/story/adobe-says-ai-retail-traffic-surges-as-readability-lags)
4. [TechCrunch, AI traffic to US retailers rose 393% in Q1, April 2026](https://techcrunch.com/2026/04/16/ai-traffic-to-us-retailers-rose-393-in-q1-and-its-boosting-their-revenue-too/)
5. [Forrester, The State Of Business Buying, 2026 (January 2026)](https://www.forrester.com/blogs/state-of-business-buying-2026/)
6. [Google Search Central, Google crawlers and user agents](https://developers.google.com/search/docs/crawling-indexing/google-common-crawlers)
7. [OpenAI, Overview of OpenAI crawlers](https://developers.openai.com/api/docs/bots)
8. [Anthropic, Does Anthropic crawl data from the web?](https://support.claude.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler)
9. [Apple Support, About Applebot](https://support.apple.com/en-us/119829)
10. [Microchip Technology, MCP Server press release, November 2025](https://ir.microchip.com/news-events/press-releases/detail/1344/microchip-technology-unveils-model-context-protocol-mcp-server-to-power-ai-driven-product-data-access)
11. [ECIA, TrustedParts.com launches Inventory AI Agent Service, June 2026](https://www.ecianow.org/2026/06/11/trustedparts-com-launches-inventory-ai-agent-service/)
12. [Search Engine Journal, Google says llms.txt is speculative for now](https://www.searchenginejournal.com/google-says-llms-txt-is-purely-speculative-for-now/577576/)

## Other languages

- English: https://partsgraph.ai/blog/ai-crawlers-do-not-run-javascript/md
- Deutsch: https://partsgraph.ai/de/blog/ai-crawlers-do-not-run-javascript/md
- Français: https://partsgraph.ai/fr/blog/ai-crawlers-do-not-run-javascript/md
- Español: https://partsgraph.ai/es/blog/ai-crawlers-do-not-run-javascript/md
- Italiano: https://partsgraph.ai/it/blog/ai-crawlers-do-not-run-javascript/md
- Nederlands: https://partsgraph.ai/nl/blog/ai-crawlers-do-not-run-javascript/md
- Polski: https://partsgraph.ai/pl/blog/ai-crawlers-do-not-run-javascript/md
- Português: https://partsgraph.ai/pt/blog/ai-crawlers-do-not-run-javascript/md
- Svenska: https://partsgraph.ai/sv/blog/ai-crawlers-do-not-run-javascript/md
- Türkçe: https://partsgraph.ai/tr/blog/ai-crawlers-do-not-run-javascript/md
- 日本語: https://partsgraph.ai/ja/blog/ai-crawlers-do-not-run-javascript/md
- 한국어: https://partsgraph.ai/ko/blog/ai-crawlers-do-not-run-javascript/md

---

Partsgraph — the agent-ready parts data layer. Free AI-visibility grader: https://partsgraph.ai/zh/audit
