Astro 灵活——两种 output 模式、可选 integration、内容集合、按页面单独关掉预渲染——这恰恰也是多数团队积累隐性 SEO bug 的地方。Sitemap 漏一条路由、hreflang 漏一个 locale、RSS 指着过期的 base URL:这些都要等到流量开始掉才浮出来。这篇讲针对 Astro 的审计 prompt,专门抓通用站审根本不会去看的”Astro 形”问题,全部对齐 2026 年 3 月起就稳定的 Astro 6 配置形态。
一句话总结
把 astro.config.mjs 加上 find src/pages -type f 的页面树喂给一个 AI agent(Claude Code、Cursor 或 Codex),然后按顺序跑四个范围明确的审计:路由 → sitemap → hreflang → RSS。每个审计都把一个 Astro 子系统和其他子系统交叉核对,并指向具体文件或 URL。修阻塞项、重新 build、再跑一遍。双语 Astro 站最常见的沉默 bug,是 sitemap 里漏掉 hreflang alternate;而 Astro 5→6 迁移最常漏的,是配置里残留的 output: 'hybrid'——它已经不存在了。
这篇讲什么
针对 Astro 的审计 prompt,瞄准多数团队”上线即遗忘”的集成层:astro.config.mjs、src/pages/、sitemap 输出、hreflang alternate、output 模式、RSS。审计是按 Astro 实际怎么 build 来裁剪的——不是通用的”你站好不好”。
写第一条 prompt 之前,先把两件事钉死:
- Output 模式。 从 Astro 5 起(Astro 6 不变),就只有两种:
output: 'static'(默认)和output: 'server'。老的output: 'hybrid'在 v5 被移除——它的行为现在就是默认的static模式,任意单条路由只要export const prerender = false就改成按需渲染。如果你的配置里还写着hybrid,那就是发现 #1。 - i18n 策略。 用 Astro 内置
i18n配置,还是社区 integration。默认prefixDefaultLocale: false意味着默认 locale 的 URL 没有/en/前缀,其余每个 locale 都有——这会改变路由审计和 sitemap 审计该预期什么。
这篇适合谁看
跑 Astro 内容 / 营销站的独立开发和小团队——尤其是双语站,hreflang 和路由生成的相互作用很不直观。
什么时候跑
- 大批量内容增加前后。
- Astro 大版本升级后(4→5→6 改了配置形态、移除了
hybrid、把内容集合搬到了 Content Layer 的 loader API 上)。 - 加 / 减 integration 后。
- 每季度固定跑一次——integration 版本一升,配置就会悄悄漂。
站级审计跑完,再下钻到AI Category 页审计教程——重复 intro、内链弱、分页坏,通常只有专门审 Category 页时才暴露。
开始前准备
- 让 AI 能读到
astro.config.mjs和src/pages/,两个都要看。 - 确认 output 模式。
static(默认)下,除非页面export const prerender = false,否则全部预渲染;server则相反。两种模式 prompt 不同。 - 备好 locale 清单。双语
en/zh站,hreflang 审计要知道两个都在预期里、哪个是默认。
具体步骤
-
把
astro.config.mjs加上页面树(find src/pages -type f)作为上下文喂给 agent。 -
路由审计。 Astro 对没有
getStaticPaths的动态路由会大声报错(GetStaticPathsRequired),但当你代码里构造的某个 slug 从没出现在getStaticPaths()里时,它会沉默失败——那条路径在线上 404,build 却照样通过。Prompt:
基于 astro.config.mjs 和 src/pages 树,列出 Astro build
会生成的每个路由。标出:没 getStaticPaths export 的
[slug] 或 [...slug] 动态路由、getStaticPaths 返回空数组、
两个文件解析到同一 URL,以及(结合 i18n.defaultLocale 和
prefixDefaultLocale)任何缺失或与该设置不一致的 locale
前缀。
- Sitemap 审计。
@astrojs/sitemap会输出sitemap-index.xml加上编号的sitemap-0.xml(每个文件到 45,000 条 URL 就分块)。它的i18n块才是生成<xhtml:link rel="alternate" hreflang="...">的地方——这个块不在,就没有 alternate 输出,不管你页面<head>里写了什么。Prompt:
检查 @astrojs/sitemap 配置。确认 `site` 是生产 origin,
并报告 i18n 块(含 defaultLocale + locales)在不在。列出
sitemap 会包含的 URL,和第 2 步路由列表交叉。标出:
sitemap 有但没生成的、生成了但被排除的、双语 URL 缺失的
hreflang alternate,以及 serialize() hook 设的看起来不对的
lastmod 或 changefreq。
- Hreflang 审计。 Astro 可以在两个地方输出 hreflang——页面
<head>和 sitemap。两边必须一致。Prompt:
对每个双语页对,确认:两边页面都在;每个页面 head 里的
<link rel="alternate" hreflang="..."> 指向对方;自指
alternate 和 x-default 都在;且同样的 alternate 也出现在
sitemap 的 xhtml:link 条目里。head 和 sitemap 的不一致
分开报告。
- RSS 审计(如果你发了 feed):
读 @astrojs/rss 用法。确认:feed 的 `site` 匹配生产
origin、每个 item 有 pubDate、feed 通过 rel="alternate"
application/rss+xml 链接挂在 <head> 里、item 链接是绝对
而非相对路径。
-
把发现分流为阻塞(页面坏或 canonical 错)、warn(缺锦上添花的)、info(风格)。先修阻塞。
-
跑
astro build,然后对着 build 出来的dist/重跑审计。Sitemap 和 hreflang 的修复只有在新 build 后才显现——重新 build 之前,源文件和输出会一直漂。
“好发现”长什么样
只有当每条发现都可复现时,审计才有用。每个结果都用这把尺子卡:
| 含糊发现(拒收) | 可操作发现(保留) |
|---|---|
| “sitemap 错了" | "sitemap-0.xml 列了 /en/foo,但 src/pages/en/foo.astro 不存在" |
| "hreflang 坏了" | "/en/pricing head 里链了 hreflang=zh,但 sitemap 条目没有 zh 的 xhtml:link" |
| "有些路由 404" | "[...slug].astro build 出 0 条路径,因为 getStaticPaths() 返回 []” |
如果审计说”X 缺失”,但 build 后 dist/X/index.html 确实在,那是 AI 读了旧源——重新 build 再跑,别在假阳性上动手。
容易踩的坑
- 不给配置上下文就让 AI”审一下站”——拿到与 Astro 无关的通用 SEO 建议。
- 不重新 build 就审源文件——sitemap 输出和渲染后 HTML 在你再跑
astro build之前会和源漂开。 - v5/v6 升级后配置里还留着
output: 'hybrid'——它被移除了,build 要么报错要么直接忽略。改用static加按路由export const prerender = false。 - 双语站跳过 hreflang 审计——sitemap 缺 alternate 是 Astro 头号沉默 SEO 问题。
- 以为 sitemap 的
i18n块能修页面级 hreflang——它俩相互独立。sitemap 审计和 hreflang 审计都得过。 - 把
getStaticPaths返回[]当无害——那是会以 404 上线的路由。
接进 CI
把四个 prompt 分开存,这样改了哪块就只重跑哪个子集。然后把反复出现的检查变成代码:一个小 CI 步骤,跑 astro build,再把生成的路由列表(或 sitemap-0.xml)和提交在仓库里的预期清单做 diff。有了它,AI 审计就不再是”哪里坏了”,而变成”清单变了——这个改动是有意的吗”,后者在每个 PR 上回答起来便宜得多。
FAQ
- static 和 server,审计会变吗?: 会。
output: 'server'下,除非页面export const prerender = true,否则在请求时渲染,所以 AI 单凭文件推断的路由列表可能不全。告诉 agent 你的 output 模式,以及哪些路由不走默认。 output: 'hybrid'还在吗?: 不在。Astro 5 移除了它,Astro 6(2026 年 3 月起稳定)继续没有。老的 hybrid 行为就是默认的static模式;让单条路由按需渲染用export const prerender = false。- 我的站用社区 i18n integration,不是内置
i18n。: 同样的审计,配置路径不同。把 AI 指向该 integration 的配置,并告诉它哪个 locale 是默认;这些 prompt 不假设你用内置路由。 - 跟内容审计什么关系?: 这个查框架级接线(路由、sitemap、feed);内容审计查每文件 frontmatter。两个都跑——看 Astro 内容审计教程。
- AI 能写修复吗?: 能——问”给修复 N 的最小补丁”。配置类改动(补 sitemap 的
i18n块、修getStaticPaths的 slug)正是它最快、最准的地方。 - Starlight 或其他 Astro 模板适用吗?: 适用,但有个坑:模板可能把配置藏在自己的选项后面。把 AI 指向底层
astro.config.mjs和模板暴露的任何 integration 配置。