Insights·2026-08-21

CSR — 人看着正常、GPT 爬虫却看到空白页的网站

用客户端渲染(CSR)搭建的网站,要等浏览器执行 JavaScript 之后才会填上文字。GPT 的爬虫不做这一步,只取服务器最先发出的 HTML,所以人能看到的正文对爬虫并不存在。在 Chrome 里按 Ctrl+U(Mac 为 Cmd+Option+U)打开页面源代码,再用 Ctrl+F 搜索正文里截出的五六个字的短片段,三十秒就能确认自己的网站属于哪一种。

AI 검색 노출 점검 요약 도식. 「Ctrl+U로 소스를 열어 본문 조각을 찾는다 — 없으면 GPT 봇에게는 빈 페이지다」라는 제목 아래 30초 점검 세 단계가 나란히 놓인다. 첫째 「Ctrl+U (맥 Cmd+Opt+U)」 — 서버가 보낸 첫 HTML, 둘째 「Ctrl+F로 조각 검색」 — 제목 말고 본문 대여섯 자, 셋째 「안 찾아지면 봇도 못 본다」 — Elements 탭으로는 판정 불가.
세 단계가 전부 서버가 보낸 첫 HTML만 본다 — 자바스크립트 실행 뒤의 화면은 판정 대상이 아니다.

为什么人看到的画面和爬虫拿到的文档不一样

打开一个网址时,服务器会发回一份 HTML 文档。浏览器收到之后还要继续做事:下载文档附带的 JavaScript 并执行,再把文字和图片填进画面。我们说网站打开了的那一刻,是这些都做完之后。

搜索引擎和 AI 公司派出的程序也打开同一个网址,这类程序叫机器人或爬虫。但爬虫不是浏览器。它的默认动作是拿到服务器发来的 HTML、抽出其中的文字、然后转向下一个网址;执行 JavaScript 是额外需要加上的能力。

所以同一个页面,人和爬虫手里拿到的可能是不同的文档。差别从哪里开始,是下一节的内容。

CSR 和 SSR 有什么不同

对比两条路径的示意图:SSR 时服务器发出的首个 HTML 已含正文,CSR 时该处只有一个空盒子,机器人什么也拿不到。

把文字送上画面的方式大致有两种。服务器直接生成完整 HTML 再发出去,叫服务端渲染(SSR);服务器只发骨架、由浏览器执行 JavaScript 填内容,叫客户端渲染(CSR)。这里的客户端指的就是自己的浏览器。

人眼分不出两者,因为画面上的结果一样。对制作方来说,CSR 在不少地方更省事,于是常被选作默认。

但对爬虫来说是完全不同的文档。SSR 的话,服务器发出的第一份 HTML 里已经有正文;CSR 的话,那个位置只有一个空盒子,正文要等 JavaScript 跑起来才出现。爬虫若不执行 JavaScript,那个空盒子就是整个网站。

访谈中主持人把这一点归纳成一句话,嘉宾表示确认:如果是 CSR,GPT 的爬虫进到这个网站也看不到任何信息。人能看到的信息确实存在,只是没有交到爬虫手里。

怎么确认自己的网站属于哪一种

不需要安装工具,也不必去问做网站的人,有 Chrome 就够了。

1. 在 Chrome 里打开想确认的页面。公司介绍也好、服务说明也好,挑一个希望 AI 读到的页面。

2. Windows 按 Ctrl+U,Mac 按 Cmd+Option+U。用鼠标的话,在页面空白处右键选择查看网页源代码。在网址前加上 view-source: 打开的也是同一个画面,不过 Chrome 会在粘贴时把这个前缀去掉,只能手动输入。用快捷键更稳妥。

3. 新标签页里会出现密密麻麻的文字和符号,不必费力去读。这就是服务器最先发出的 HTML,也就是爬虫手里文档的全部。

4. 在那个画面按 Ctrl+F(Mac 为 Cmd+F),搜索从原页面正文里截出的五六个字的短片段。不要整句粘贴进去。HTML 会在句子中间插入加粗、链接之类的标签,正文明明发出来了的网站,用整句去搜也常常搜不到。片段要从正文里挑,不要用标题,标题另有位置,会让判断变模糊。

5. 搜得到,说明这段文字是服务器一开始就发出来的,不执行 JavaScript 的爬虫也看得到;搜不到,这句话对那个爬虫就不存在。不放心的话,再从正文别处挑两个片段重复同样的搜索。

结论只在一个方向上是确定的:源代码里没有,不执行 JavaScript 的爬虫就一定看不到。反过来不成立,源代码里有并不等于一定会被引用。如果在 robots.txt 里挡住了那个爬虫,它根本就不会来,那是本文之外的另一条轴。

为什么不能用开发者工具来确认

这里最容易搞错。按 F12 打开的开发者工具,Elements 标签里也显示 HTML。但在那个画面上,正文里的句子永远搜得到,不管是 CSR 还是 SSR。

因为两个画面呈现的是不同时刻。查看网页源代码是服务器发出的原始文档;开发者工具的 Elements 是 JavaScript 全部执行完之后、此刻正在生成画面的状态。爬虫拿到的是前者。

确认一定要用查看网页源代码。在开发者工具里看得到正文,对这个判断不提供任何信息。

爬虫到底执不执行 JavaScript,有人实测过吗

依据 2024 年 12 月 Vercel 与 Merj 的统计绘制的条形图:ChatGPT 爬虫在 11.50%、Claude 爬虫在 23.84% 的请求中下载了 JavaScript 文件,但都没有执行。

各家公司并没有写进文档。OpenAI 的爬虫页面只列出名称和用途:OAI-SearchBot 用于在 ChatGPT 搜索中呈现网站,GPTBot 用于训练基础模型,ChatGPT-User 用于用户指示下打开页面。这一页没有提到 JavaScript 渲染。

实测来自托管一侧。Vercel 与 Merj 在 2024 年 12 月 17 日发布的 The rise of the AI crawler 汇总了真实爬虫流量,报告称主要 AI 爬虫中没有一家渲染 JavaScript。ChatGPT 爬虫在 11.50% 的请求中下载了 JavaScript 文件,Claude 爬虫为 23.84%,但都没有执行。

谷歌是例外。Googlebot 会执行 JavaScript,Gemini 沿用这套基础设施。所以会出现这样的情况:在谷歌搜索里排得好好的页面,在 ChatGPT 的回答里一次都没出现过。搜索排名正常,并不能作为被 AI 引用的依据。

这些数字是 2024 年 12 月的状况。爬虫行为随时可能被各家改动,与其记住数字,不如把确认方法握在手里。上一节的源代码检查显示的是今天的状态。

源代码里没有正文时,今天能做什么

改渲染结构是正路。如果在用的工具设置里有静态生成或服务端渲染选项,就切过去。不过这通常需要做网站的人或工具本身配合,未必一天能完成。

在那之前,今天就能做的有一件。title 和 meta description 装在服务器发出的第一份 HTML 里,即使是 CSR 通常也保得住。在源代码画面用 Ctrl+F 搜 title 和 description,当场就能看到现在写的是什么。

在这两行里用一句话写清楚我们是什么公司、卖什么。很多站点所有页面都印着同一句话,按页面分开写,爬虫能带走的信息就多出那么多。

信息只存在于图片里的页面也是同样的问题。商品详情或公司介绍如果只是一张图,爬虫拿不走里面的文字。访谈中提到一种做法:只把背景做成图片,内容用文字嵌进去。人眼看着像图片,对爬虫却留下的是文字。

如果是 SSR,就算做完了吗

不是。访谈中指出,同样是 SSR,也有 GPT 拿不到的情况。若把画面的一部分稍后单独发送,信息到达的顺序和时点就会改变。

所以判断依据是实际的源代码画面,而不是结构的名字。不是我们是 SSR 所以没问题,而是此刻这个页面的源代码里有没有这句话。

结果可能逐页不同。首页过得去、服务详情页却不行,是常见的情形。挑出三四个希望 AI 读到的页面,分别确认。

在继续堆内容之前该看的

谈 AI 搜索曝光时,话题通常从再写点什么开始。但如果爬虫根本拿不到正文,再加几篇结果也一样。

顺序是确认在先。看一次源代码,搜一个正文片段,三十秒就知道自己在哪一边。