App Router 中的元数据 API 与 SEO
导出静态和动态元数据对象,以设置页面标题、描述和 OG 标签。
App Router 中的元数据 API 与 SEO 是 CoddyKit 上的免费 React Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 React Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 React Academy 课程共包含 4 节课。
元数据为何重要
良好的元数据(标题、描述、OG 标签)可以提升 SEO 排名和社交分享预览效果。Next.js App Router 提供类型安全的 Metadata API,可在服务器端生成 <head> 标签。
静态元数据导出
从任意 page.tsx 或 layout.tsx 中导出 metadata 对象,即可为该片段设置静态标签。
import type { Metadata } from 'next';
export const metadata: Metadata = {
title: 'My App',
description: 'The best app ever built',
keywords: ['react', 'nextjs', 'typescript'],
};
export default function Page() { return <main>Hello</main>; }标题模板
在布局中使用 title.template,这样子页面就能自动获得格式统一的标题,无需重复写入网站名称。
// app/layout.tsx
export const metadata: Metadata = {
title: {
template: '%s | My App',
default: 'My App',
},
};
// app/about/page.tsx
export const metadata: Metadata = {
title: 'About', // renders as "About | My App"
};使用 generateMetadata 的动态元数据
对于需要根据数据生成标签的路由,请导出异步 generateMetadata 函数——它会接收 params 和父级元数据。
export async function generateMetadata({ params }: { params: { id: string } }): Promise<Metadata> {
const product = await getProduct(params.id);
return {
title: product.name,
description: product.summary,
openGraph: {
title: product.name,
images: [product.imageUrl],
},
};
}Open Graph 标签
openGraph 键会为 Facebook、LinkedIn 和 Slack 上的社交分享设置 OG 标签。
export const metadata: Metadata = {
openGraph: {
title: 'My Product',
description: 'Buy now!',
url: 'https://example.com/product',
siteName: 'My App',
images: [{ url: 'https://example.com/og.png', width: 1200, height: 630 }],
type: 'website',
locale: 'en_US',
},
};Twitter 卡片标签
twitter 键会设置 Twitter 专用的卡片元数据,以便在推文中显示丰富的预览。
twitter: {
card: 'summary_large_image',
title: 'My Product',
description: 'Buy now!',
images: ['https://example.com/twitter.png'],
creator: '@myhandle',
},机器人规则与规范链接
使用 robots 控制爬取,并设置规范 URL,以避免因重复内容受到处罚。
export const metadata: Metadata = {
robots: { index: true, follow: true, googleBot: { index: true } },
alternates: { canonical: 'https://example.com/products' },
};网站图标与图标
将图标文件放入 app/,并使用保留名称(icon.png、apple-icon.png、favicon.ico),或者在 metadata.icons 中声明它们。
// Convention: place app/icon.png → auto-detected as favicon
// Or declare explicitly:
export const metadata: Metadata = {
icons: {
icon: '/icon.png',
apple: '/apple-icon.png',
shortcut: '/shortcut-icon.png',
},
};使用 ImageResponse 生成 OG 图像
在 route.ts 中使用来自 next/og 的 ImageResponse,即可将 JSX 渲染为 PNG 并生成动态 OG 图像。
// app/og/route.ts
import { ImageResponse } from 'next/og';
export async function GET(req: Request) {
const { searchParams } = new URL(req.url);
const title = searchParams.get('title') ?? 'Default';
return new ImageResponse(
<div style={{ fontSize: 48, background: '#fff', width: '100%', height: '100%' }}>
{title}
</div>,
{ width: 1200, height: 630 }
);
}结构化数据(JSON-LD)
在页面的 JSX 中注入 <script> 标签,即可添加 JSON-LD 结构化数据——它不属于 Metadata API,但可以与其配合使用。
export default function ProductPage({ product }) {
const jsonLd = {
'@context': 'https://schema.org',
'@type': 'Product',
name: product.name,
price: product.price,
};
return (
<>
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }} />
<h1>{product.name}</h1>
</>
);
}验证元数据
使用浏览器 DevTools(Network 标签页、查看 HTML 源代码)或 opengraph.xyz 等工具,验证元数据是否正确渲染在服务器 HTML 中。
快速检查
哪个 Next.js Metadata API 功能可以让子页面继承并自定义共享的标题后缀,例如“关于 | 我的应用”?
回顾
导出 metadata 设置静态标签,或使用 generateMetadata() 设置动态标签。在布局中使用 title.template,以便以 DRY 方式生成标题;设置 openGraph 和 twitter 以生成社交分享预览;并在路由处理器中使用 ImageResponse 提供动态 OG 图像。
用 AI 导师学习 React — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 88
- 课程
- 324
常见问题解答
「App Router 中的元数据 API 与 SEO」课时是免费的吗?
是的 — 「App Router 中的元数据 API 与 SEO」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 React Academy 课程的其余内容,请升级到 CoddyKit PRO。 React Academy 课程共包含 4 节课。
「App Router 中的元数据 API 与 SEO」这节课中我会学到什么?
导出静态和动态元数据对象,以设置页面标题、描述和 OG 标签。 你通过在浏览器中直接运行的动手代码来练习 React Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 React Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 React Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「App Router 中的元数据 API 与 SEO」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 React Academy 课中编写并运行代码吗?
能。每节 React Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- App Router 文件约定
- Next.js 中的服务器组件与客户端组件
- 动态路由与路由组
- App Router 中的元数据 API 与 SEO