Skip to content

好的,根据您提供的两份文档内容,我将对 Next.js 中基于文件的元数据(Metadata)配置进行总结。

这两份文档内容实际上是重复的,都详细介绍了 Next.js 应用中通过创建特定文件的方式来配置元数据。这与在 layout.jspage.js 中导出 metadata 对象或 generateMetadata 函数的“基于配置”方式相对。

以下是核心内容的总结:

核心概念

Next.js 允许通过在 app/ 目录下创建约定名称的特殊文件,来自动注入 HTML <head> 标签中的元数据或提供特定的资源文件(如 sitemap.xml)。


1. 应用图标 (App Icons)

用于设置浏览器标签页、收藏夹、移动设备主屏幕等场景的图标。

  • favicon.ico (静态文件)

    • 文件名: favicon.ico
    • 位置: 必须在 app/ 目录的顶层。
    • 格式: .ico
    • 作用: 设置通用图标,会生成 <link rel="icon" href="/favicon.ico" sizes="any" />。它会应用到整个网站。
  • icon.* (静态文件或代码生成)

    • 文件名: icon.(ico|jpg|jpeg|png|svg)
    • 位置: 可以放在 app/ 目录下的任意层级,实现更细粒度的控制。
    • 格式: 支持 .ico, .jpg, .jpeg, .png, .svg
    • 作用: 设置通用图标,会生成 <link rel="icon" ... /> 标签。可以为不同路由设置不同的图标。
  • apple-icon.* (静态文件或代码生成)

    • 文件名: apple-icon.(jpg|jpeg|png)
    • 位置: 可以放在 app/ 目录下的任意层级。
    • 格式: 支持 .jpg, .jpeg, .png
    • 作用: 专门用于苹果设备(如 iPhone/iPad)将网页添加到主屏幕时的图标,会生成 <link rel="apple-touch-icon" ... /> 标签。
  • 使用代码生成图标

    • 创建 icon.js|ts|tsxapple-icon.js|ts|tsx 文件。
    • 使用 next/og 包中的 ImageResponse API。
    • 通过 JSX 和 CSS 动态生成图片。
    • 可以导出 sizecontentType 来指定图片元数据。
    • 可以使用 generateImageMetadata 函数生成同一图片的多个版本(不同尺寸、颜色等),通过 id 参数区分。

2. Open Graph 和 Twitter 图片 (Open Graph & Twitter Images)

用于在社交媒体(如 Facebook, Twitter)分享链接时,显示精美的预览卡片。

  • opengraph-image.*twitter-image.* (静态文件)

    • 文件名: opengraph-image.(jpg|jpeg|png|gif)twitter-image.(jpg|jpeg|png|gif)
    • 格式: 支持 .jpg, .jpeg, .png, .gif
    • 作用:
      • opengraph-image.* 会生成 og:image, og:image:width, og:image:height, og:image:type 等 meta 标签。
      • twitter-image.* 会生成 twitter:image 等 meta 标签。
  • opengraph-image.alt.txttwitter-image.alt.txt (静态文本文件)

    • 文件名: opengraph-image.alt.txttwitter-image.alt.txt
    • 作用: 为对应的 Open Graph 或 Twitter 图片提供 alt 文本,会生成 og:image:alttwitter:image:alt 标签。
  • 使用代码生成图片

    • 创建 opengraph-image.js|ts|tsxtwitter-image.js|ts|tsx 文件。
    • 同样使用 ImageResponse API。
    • 可以导出 alt, size, contentType 来指定图片元数据。
    • 支持使用 params 获取动态路由参数,并能调用外部 API 获取数据(如文章标题)来动态生成图片内容。

3. SEO 和爬虫配置文件

  • robots.txt

    • 静态文件: 在 app/ 下创建 robots.txt 文件,直接编写规则。
    • 代码生成: 创建 robots.js|ts 文件,导出一个函数,返回一个包含 rules (User-Agent, Allow, Disallow), sitemap, host 等字段的对象。
  • sitemap.xml

    • 静态文件: 在 app/ 下创建 sitemap.xml 文件,手动编写 XML 内容。
    • 代码生成: 创建 sitemap.js|ts 文件,导出一个函数,返回一个包含 url, lastModified, changeFrequency, priority 等字段的对象数组。Next.js 会自动将其序列化为正确的 XML 格式。
  • manifest.json

    • 静态文件: 在 app/ 下创建 manifest.jsonmanifest.webmanifest 文件,编写 PWA (Progressive Web App) 所需的配置信息。
    • 代码生成: 创建 manifest.js|ts 文件,导出一个函数,返回一个包含 name, short_name, icons, start_url, display 等字段的 Manifest 对象。

总结要点

  1. 约定优于配置: Next.js 通过文件名和位置自动识别元数据类型。
  2. 两种方式: 所有提到的元数据类型都支持静态文件代码生成两种方式。
  3. 动态能力: 代码生成方式(JS/TS 文件)提供了强大的动态能力,可以读取路由参数、调用 API、使用 ImageResponse 动态渲染图片。
  4. ImageResponse 是关键: 它是动态生成图片的核心 API,基于 Vercel 的 Satori 库,允许使用 JSX 和 CSS。
  5. generateImageMetadata 实现多图: 该函数可以为一个路由生成多个不同版本的图片(如不同尺寸的 icon 或多个 Open Graph 图片)。
  6. favicon.ico 的特殊性: 它是唯一一个只能通过静态 .ico 文件配置,且必须位于顶层的图标。好的,根据您提供的两份文档内容,我将对 Next.js 中基于文件的元数据(Metadata)配置进行总结。

这两份文档内容实际上是重复的,都详细介绍了 Next.js 应用中通过创建特定文件的方式来配置元数据。这与在 layout.jspage.js 中导出 metadata 对象或 generateMetadata 函数的“基于配置”方式相对。

以下是核心内容的总结:

核心概念

Next.js 允许通过在 app/ 目录下创建约定名称的特殊文件,来自动注入 HTML <head> 标签中的元数据或提供特定的资源文件(如 sitemap.xml)。