Skip to content
··阅读时间4分钟

迁移之后会发生什么:8 天的复利回报

我把博客迁移到 Next.js 后,以为最难的部分已经结束。结果真正的复利才刚开始:6 篇超大指南、更聪明的 AI 助手、原生 newsletter、机器人防护和 SEO 全面升级,全都发生在 8 天内。

8 天前,我用 4 天重建了整个博客后端。我把 485 篇 WordPress 文章迁移到 Next.js,让 Sydney(我的 AI 聊天机器人)重新上线,并把生产站点发布了。

我当时以为故事到这里就差不多了。迁移完成,庆祝一下,继续下一个项目。

我错了。迁移不是终点,而是起跑线。

下面是我网站在 2 月 5 日和今天(2 月 13 日)的对比:

功能2 月 5 日(迁移日)2 月 13 日(今天)
博客文章数485(从 WordPress 迁移)492(新增 6 篇超级指南)
Sydney AI基础 RAG,质量未系统验证已评估、已优化、命中率 81%
NewsletterBeehiiv 嵌入(第三方)原生 Supabase + Resend,按兴趣分发
SEO基础 sitemap + meta tags结构化数据、FAQ schema、llms.txt、AEO
安全仅限流Cloudflare Turnstile + 限流
性能基础 Lighthouse 检查用 Chrome DevTools MCP 做系统化剖析
特色图手工制作AI 生成流水线(Gemini + 自动优化)

这些改进之所以发生,是因为前一个改进让下一个改进更容易。这就是我原本没预料到的“复利”。


真正的解锁点:你的博客现在是“代码”

从 WordPress 迁到代码栈后,有件事很少有人会提前告诉你:迁移本身不是重点。 真正的重点是迁移后你突然能做到的事。

当你的博客变成 Git 仓库里的 492 个 MDX 文件,而不是 MySQL 数据库里的几百行记录时,一切都会变:

  • 每篇文章都是文件:Claude Code 可以大规模读取、搜索和修改
  • 每次改动都是 diff:你能精确审查到底改了什么,甚至一次看 50 篇文章
  • 每个功能都能组合:newsletter 系统可以直接读取和 AI 聊天机器人同一份文章 metadata
  • 每次发布都是命令pnpm build && vercel --prod,结束

在 WordPress 里,改 12 篇文章意味着登录 wp-admin,逐篇点开、逐篇修改、逐篇更新,重复 12 次。现在用 MDX + Claude Code?我只要说一句“在现有 12 篇国家公园指南里都加上国家公园 pillar post 的链接”,它就会逐文件读取、在合适上下文里插入合适 cross-link,再把 diff 给我看。12 篇更新,几分钟。

这才是真正的解锁点。不是迁移本身,而是迁移后获得的速度


4 天写完 6 篇超级指南

迁移后我第一件事是什么?写内容,而且是大量内容。

我已经想写 expat 系列综合指南好几个月了。那种 2,000-4,000 字、真正能帮到准备搬去美国的人处理复杂问题的 pillar post。之前在 WordPress 里做这件事很痛苦:每篇都要手动排版、上传图片、配置 SEO 插件、管理分类。

现在?流水线是这样的:

  1. 头脑风暴文章结构和大纲
  2. 写作完整 MDX,并把 SEO/AEO 优化直接写进结构
  3. 生成特色图:Claude 先读文章,再写 prompt 发给 Gemini 出图
  4. 优化图片:Python 脚本转 WebP 并压缩
  5. 上传到 Vercel Blob
  6. 发布git pushvercel --prodpnpm db:publish
  7. Sydney 立刻可检索:文章同步进 Supabase 并生成 embeddings

这 4 天里发布的内容:

文章主题字数
Healthcare Guide解释 HSA、FSA 与 HDHP~3,200
Credit Building从零到 720+ 信用分~3,500
Savings & InvestingT-Bills vs HYSA 全面拆解~2,800
Credit Card Rewards积分、里程、返现策略~3,000
Relocation Guide搬去美国全流程指南~3,800
National Parks26 个公园、4 条自驾线~4,200

每篇都遵循同一套 AEO 模式:先给答案的开场、对比表、120-180 字的小节、加粗定义、文末 FAQ schema。这类结构是获得 340% 更高 AI 引用率的关键。

国家公园那篇最大,是一个 pillar post,并且回链了我之前写的 12 篇公园评测。我还专门给它做了一个 PhotoGallery 组件,因为连着滚 20 张独立图片真的很难看。现在是干净的网格 + lightbox。简单,但非常有效。


Sydney 变聪明了

我在迁移期间把 Sydney 拉回线上时,她是“能用”的,而且上线前我做过手动测试。她能回答问题、能找相关帖子、能给引用。但手动测试最多告诉你“看起来还行”,它不会告诉你到底“行到什么程度”,也不会告诉你哪里有缺口、如何系统优化。

我当时没有一套可量化的质量评估方法。而没有量化,就没有持续优化。

所以我做了一个 RAG 评估框架。32 条测试查询,覆盖 12 个类别,每条都有我手工整理的 expected results。比如问 “What credit cards should expats get?” 就应该命中 credit building 指南;问 “Tell me about Yosemite” 就应该命中 Yosemite 游记。

然后我测了 30 组不同配置组合:6 个 similarity threshold × 5 个 result count,统一测 hit rate、precision 和 temporal diversity。

结果非常扎眼:

指标优化前(默认)优化后
命中率~30%81.2%
零命中查询30 条里 6 条30 条里 0 条
时间跨度1.2 年6.7 年

最大的坑甚至有点尴尬:OpenAI SDK 在 Next.js 里会静默丢掉 dimensions 参数。Sydney 生成的是 1536 维 embedding,却在 384 维索引里做检索。结果差也就不奇怪了。改成直接 fetch() 调用后,一夜之间就修好。

我还把 Sydney 的 system prompt 扩到了 490+ 篇博客主题。她现在不只懂 AI 和营销,也覆盖国家公园、信用卡、医疗体系和完整 expat 内容库。

你可以用这两个命令自己测:

pnpm eval:rag        # 测本地 Supabase
pnpm eval:rag:prod   # 测生产环境

现在我终于可以真正衡量“Sydney 有没有变聪明”。这种基础设施,在 WordPress 时代你基本不会去搭。


大规模 SEO + AEO

2026 年做 SEO,不再只看 Google。你还得争取在 ChatGPT、Perplexity、Claude 回答用户问题时被引用。

我在一个周末内把完整 SEO/AEO 栈落地:

传统搜索层:

  • 动态 sitemap(639 个页面被索引)
  • 结构化数据:Person、WebSite、Article、BreadcrumbList、FAQPage
  • RSS feed 分发
  • Google Search Console 完成验证

AI 引擎层(AEO/GEO):

  • llms.txt:给 AI crawler 的优先内容导航(robots.txt 里 GPTBot、Claude-Web、PerplexityBot 都放行)
  • 每个章节开头都用 answer-first 模式(前 150 字先给关键结论,并加粗)
  • 用问题式 H2,对齐用户向 AI 提问的真实表达
  • FAQ 区自动识别并渲染为 FAQPage schema

性能层: 我用 Chrome DevTools MCP 对不同页面类型做 profiling:首页、博客列表、文章详情、/ask 页面,逐项定位瓶颈。能在同一个 Claude Code 会话里完成性能 trace、分析、修复,效率高得有点离谱。

结果就是:我现在每篇新文章都会自动带上结构化数据、(有 FAQ 时)自动生成 FAQ schema、并按 AI 可提取格式写作。没有插件,没有手动配置,这是站点的默认行为。


Beehiiv 下线,原生 Newsletter 上线

这件事也挺出乎我意料。我原本在 Beehiiv 上的 newsletter 是“能跑”的:能收邮箱、能发更新。那为什么还要替换?

三个原因:

  1. 控制权:我需要按兴趣订阅。订阅 “AI & Technology” 的用户不该收到国家公园内容。Beehiiv 免费版做不到。
  2. 集成性:订阅者数据现在和 Sydney 搜索索引放在同一个 Supabase 数据库里。单一数据源。
  3. 成本:Supabase(免费层)+ Resend(低量免费层)= 每月 $0。

我做出来的系统包括:

  • 双重确认(double opt-in):订阅 → 验证邮件 → 确认成功 → 欢迎邮件 + 个性化推荐
  • 5 个兴趣组:AI、Expat Life、Leadership、Marketing、Travel & National Parks
  • 智能匹配:文章分类自动映射兴趣组。我发信用卡指南时,只会通知 “Expat Life” 订阅者
  • 每日 cron:Vercel 每天 11 AM PST 跑任务,查过去 48 小时新帖并定向发送
  • 去重notification_log 表确保不会重复发邮件

最实用的细节是:每篇文章底部的订阅表单会根据文章分类自动预选兴趣。比如你在读 AI 文章,滚到订阅区时,“AI & Technology” 的选项已经自动勾上。

听起来从零搭这套系统会很重?实际是一个晚上高强度工作。Supabase migration、API routes、email templates、cron job,Claude Code 搭好了骨架,我把精力放在逻辑和文案上。


安全:平时看不见,出事就来不及

你有一个公开 AI 聊天入口 + 一个 newsletter 订阅入口,机器人一定会盯上。限流我原本就有(Upstash Redis,每分钟 5 次),但我还是想再加一层。

于是上了 Cloudflare Turnstile。它是“隐形 CAPTCHA”:只有系统怀疑可疑访问时才弹 challenge。99% 正常访客完全无感。对机器人来说,就是一道墙。

我先把它接进 /ask(Sydney chat),然后把同一套模式原样复用到 /api/subscribe。同一套验证库,同一套 graceful degradation:

  • 环境变量没配置:直接 bypass(本地开发不受影响)
  • Cloudflare API 宕机:fail-open(限流作为 fallback)
  • Secret key 已配置但 token 缺失:直接拒绝(拦截绕过前端的机器人请求)

可复用性是这段复利故事的关键。newsletter 的 Turnstile 集成只花了几分钟,不是几小时,因为 Sydney 那边的基础设施已经在了。


复利效应

下面这条链路不是我预先规划出来的,而是自然发生的:

迁移到 Next.js(2 月 1-5)
  └─→ MDX 文件让 Claude Code 能规模化读改内容
       └─→ 6 篇 SEO/AEO 优化超级指南发布(2 月 6-11)
            └─→ 新内容暴露 Sydney 搜索质量问题
                 └─→ 建立 RAG 评估框架并优化 Sydney(2 月 11)
                      └─→ 内容变多后需要更好的分发(不能只靠 Beehiiv)
                           └─→ 在 Supabase 上做原生 newsletter(2 月 12)
                                └─→ 公开端点需要机器人防护
                                     └─→ Sydney + subscribe 接入 Turnstile(2 月 12-13)

这些并不是按顺序计划好的。每一步都会暴露下一步的需求。迁移让写内容变快;内容变快暴露搜索质量问题;搜索修好后你自然想把分发也升级;分发升级后就需要防护。

这就是复利。 每一次改进都不只是“增加一点价值”,而是放大之前所有改进的价值。 :)

而这条链路背后的共同点是什么?我网站的每个部分现在都是“代码”,都可以被程序化读取、测试和修改。这才是最核心的解锁点。


数据汇总

因为我知道你会问:

指标数值
距离迁移完成的天数8
新增博客文章7(含本文)
新增功能6(newsletter、Turnstile ×2、RAG eval、SEO 栈、PhotoGallery)
更新过的旧文章12+(cross-link、坏链修复)
新增代码行数~5,600
新增数据库表2(subscribers、notification_log)
新增 API 端点4(subscribe、verify、unsubscribe、cron)
成本增加$0/月(全部免费层)

下一步

我还没做完。复利还在继续:

  • 更多 expat 指南:税务策略、签证时间线、银行对比,这个系列还有很长空间
  • 让 Sydney 再变聪明:既然现在能量化,我想把 hit rate 推过 90%
  • 更多 AI build 深度记录:工具几乎每周都在变,我会边做边写(最新一篇是不会 Swift 做原生 iOS App,结论依旧是:AI 能做 60%,剩下 40% 才是产品)

但老实说,我现在最兴奋的是继续写作。17 年博客生涯里,这是我第一次觉得“发新文章”真的很快乐,而不是一次 45 分钟的 WordPress 体力活。 :D

你有没有经历过这种“迁移或重大技术决策之后的复利效应”?我很好奇:你遇到的第一个“意料之外的解锁点”是什么?

致敬,

Chandler


常见问题(FAQ)

网站开发里的“复利效应”是什么意思?

复利效应指的是:你对网站的每一次改进,都会让下一次改进更快、更容易。 例如从 WordPress 迁到代码栈后,我先获得了 AI 辅助内容生产能力,接着暴露搜索质量问题,再进一步搭建评估框架。每一步都建立在前一步之上。

怎么为 AI 搜索引擎优化博客内容?

AI 搜索引擎偏好结构清晰、先给答案的内容。 核心做法包括:前 150 字给出加粗定义性结论、使用问题式 H2、提供对比表、把段落控制在 120-180 字、并补充 FAQ schema。这些模式最高可带来 340% 的 AI 引用提升。

什么是 RAG 评估框架?

RAG 评估框架用于测试 AI 助手是否能稳定找回并返回正确内容。 它会用预定义查询 + 期望答案(ground truth)做批量测试,输出 hit rate、precision、temporal diversity 等指标,让你能系统优化检索参数,而不是靠感觉调参。

为什么要把 Beehiiv 换成自建 newsletter?

自建 newsletter 可以给你对订阅者数据、兴趣定向和系统集成的完整控制权。 我用 Supabase + Resend 后,拿到了兴趣分组订阅、自动化定向通知,以及每月 $0 的运行成本,同时还和 Sydney 的搜索索引共用同一数据底座。

Cloudflare Turnstile 和传统 CAPTCHA 有什么不同?

Cloudflare Turnstile 是隐形机器人检测,只对可疑流量触发挑战。 传统 CAPTCHA 会让所有用户都做题,Turnstile 对正常访客基本无感。它通过浏览器信号识别机器人,在不打断体验的前提下提升防护。


继续写代码,继续学习,也继续看着这条复利曲线往上走。

继续阅读

我的旅程
联系
语言
偏好设置