Leon . Kang
Back to articles
Coding 3/5/2026 8 min read

从隐形到可读:我为什么为 AI 时代重建了自己的网站

Vite 很好用。说真的,现在依然好用。

开发服务器启动飞快,HMR 即时响应,配置简单,React 开箱即用。当初用 Vite + React + TypeScript 搭个人网站的时候,感觉这就是正确答案——现代、熟悉、高效。没有什么理由要换。

然后我开始注意到一件让我有点不舒服的事。

发现自己消失的那一刻

我在测试 AI 助手对某些话题的回答,都是我写过文章的内容:SwiftUI 多平台架构、React 渲染策略、无障碍访问——我有实实在在的帖子的东西。

AI 要么不知道我的内容存在,要么给出一些和我写的东西毫无关系的通用回答。

于是我把网站给它,直接问它:"这里写了些什么?"

没有任何有用的结果。

我尝试用爬虫的方式访问自己的网站——纯 HTTP 请求,不执行 JavaScript。拿回来的东西大概是这样:

<div id="root"></div>

就这些。一个空壳。我写的所有东西——每一篇文章、每一个想法、每一行从经验里提炼出来的内容——全部藏在一个只有真实浏览器才能执行的 JavaScript 包里。

对爬虫来说,我不存在。对想要读取我网站的 AI 来说,我不存在。我从网络上消失了。

为什么这比 SEO 问题严重得多

这不只是 SEO 的问题。SEO 以前总有办法绕——Google 最终也学会渲染 JavaScript 了。

但现在正在发生的变化不一样。越来越多的人直接去问 AI,而不是打开搜索引擎。他们提问,AI 给出综合性的回答。AI 代替用户去读网络上的内容。

如果 AI 读不到你的内容,你不只是排名靠后。你根本不在那场对话里。

我相信这个差距只会越来越大。当有人问 AI 推荐什么工具、某个概念怎么理解、某个问题怎么解决——而你的内容藏在 JavaScript 的墙后面——你在那个答案里就是零存在感。没有排名,没有曝光,什么都没有。

对一个分享想法、建立个人存在感的开发者来说,这是一个我没办法忽视的问题。

为什么 Vite + React SPA 解决不了这个问题

问题出在架构层面。单页应用的工作方式是这样的:

  1. 浏览器请求一个页面
  2. 服务器返回一个空的 HTML 壳 + 一个很大的 JS 包
  3. JavaScript 执行,渲染出真正的内容

不运行 JavaScript 的 AI 爬虫或任何 HTTP 客户端,停在第二步。它们拿到的是壳,内容永远不会出现。

可以打补丁——我确实试过,用了预渲染。预渲染对简单场景有帮助。但一旦应用里有复杂的状态、动态 i18n、Context Provider 和客户端路由,预渲染就变成了一场持续的战斗:路由遗漏、水合不匹配、trailing slash 的边界情况把整个语言目录都吞掉。

我花了几十分钟调试为什么 /zh/ 返回空白 HTML,明明 dist/zh/index.html 存在而且内容是对的。问题是 Cloudflare Pages 把尾部斜杠去掉了,fallback 到根目录的空壳,什么都没返回。这就是客户端渲染制造的那种隐形故障。

切换到 Astro

我把 leonkang.com 迁移到了 Astro。

逻辑很简单:Astro 默认生成真正的 HTML。当爬虫——不管是 AI 还是搜索引擎——访问 /en/blog 的时候,拿到的是真实内容。文章标题、摘要、标签、日期。一切都可读,不需要 JavaScript。

我对这次迁移的需求:

  • 多语言支持/en//zh//ja/ URL 路由)——Astro 内置支持
  • 静态输出,让 AI 和爬虫可读——Astro 的默认行为
  • 需要交互的地方继续用 React——Astro Islands 让我用 client:load 保留 React 组件
  • 部署在 Cloudflare Pages——官方 adapter,零配置

迁移过程不是没有摩擦。路由模式变了,思维模型从"一个带客户端导航的 SPA"变成了"真实页面加上可选的客户端 hydration"。但结果正是我需要的:每个页面都是一个真实的 HTML 文档,有真实的内容。

现在当什么东西访问 /en/blog,它能拿到七篇博客文章,有标题、摘要、标签。可读,可索引,存在于网络上。

技术是为人和内容服务的

这个行业有一种倾向,把技术选择当成身份认同。"我是 React 开发者。""我所有东西都用 Vite。""我为什么需要别的?"

我理解。熟悉度是真实的价值。切换成本是真实存在的。

但我觉得更诚实的说法是:技术是内容和人的基础设施。 当基础设施不再服务于内容——当你写的东西对人们真正使用的渠道变得不可见——就是换基础设施的时候了。

Vite + React SPA 在我搭网站的时候是正确选择。考虑到我现在希望内容如何传播,它不再是正确选择。

Astro 适合这个时刻。别的东西可能适合下一个时刻。这不是不稳定——这就是这份工作的本质。

网络一直在变。人们寻找内容的方式一直在变。两年前"够用"的个人网站,今天可能正在主动阻碍你。

我宁愿重建,也不想消失。


这个网站用 Astro 构建,部署在 Cloudflare Pages。所有页面静态生成,支持英文、中文、日文三语言路由。