构建记录
让搜索引擎和阅读器读懂这个站
接上 RSS/JSON Feed、SEO、站内搜索与性能实测
前台 16 个页面已经能看,但一个只给人看的站还不够。这一步把它接到机器能
消费的通道上:RSS 2.0(带全文 content:encoded)、JSON Feed 1.1、canonical /
OG / JSON-LD、sitemap,以及一个完全静态的站内搜索。
几个没有想当然的地方:
- 先读源码再写端点。
@astrojs/rss的site会经createCanonicalURL补尾斜杠,pubDate必须传Date;Astro 的内容条目自带rendered.html,所以 RSS 能给全文, 不必自己重渲染。JSON Feed 官网取不到,就按 1.1 结构手写,不赌记忆。 - 搜索不引入服务端。Pagefind 在
astro:build:done钩子里扫dist/生成静态索引, 搜索页按需懒加载 UI 脚本——首页依然是 0 KB 可执行 JS。UI 的构造参数是从压缩 产物里反推出来的,所以又写了一个真实浏览器回归:输入「静态」返回 8 条结果。 - 性能不靠感觉。用 Chrome DevTools Protocol 模拟 Slow 4G + CPU×4 实测: LCP 972ms、CLS 0、TBT 0、首屏 JS 0KB。脚本明确写了「这不是 Lighthouse」, 分数留到 M6 的 CI 固化。
一个诚实的坑:pnpm test 之前指向还没装的 vitest,一直是个哑弹;嵌套脚本里
npm_execpath 又不透传,硬校验回归会找不到 pnpm。最后改成直接调用
node_modules/astro/bin/astro.mjs,不依赖包管理器,回归才真正跑通。
教训和上次 reference() 那次是同一条:「配置写上了」不等于「真的生效了」,
能写探针就写探针,能在浏览器里点一下就点一下。
相关记录
- 前台 15 个页面落地了 · 2026/11/12