构建日志:使用 Astro、Cloudflare Pages... 笔记

构建日志:使用 Astro、Cloudflare Pages 和 Umami 重建我的博客

作者使用 Astro 重建了个人网站,并聚焦于若干核心原则:保持 SEO 友好、拥有全部资源、最小化 JavaScript 使用,并确保隐私及避免供应商锁定。文章以 Markdown 文件形式管理,存储于 Git 仓库中,slug 保持不变以匹配旧 URL,从而维持 SEO 连续性。迁移过程通过脚本完成,包括导入文章、剔除不必要内容、将图片下载至本地并进行优化。 SEO 是关键关注点,通过实施规范链接(canonical URLs)以及将旧博客路径的 301 重定向指向主域名来解决,从而将排名信号集中到单一主机上。出现了一个持续存在的 bug,原因是残留的 Gatsby Service Worker 提供了缓存内容。解决方案是部署一个新的“关闭开关”(kill-switch)Service Worker,用于注销旧的 Service Worker 并强制刷新至实时站点。 搜索功能通过客户端静态 JSON 索引实现,无需后端服务器。Astro 的作用域样式(scoped styles)引发的小问题,通过调整动态生成元素的 CSS 放置位置得以解决。Mermaid 图表通过异步导入后在客户端显式渲染,以确保正确加载。此外,添加了点击缩放功能以提升图表的可读性。 标签卫生问题通过合并一次性使用及重复标签为规范标签来解决,发布文章少于两篇的页面被标记为 noindex。采用 Umami 实现无 Cookie 分析,并通过 Cloudflare Pages Functions 部署第一方代理以绕过广告拦截器。同时,为 Umami 添加了链接点击事件追踪。 Astro 的视图转换(View Transitions)要求每次导航时重新初始化脚本,因为 `transition:persist` 无法保留附加在脚本上的监听器。最后,发现 Cloudflare 的 Rocket Loader 是导致 Safari 中站点故障的原因,因此将其禁用。