Nuxt 3 个人站 SEO 排错:文章收录了,却没有富摘要的修复记录
从搜索结果摘要缺失切入,排查 Nuxt 3 文章页的 useSeoMeta、Open Graph、JSON-LD 与 sitemap 动态生成链路,记录一次富摘要缺失的修复过程。

作者
ZHOUYI
前几天在搜索里查自己写的一篇长文,页面确实收录了,但展示出来的只有普通标题和一段不太相关的摘要,没有作者、发布时间、缩略图这类富摘要。对个人站来说,搜索结果就是门面,富摘要缺失会直接影响点击率。于是我把 Nuxt 3 的 SEO 链路完整查了一遍。
先确认:不是没收录,而是结构化信息没给够
我先看页面源码,发现三个问题:文章页只设置了 title,description 用了全站默认值;Open Graph 的图片是相对路径,外部抓取时拼不出完整地址;JSON-LD 只在客户端挂载,SSR 返回的 HTML 里没有。搜索引擎能抓到正文,但缺少明确的结构,自然不容易展示富摘要。
修复:useSeoMeta、Open Graph 和 JSON-LD 都走 SSR
useSeoMeta({
title: () => article.value?.title,
description: () => article.value?.summary,
ogTitle: () => article.value?.title,
ogDescription: () => article.value?.summary,
ogImage: () => toAbsoluteUrl(article.value?.cover),
ogType: 'article'
})
useHead({
script: [{
type: 'application/ld+json',
children: JSON.stringify(buildArticleJsonLd(article.value))
}]
})- useSeoMeta 放在文章页 setup 中,确保服务端渲染时就有 title、description 和 OG 字段。
- OG 图片、canonical 都改成绝对 URL,避免相对路径在抓取工具里失效。
- JSON-LD 输出 BlogPosting/Article 需要的 headline、datePublished、dateModified、author、image。
- 发布、修改、下线文章后,主动清掉相关页面缓存,避免旧 meta 被 Redis 或 CDN 继续吐出。
sitemap 也要动态,别把草稿和下线页交出去
sitemap 我改成接口动态生成:从 MongoDB 只查状态为 published 的文章,带上 updatedAt 作为 lastmod。为了性能,结果会放进 Redis 缓存一小段时间;但文章发布或下线时要立刻失效。这样搜索引擎拿到的是当前有效内容,也方便后续验证收录与摘要更新。
这次排错给我的提醒是:SEO 不是加个 meta 就完事,而是一条从内容状态、页面渲染、结构化数据到 sitemap 的链路。任何一个环节用了客户端补渲染、相对路径或过期缓存,都可能让摘要显示不出来。修复后不一定立刻出现富摘要,但至少链路是干净的,后续观察也更有底。