Blog · 2026 年 7 月 11 日
疤痕组织普查
扫描 1,495 个在线的 AI 作品,我们看清了 vibe-coding 真正的通病——以及唯一能预测它的因素。
One's Vibe 本身就是一个 vibe-coded 的产品:用 AI 写规格、用 AI 写代码,日常几乎全由脚本化的 agent 打理。上线头几周,它犯过一些不光彩的错——一个本该报 404 却回了 200 的软 404、一张始终渲染不出来的 Open Graph 卡片、首页短暂地返回过 500。然后我们注意到一件比自己的尴尬更有价值的事:这些错误几乎都不在代码里。 它们在代码外面那层薄薄的东西上——元数据、分享卡片、开发时没人点、上线后人人踩的断链。
于是我们开始为每一个上墙的项目扫描这一层。这就是我们在 1,495 个在线的 AI 作品上发现的东西的普查——vibe-coding 时代的疤痕组织。
我们查什么,以及我们拒绝查什么
先说边界,因为这正是全部意义所在。我们不做安全审计,也不评判质量。 一次通过的检查是一个事实——"我们访问了这个网址,它公开示人的是这些东西"——绝不是背书。检查是非侵入式的:我们只看一个站点本来就对任何持浏览器的人展示的内容。我们从不登录、从不探测需要认证的端点、从不发送攻击载荷、从不下载文件。每一次抓取都跑在一个带 SSRF 防护的隔离检查器里、与应用分开的独立进程上——正是这道边界,让我们能核验一个陌生人的网址而无需信任它。
在这道边界内,我们对每个已发布项目跑两类检查,新项目每晚、全馆每周:
- 站点健康建议——十来项 web 应用卫生检查:Open Graph 与 Twitter 卡片、favicon、
<title>与 meta description、单个<h1>、viewport 标签、误设的noindex、图片alt覆盖率、软 404 探测,以及最多八条抽样内链。 - 安全自检——只查非侵入的卫生问题:留在客户端代码里的密钥、暴露的
.git、公开的 source map,以及一次 Google Safe Browsing 查询。
健康建议以计数形式公开在每个项目上;具体内容,以及整个安全检查,只对认领了项目的作者私密可见。这里我们只报告聚合数据,不点任何人的名。
普查
1,495 个被扫描的项目里,989 个——三分之二——至少带有一条健康建议。 不是坏了,也不是不安全:只是缺了让一个在线作品对搜索引擎、社交卡片和屏幕阅读器"可读"的那一层里的某一块。这 2,063 条建议的分布如下。
| 建议 | 项目数 | 占比 |
|---|---|---|
| 不存在的路径返回 200(软 404) | 433 | 29% |
| Open Graph 标签不完整 | 404 | 27% |
没有 <h1> 标题 | 386 | 26% |
| 缺 Twitter 卡片 | 305 | 20% |
图片没有 alt 文本 | 128 | 9% |
| 没有 meta description | 126 | 8% |
| favicon 无法访问 | 109 | 7% |
| 抽样内链有断链 | 99 | 7% |
设了 og:image 但无法访问 | 45 | 3% |
没有 <title> | 13 | 1% |
误设 noindex | 9 | 0.6% |
| 没有 viewport 标签 | 6 | 0.4% |
其中几项值得多说一句。
软 404 是最常见的疤痕,也是最安静的。 软 404 是指一个本不该存在的页面——/这从来不是一个页面——不回 404 Not Found,反而拿你的首页回了 200 OK。它对人看着没问题,却对机器撒谎:搜索引擎会索引幽灵页面、监控永远不报警、断链从不主动现身。近三分之一的在线 AI 作品都这样,几乎总是因为单页应用的兜底路由被接成了捕获一切。
Open Graph 不完整是最显眼的。 当有人在 X 上或群聊里贴出你的链接,渲染出来的是一个光秃秃的灰色方块、而不是带标题和图片的卡片——这就是 og: 组不完整。27% 的项目没带齐这三件套,另有 3% 把 og:image 指向了一个 404 的网址。修它不花一分钱,而它决定了一个链接是被点开、还是被划过去。
缺 `<h1>` 和没有 `alt` 文本是无障碍税。 四分之一的站点没有顶级标题;9% 发布的图片会被屏幕阅读器完全跳过。这两项都不会让明眼用户的页面坏掉——这恰恰是它们能活到上线的原因。
唯一真正有意义的切分
我们把数据从每个角度都切了一遍。项目在哪里被发现——X、Hacker News、Reddit——没有真正的差别:命中率无论来源都聚在 62% 到 74% 之间。我们本已准备写下"这些通病是普世的"然后翻篇。
然后我们按项目托管在哪里来切,这个宇宙干净利落地裂成了两半。
| 托管 | 项目数 | 平均建议数 |
|---|---|---|
| GitHub Pages | 17 | 3.24 |
| Netlify | 48 | 2.25 |
| Render | 26 | 1.50 |
| Cloudflare | 587 | 1.40 |
| Vercel | 480 | 1.16 |
| Lovable | 52 | 0.46 |
把最上和最下两行对着读。一个手搓的 GitHub Pages 站点平均 3.24 条建议;一个搭在 Lovable——一个 AI 建站平台——上的站点平均 0.46 条。 这是 7 倍的差距,而它无关作者的水平。它关乎谁拥有元数据这一层。
当你搭在一个有主见的 AI 平台上时,平台会悄悄替你把样板填好:它发好 viewport 标签、favicon、像样的 <title>、OG 卡片、真正的 404。当你手搓静态 HTML 时,这些每一样都归你,而 vibe-coding 的工作流——描述功能、发布功能——只为你开口要的那件事优化,默默跳过你没提的脚手架。疤痕组织不是"造得快"的症状,是"造了有意思的那层、底下却什么都没继承到"的症状。
安全脚注
安全自检刻意做得很窄,而消息大体是好的。在所有被扫描的项目里,Google Safe Browsing 零命中——画廊里没有恶意软件、没有钓鱼。客户端卫生比我们担心的干净,但不是一尘不染:少数站点发布了公开的 source map,或在客户端代码里露出了 Google Maps API key(通常无害,偶尔不然),还有四个项目暴露了真正敏感的东西——一个有效密钥,或一个可读的 .git 目录。这些作者在我们发现的那一刻就被私下告知了;我们谁都不点名,永远不会。安全发现的存在性从不公开——只有认领了项目的作者能看到它。
我们的结论
三分之二的在线 AI 作品,发布时都缺了 web 可读性这一层里的某一块。这个缺口是真实的、常见的,而且——这是最要紧的一点——它不是代码问题,也不是能力问题。 代码是好的;这正是这些项目能出现在一个"你真的能上手试"的画廊里的原因。缺的是那些不起眼的脚手架,而 AI 编码在结构上就不擅长主动补上它们:那个本该 404 的 404、那张本该渲染的卡片、屏幕阅读器需要的那个标题。
这不是一个反对 vibe-coding 的论点。这是一个论点:那层 vibe 从不提起的东西,需要第二双眼睛。坦白说,这也正是这个画廊存在的部分原因——也是为什么一个在这里认领了项目的作者,能拿到完整的私密报告、一键重扫,十五分钟后收获一张干净的体检单。疤痕组织一旦有人指出来,就很容易愈合。只是大多时候,没有人去指。
数据是画廊在发布时刻的快照,会随着我们扫描、随着作者修复而漂移。方法——非侵入、隔离、只报聚合——不会。

“One's vibe, another's poison” —— 君子和而不同
评论
Sign in 后加入讨论。