meta 标签(Next.js Metadata API)
Next.js App Router 提供 Metadata API,可以在 layout.js / page.js 中通过导出 metadata 对象生成静态 <meta> 标签,或者导出 generateMetadata() 异步函数生成动态 <meta> 标签。
来源整理自:vue3js.cn 面试官系列
补充
补充:静态 + 动态 metadata 的写法以及支持的字段。
// app/posts/[id]/page.tsx
import type { Metadata } from "next";
// 1. 静态 metadata:导出固定对象
export const metadata: Metadata = {
title: "博客 - 我的文章",
description: "前端面试八股文汇总",
openGraph: { title: "博客", type: "website" },
};
// 2. 动态 metadata:根据 params / fetch 返回结果生成
export async function generateMetadata(
{ params }: { params: { id: string } },
): Promise<Metadata> {
const post = await fetch(`https://api.example.com/posts/${params.id}`).then(r => r.json());
return {
title: post.title,
description: post.summary,
};
}
常见可配置项:
title:支持template: "%s | 博客名",自动拼接子页面标题。description、keywords、robots、viewport。openGraph/twitter:社交分享卡片。icons/manifest:站点图标与 PWA manifest。metadataBase:相对 URL 的解析基准,避免openGraph.images拼出不完整的链接。
注意:
- 同一路由下若同时存在
metadata导出和generateMetadata导出,会按顺序合并(后者优先级更高),但建议二选一。 generateMetadata与generateStaticParams一起使用,可在next build时为静态路由预渲染 meta。



