opengraph-image 和 twitter-image
opengraph-image
和 twitter-image
文件约定允许您为路由段设置 Open Graph 和 Twitter 图像。
当用户分享您网站的链接时,它们对于设置出现在社交网络和消息应用程序上的图像非常有用。
有两种方法可以设置 Open Graph 和 Twitter 图像
图像文件 (.jpg, .png, .gif)
通过在段中放置 opengraph-image
或 twitter-image
图像文件,使用图像文件设置路由段的共享图像。
Next.js 将会评估文件并自动将适当的标签添加到应用的 <head>
元素中。
文件约定 | 支持的文件类型 |
---|---|
opengraph-image | .jpg , .jpeg , .png , .gif |
twitter-image | .jpg , .jpeg , .png , .gif |
opengraph-image.alt | .txt |
twitter-image.alt | .txt |
温馨提示:
twitter-image
文件大小不得超过 5MB,opengraph-image
文件大小不得超过 8MB。如果图像文件大小超过这些限制,构建将会失败。
opengraph-image
twitter-image
将 twitter-image.(jpg|jpeg|png|gif)
图像文件添加到任何路由段。
<meta name="twitter:image" content="<generated>" />
<meta name="twitter:image:type" content="<generated>" />
<meta name="twitter:image:width" content="<generated>" />
<meta name="twitter:image:height" content="<generated>" />
opengraph-image.alt.txt
在与 opengraph-image.(jpg|jpeg|png|gif)
图像相同的路由段中添加一个附带的 opengraph-image.alt.txt
文件作为其替代文本。
About Acme
<meta property="og:image:alt" content="About Acme" />
twitter-image.alt.txt
在与 twitter-image.(jpg|jpeg|png|gif)
图像相同的路由段中添加一个附带的 twitter-image.alt.txt
文件作为其替代文本。
About Acme
<meta property="twitter:image:alt" content="About Acme" />
使用代码生成图像 (.js, .ts, .tsx)
除了使用 文字图像文件 外,您还可以使用代码生成图像。
通过创建一个默认导出函数的 opengraph-image
或 twitter-image
路由来生成路由段的共享图像。
文件约定 | 支持的文件类型 |
---|---|
opengraph-image | .js , .ts , .tsx |
twitter-image | .js , .ts , .tsx |
温馨提示:
- 默认情况下,生成的图像会被 静态优化(在构建时生成并缓存),除非它们使用 动态 API 或未缓存的数据。
- 您可以使用
generateImageMetadata
在同一个文件中生成多个图像。opengraph-image.js
和twitter-image.js
是特殊的路由处理程序,默认情况下会被缓存,除非它使用 动态 API 或 动态配置 选项。
生成图像最简单的方法是使用 next/og
中的 ImageResponse API。
import { ImageResponse } from 'next/og'
export const runtime = 'edge'
// Image metadata
export const alt = 'About Acme'
export const size = {
width: 1200,
height: 630,
}
export const contentType = 'image/png'
// Image generation
export default async function Image() {
// Font
const interSemiBold = fetch(
new URL('./Inter-SemiBold.ttf', import.meta.url)
).then((res) => res.arrayBuffer())
return new ImageResponse(
(
// ImageResponse JSX element
<div
style={{
fontSize: 128,
background: 'white',
width: '100%',
height: '100%',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
}}
>
About Acme
</div>
),
// ImageResponse options
{
// For convenience, we can re-use the exported opengraph-image
// size config to also set the ImageResponse's width and height.
...size,
fonts: [
{
name: 'Inter',
data: await interSemiBold,
style: 'normal',
weight: 400,
},
],
}
)
}
<meta property="og:image" content="<generated>" />
<meta property="og:image:alt" content="About Acme" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
属性
默认导出函数接收以下属性
params
(可选)
一个包含从根段到 opengraph-image
或 twitter-image
所在段的 动态路由参数 对象的对象。
export default function Image({ params }: { params: { slug: string } }) {
// ...
}
路由 | URL | params |
---|---|---|
app/shop/opengraph-image.js | /shop | undefined |
app/shop/[slug]/opengraph-image.js | /shop/1 | { slug: '1' } |
app/shop/[tag]/[item]/opengraph-image.js | /shop/1/2 | { tag: '1', item: '2' } |
app/shop/[...slug]/opengraph-image.js | /shop/1/2 | { slug: ['1', '2'] } |
返回值
默认导出函数应返回 Blob
| ArrayBuffer
| TypedArray
| DataView
| ReadableStream
| Response
。
温馨提示:
ImageResponse
满足此返回类型。
配置导出
您可以选择通过从 opengraph-image
或 twitter-image
路由导出 alt
、size
和 contentType
变量来配置图像的元数据。
选项 | 类型 |
---|---|
alt | 字符串 |
size | { width: 数字; height: 数字 } |
contentType | string - 图像 MIME 类型 |
alt
export const alt = 'My images alt text'
export default function Image() {}
<meta property="og:image:alt" content="My images alt text" />
size
export const size = { width: 1200, height: 630 }
export default function Image() {}
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
contentType
opengraph-image.tsx | twitter-image.tsxexport const contentType = 'image/png'
export default function Image() {}
export const contentType = 'image/png'
export default function Image() {}