AI 爬虫读得到你的网站吗?我们不运行 JavaScript 检查了 342 个新上线产品网站
大多数 AI 爬虫不执行 JavaScript。我们按它们的方式请求了 365 个刚上线的产品网站,在成功加载的 342 个里,每 10 个就有 1 个返回的页面有标题和描述,正文却几乎是空的。我们怎么测的、为什么会这样,以及两分钟自查你自己网站的方法。

2026 年 10 月,我们按“不执行 JavaScript 的爬虫”的方式,请求了 365 个在 aat.ee 上线的产品网站,统计返回的 HTML 里有多少文字。在返回 HTTP 200 的 342 个网站里,37 个(10.8%)的正文不足 50 个词。这些页面几乎都有标题和 meta 描述,所以在链接预览里看起来一切正常,但真正的内容要等 JavaScript 运行后才出现。 我们再用真实浏览器打开这 37 个页面,成功加载的 30 个里,有 23 个显示出 150 个词以上的内容。
这件事重要,是因为 ChatGPT、Claude 和 Perplexity 背后的爬虫被观测到不执行 JavaScript。如果你的产品介绍只存在于渲染后的页面里,这些系统可能根本看不到。下面是数据、原因,以及一个两分钟就能在自己网站上跑完的检查。
哪些爬虫会运行 JavaScript
OpenAI、Anthropic、Meta、字节跳动和 Perplexity 都没有公开说明自己的爬虫是否渲染 JavaScript。目前最好的证据,是 Vercel 和 MERJ 在 2024 年 12 月发布的一项研究。研究发现,它考察的主要 AI 爬虫都不渲染 JavaScript:OpenAI 的 OAI-SearchBot、ChatGPT-User 和 GPTBot,Anthropic 的 ClaudeBot,Meta-ExternalAgent,字节跳动的 Bytespider,以及 PerplexityBot。ChatGPT 和 Claude 的爬虫会下载 JavaScript 文件(分别占其请求的 11.50% 和 23.84%),但不会执行。使用 Googlebot 基础设施的 Gemini 会渲染,AppleBot 也会。
Googlebot 会渲染 JavaScript,但那是单独的一步。谷歌的 JavaScript SEO 指南说,页面会进入队列,“once Google's resources allow, a headless Chromium renders the page and executes the JavaScript”(等谷歌的资源允许时,无头 Chromium 会渲染页面并执行 JavaScript)。谷歌仍然推荐服务端渲染或预渲染,理由是“it makes your website faster for users and crawlers, and not all bots can run JavaScript”(这会让网站对用户和爬虫都更快,而且并非所有机器人都能运行 JavaScript)。
这项研究只是一次观测,距今快两年,爬虫的行为也可能在不通知的情况下改变。但它仍是现有最好的数据,被点名的公司也没有一家出来反驳。
我们怎么测的
- 样本: 从审计前 120 天内在 aat.ee 上线的产品中,随机抽取 400 个项目网址。每个域名只保留一个网址,并去掉 14 个指向 GitHub、应用商店或 Hugging Face 而不是产品自己网站的链接,剩下 365 个网站。其中 342 个返回 HTTP 200,下面的数字都以这 342 个为基数。
- 请求: 每个网站发一次 GET 请求,用户代理带 OpenAI 的
OAI-SearchBot标识,跟随重定向,不执行 JavaScript。 - 指标: 去掉
<script>、<style>、<noscript>、<template>和<svg>元素后,正文可见文字的词数。同时记录 HTML 里有没有标题、meta 描述、canonical 链接、JSON-LD 和<h1>。 - 局限: 我们只抓取了创始人提交的那个网址,通常是首页。请求来自我们自己的网络,不是 OpenAI 的 IP 段,所以对已验证爬虫区别对待的网站,可能会给真正的爬虫返回不同的内容。script 标签里的文字没有计入。Vercel 的研究提到,初始 HTML 里嵌入的数据(比如 JSON)“may still be indexed”(仍可能被索引),所以对某些框架来说,我们的统计会低估爬虫实际拿到的内容。下面那些空页面大多是单页应用,内容放在单独的 JavaScript 包里,而研究发现这些爬虫只下载、不运行这些文件。
结果
| 原始 HTML 中的正文词数 | 网站数 | 占 342 的比例 |
|---|---|---|
| 少于 20 | 35 | 10.2% |
| 20–49 | 2 | 0.6% |
| 50–149 | 3 | 0.9% |
| 150–399 | 23 | 6.7% |
| 400 及以上 | 279 | 81.6% |
中位数网站返回了约 1,180 个词,所以大多数上线网站没有问题。问题集中在少数网站上:37 个网站,正文几乎全空。
头部填好了,正文是空的。 37 个“薄”页面里,36 个有 <title>,34 个有 meta 描述,但只有 4 个有 <h1>,也只有 4 个有五个以上的链接。读到这份 HTML 的爬虫,能知道产品叫什么、一句话卖点是什么,至于功能、价格、适合谁,一概不知。
一种模式解释了大多数情况。 37 个里有 30 个返回的是空的 <div id="root"> 或 <div id="app">,整页内容都在浏览器里生成,这正是用 Vite 或 Create React App 做单页应用的默认方式。其中 12 个是 Vite 构建的。相比之下,样本里 165 个 Next.js 网站只有 1 个是薄页面。Next.js 默认在服务端渲染页面,内容就在第一次响应里。
模板会漏出来。 37 个里有 16 个还留着 Create React App 的默认 meta 描述:“Web site created using create-react-app”。这 16 个来自三个提交账号,发布的是同一系列相似产品,所以它们抬高了总数。去掉它们,薄页面比例是 326 个里的 21 个,即 6.4%,仍然是大约每 16 个上线产品就有 1 个。
在浏览器里,内容是有的
接着,我们用无头 Chromium 打开这 37 个薄页面,在 load 事件后再等五秒,重新统计可见文字。30 个页面加载成功,7 个重试三次后仍然超时。
| JavaScript 运行后的正文词数 | 网站数(共 30) |
|---|---|
| 150 及以上 | 23 |
| 50–149 | 2 |
| 少于 50 | 5 |
中位数页面从原始 HTML 里的 0 个词,变成渲染后的约 475 个词。也就是说,这些网站大多数是有文案的,用浏览器访问的人也看得到。只是这些文案不在服务器返回的 HTML 里,而那恰恰是不渲染的爬虫唯一能读到的部分。渲染后仍不足 50 个词的五个,分别是一个登录页、一个渲染出来是空白的页面和三个非常简短的页面。它们对所有人来说都很薄,不只是对爬虫。
一个附带发现:有些防护也会拦住爬虫
有三个网站对我们的 OAI-SearchBot 请求返回 HTTP 403,而同样的请求换成 Chrome 用户代理就返回 200。其中两个返回的是 Cloudflare 质询(cf-mitigated: challenge)。这些网站的 robots.txt 都没有禁止 AI 爬虫,所以站长多半并不想拦截它们。
这不能说明 OpenAI 真正的爬虫被拦住了。Cloudflare 这类机器人防护可以按 IP 地址识别已验证的机器人,而我们的请求不是从 OpenAI 的 IP 发出的。把它当作一个提醒:如果你用 Cloudflare,去后台看看 AI 爬虫和机器人防护的设置,确认它们和你 robots.txt 的意图一致。
两分钟自查你的网站
-
用爬虫的方式抓一次。
UA='Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; OAI-SearchBot/1.0; +https://openai.com/searchbot)' curl -sL -A "$UA" -o raw.html -w '%{http_code}\n' https://yoursite.com grep -c '你首屏里的一句话' raw.htmlUA='Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; OAI-SearchBot/1.0; +https://openai.com/searchbot)' curl -sL -A "$UA" -o raw.html -w '%{http_code}\n' https://yoursite.com grep -c '你首屏里的一句话' raw.html状态码不是 200,通常说明爬虫拿到的是错误页或质询页,而不是你的内容。计数为 0,说明这句原文不在 HTML 里。选一个短句,因为长句可能被标签拆开。
-
在不运行 JavaScript 的情况下看页面。 在 Chrome 开发者工具里打开命令菜单(Ctrl+Shift+P 或 Cmd+Shift+P),运行“Disable JavaScript”后刷新。你看到的,大致就是不渲染的爬虫读到的内容。
-
单独检查谷歌。 Search Console 的网址检查工具会显示 Googlebot 渲染后的 HTML。它只代表谷歌。
-
对定价页和功能页也做一遍, 不要只查首页。助手要介绍你的产品,需要的正是这些页面。
按技术栈修复
| 技术栈 | 服务器默认返回什么 | 修复办法 |
|---|---|---|
| Vite 或 Create React App 单页应用 | 一个空的根 <div> | 在构建时预渲染营销页面,或把它们迁到能在服务端或构建时输出 HTML 的框架 |
| React Router v7 | 取决于模式 | 公开页面用框架模式,开启服务端渲染或 prerender |
| Next.js App Router | 服务端渲染的 HTML;页面默认是 Server Components | 主要文案不要放在挂载后才拉数据的客户端组件里 |
| Nuxt、SvelteKit | 服务端渲染的 HTML | 检查公开页面没有关掉 SSR(ssr: false) |
| Astro、Framer、Webflow、Wix、WordPress | 静态或服务端渲染的 HTML | 一般没问题;检查机器人防护,并确认文案不是由脚本加载的 |
无论用什么技术栈,都适用三条原则:
- 把关键事实放进第一次响应。 也就是产品名称、做什么、给谁用、价格和主要链接,都要在服务器返回的 HTML 里。
- 给机器人和给人看的是同一个页面。 谷歌把动态渲染(给爬虫单独准备一个预渲染版本)称为“a workaround and not a recommended solution”(权宜之计,不是推荐方案)。微软的 GEO 指南说:“Ensure rendered DOM contains the same facts consumers see — never serve different HTML to bots.”(确保渲染后的 DOM 包含和消费者看到的相同事实,绝不给机器人返回不同的 HTML。)
- 别只顾
<head>。 好的标题和描述能让链接预览好看,但不足以让爬虫介绍你的产品。
常见问题
谷歌能看到我客户端渲染的内容吗? 通常可以,只是会晚一些。Googlebot 会把页面放进渲染队列,用无头 Chromium 运行 JavaScript,这覆盖谷歌搜索和 Gemini。要成为 AI 概览里的支持链接,页面“must be indexed and eligible to be shown in Google Search with a snippet”(必须已被编入索引,并且有资格以摘要形式出现在谷歌搜索中),所以渲染慢或失败,在那里仍然会有损失。ChatGPT、Claude 和 Perplexity 则不在此列,它们的爬虫被观测到不渲染。
空的 <div id="root"> 会被降权吗?
不会,没有惩罚。代价是不渲染的爬虫没有东西可读,也就无法引用或描述这个页面。
我的 meta 描述写得很好,还不够吗? 它只给了爬虫一句话。当有人问助手你的产品能做什么、和替代品比怎么样时,助手需要的是正文:功能、价格、使用场景。
我需要重写整个应用吗? 通常不用。把公开页面(首页、定价页、功能页、文档页)预渲染就够了,登录后的应用部分可以继续在客户端渲染。
修好之后,ChatGPT 就会引用我吗? 没人能保证。能被读到是前提,能不能被引用,还取决于别的来源怎么描述你、你的页面回答问题回答得好不好。其余部分见我们的 AI 搜索优化手册。
延伸阅读
- 2026 创始人 AI 爬虫指南:robots.txt、llms.txt 与引用
- 读懂 AI 爬虫日志:GPTBot 实际请求了什么
- 网站上线检查清单
- 7 条流行的 GEO 说法,用谷歌官方文档逐条核查
来源
- Vercel 与 MERJ:The rise of the AI crawler(2024 年 12 月)
- Google Search Central:Understand JavaScript SEO basics
- Google Search Central:Dynamic rendering as a workaround
- Google Search Central:AI features and your website
- Next.js:Server and Client Components
- Microsoft Advertising:From discovery to influence: a guide to GEO
- aat.ee:对 365 个上线产品网站的原始 HTML 审计(分析其中 342 个),2026 年 10 月
aat.ee 上的每个产品都有一个永久的、服务端渲染的收录页面。即使你自己的网站还没准备好,爬虫也能读到一份关于你产品的介绍。提交你的产品,或查看收录方案。