跳到正文

← 返回日志

构建记录

让搜索引擎和阅读器读懂这个站

接上 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() 那次是同一条:「配置写上了」不等于「真的生效了」, 能写探针就写探针,能在浏览器里点一下就点一下。

查看全部创作日志 →