我的博客怎么部署:中文留在阿里云,外语放到 Cloudflare
一个 Astro 项目,分别部署到阿里云 OSS/ESA 和 Cloudflare Pages。聊聊中文与外语分站、旧链接 301、多语言 SEO,以及我怎么确认发布成功。
我的博客现在用了两个域名:weiyii.cn 放中文,ay3s.com 放外语。
中文站继续用阿里云 OSS 和 ESA,外语站放到 Cloudflare Pages。两个站共用一份内容源,读者可以通过语言切换跳到对应文章。
这次调整,我最在意的是三件事:日常维护别太麻烦,国内外访问都能照顾到,之前已经发出去的链接还能用。
为什么拆成两个域名
博客原来把六种语言都放在 weiyii.cn 下。中文在根目录,英文、日文等内容分别放在 /en/、/ja/ 这些目录里。
这样管理很直接,一个域名、一套部署就够了。
后来手上有了 ay3s.com,我就想把外语内容单独放出去。中文站已经在阿里云运行,没必要全部搬家;外语站则可以单独部署到 Cloudflare,后续看流量、调整配置也更清楚。
最后定下来的分工是:
| 域名 | 内容 | 部署位置 |
|---|---|---|
| weiyii.cn | 中文 | 阿里云 OSS + ESA |
| ay3s.com | 英文、西班牙文、俄文、日文、阿拉伯文 | Cloudflare Pages |
ay3s.com 默认进入英文首页,其他语言继续保留各自的目录。URL 结构基本沿用原来的,迁移也就少了一层麻烦。
博客本身,静态页面就够用了
我的博客用 Astro 构建。文章、首页、分类和标签页,都会在发布前生成 HTML 文件。
读者打开文章时,服务器直接返回已经生成好的页面。正文不需要等浏览器运行一遍 JavaScript 才出现,也不用每次访问都去数据库查内容。
对以阅读为主的博客,我挺喜欢这种方式。部署的东西少,出问题时也容易查:页面有没有生成、文件有没有上传、缓存有没有更新,顺着看就行。
中文站生成好的文件放到 OSS,再通过 ESA 对外提供访问。外语站同样是静态文件,交给 Cloudflare Pages 发布。
两个站,文章只维护一份
拆站之后,我最不想做的就是复制两份项目。
今天改了中文站的导航,明天还得去外语站再改一次。时间一长,总会有一边漏掉。
所以现在仍然共用一个项目,发布时构建两次:
同一份内容和页面代码
↓
中文构建 → 阿里云 OSS / ESA
外语构建 → Cloudflare Pages
两次构建会使用不同的域名和输出目录。中文产物保留中文页面,外语产物保留五种外语页面,各自生成 Sitemap。
这样改布局、修样式、调整文章模板,都只需要维护一处。两站发布时,再检查各自应该包含哪些内容。
旧链接怎么处理,是迁移里最不能省的一步
域名换了,之前的链接不会跟着消失。
搜索结果、别人收藏的地址,以及以前分享出去的文章,都可能继续把读者带到旧页面。
比如原来的英文文章:
https://weiyii.cn/en/articles/文章名/
现在会通过 HTTP 301 跳到:
https://ay3s.com/en/articles/文章名/
文章路径保持对应,原地址带有查询参数时也会保留。
我把这层跳转放在 ESA 上处理。读者访问旧地址,就能直接去新站;搜索引擎再次抓取时,也能看到这是一次永久迁移。
还有个原则:**旧文章要跳到对应的新文章。**如果不管访问哪一篇,最后都扔到新站首页,读者还得重新找,旧链接的意义也就丢了。
实际切换时,也是先把海外站部署好、确认能够访问,再启用旧地址跳转。顺序得对,否则链接先跳走,新站还没准备好,就会出现一段访问空档。
语言切换和搜索标签,也得一起改
拆域名不能只改导航里的链接。
每个页面都有自己的 canonical,用来说明这个页面的规范地址。外语文章搬到 ay3s.com 后,canonical 也必须指向新域名。
不同语言之间,则用 hreflang 标明对应关系。例如一篇中文文章,会同时声明它的英文、日文和其他语言版本;外语页面也会指回中文及其他译文。
读者看到的是语言切换按钮,搜索引擎看到的是页面源码里的对应关系。这两处需要保持一致。
Sitemap 也按站点分开:
- weiyii.cn 的 Sitemap 只列中文站页面。
- ay3s.com 的 Sitemap 只列外语站页面。
新域名还需要在各搜索平台单独验证、提交 Sitemap。原来中文站验证过,不代表新域名也自动获得了验证。
发布完成,我会真的打开看看
部署工具显示上传成功,我还不会马上收工。
这次先在本地检查了两站的 canonical、六种语言链接、Sitemap 和阿拉伯语的从右向左排版,再核验线上页面。
切换时,博客有 30 篇中文文章,以及五种外语的 150 篇译文。加上首页、Sitemap 等内容,一共核验了 192 个线上地址,也检查了旧链接的 301 跳转。
这里有个小细节:CDN 可能往 HTML 里注入访问统计脚本,导致线上文件和本地产物的哈希不同。遇到这种情况,要先看差异具体是什么,不能只凭哈希不一致就认定发布失败。
现在维护起来怎么样
目前这套部署最合我意的地方,是保留了原来能用的部分。
中文站继续留在阿里云,外语站用 Cloudflare Pages,内容和页面代码仍然集中维护。平时更新文章,走一次分站发布流程,就能把两边一起更新。
代价当然也有:两个域名要分别关注证书、统计和站长平台,跨域链接也多了一项检查。但这些事情可以明确列出来,交给发布流程处理,没必要靠每次手工记住。
对我这个以文章为主的博客来说,这样已经够用了。文章打开快一点,旧链接少出错一点,更新时少重复做几遍,维护起来就舒服很多。