用 AI 审计 Astro 站点的 SEO 问题

针对 Astro 的 AI 审计 prompt:路由、sitemap、hreflang、output 模式、RSS——对齐 Astro 6(2026 年 6 月)。

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.mjssrc/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.mjssrc/pages/,两个都要看。
  • 确认 output 模式。static(默认)下,除非页面 export const prerender = false,否则全部预渲染;server 则相反。两种模式 prompt 不同。
  • 备好 locale 清单。双语 en/zh 站,hreflang 审计要知道两个都在预期里、哪个是默认。

具体步骤

  1. astro.config.mjs 加上页面树(find src/pages -type f)作为上下文喂给 agent。

  2. 路由审计。 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
前缀。
  1. 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。
  1. Hreflang 审计。 Astro 可以在两个地方输出 hreflang——页面 <head> 和 sitemap。两边必须一致。Prompt:
对每个双语页对,确认:两边页面都在;每个页面 head 里的
<link rel="alternate" hreflang="..."> 指向对方;自指
alternate 和 x-default 都在;且同样的 alternate 也出现在
sitemap 的 xhtml:link 条目里。head 和 sitemap 的不一致
分开报告。
  1. RSS 审计(如果你发了 feed):
读 @astrojs/rss 用法。确认:feed 的 `site` 匹配生产
origin、每个 item 有 pubDate、feed 通过 rel="alternate"
application/rss+xml 链接挂在 <head> 里、item 链接是绝对
而非相对路径。
  1. 把发现分流为阻塞(页面坏或 canonical 错)、warn(缺锦上添花的)、info(风格)。先修阻塞。

  2. 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 条目没有 zhxhtml: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 配置。

相关阅读

标签: #AI 编程 #教程