租一台高配服务器并不便宜。作为一名追求极致性价比的开发者,我把自己的博客挂在一台只有 1G 内存的服务器上。
Vue3 (SPA) 虽然好用,但它天然对搜索引擎不友好(SEO),且在社交媒体(WhatsApp, Telegram)分享时,往往只剩下一个空壳。通常的解决方案是 SSR(如 Nuxt.js),但在 1G 内存面前,跑一个 SSR 框架的常驻服务恐怕很难保证良好的体验。
有没有什么消耗更低的方案呢?
Nginx 层的“流量分流”
我们不能在服务器上跑 Chrome 来做预渲染,但可以让专业的工具代劳。我选择了 SEO4Ajax, 选择它的原因很简单,它有免费套餐,而且足够使用(1000个页面/月)
SEO4Ajax 会给你推荐一套自动路由的配置:如果是真实用户访问,正常返回静态资源;如果是 Googlebot、WhatsApp 爬虫,则将请求无缝转发给云端渲染。
这样,我的服务器只增加了一次 Nginx 转发,内存占用:0。
让爬虫有图可循 —— 自动化 Sitemap
有了渲染能力,还得告诉搜索引擎有多少内容。
由于我的博客是基于 PocketBase 的动态内容,我写了一个轻量级的 Node.js 脚本。它会:
分页请求我的 API 接口。
提取所有文章和游戏的 slug。
生成标准格式的 sitemap.xml。
为了不占用 CPU 资源,我设置了一个 Crontab 定时任务,在每天凌晨 4 点静默运行。
社交媒体的“颜面” —— Open Graph 优化
漂亮的社交分享卡片可以让你的网站看起来很专业,通过在前端动态注入 og:title 和 og:image,当朋友在 社交媒体 里收到我的链接时,不再是一个单调的 URL,而是一张带有文章封面图、精炼标题和摘要的漂亮卡片。
独立开发者的平衡术
在这套方案下,我的博客实现了:
Google 满分收录:搜索引擎看到的不再是 <div id="app"></div>。
极速响应:用户端依然保持 SPA 的丝滑体验。
零成本运维:所有工具均在免费额度内。
这大概就是开发的乐趣所在:在有限的资源里,寻找无限的最优解。
