You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js项目无page.js/layout.js时如何配置Metadata?

Next.js Pages Router 配置 Metadata 解决方案

你的项目采用的是Next.js Pages Router(旧版路由系统),而layout.js/page.js是App Router(新版路由)的专属文件,所以创建这类文件不会生效,直接用Pages Router的方式配置即可:

全局Metadata(所有页面共用)

1. 通过_document.js配置(基础全局Meta)

_document.js负责自定义HTML文档结构,适合配置全局基础Metadata,比如字符编码、视口设置:

import Document, { Html, Head, Main, NextScript } from 'next/document'

class MyDocument extends Document {
  render() {
    return (
      <Html lang="zh-CN">
        <Head>
          <meta charSet="utf-8" />
          <meta name="viewport" content="width=device-width, initial-scale=1" />
          <meta name="description" content="我的Next.js网站" />
          <title>%s - 我的网站</title> {/* 页面标题会自动拼接在%s位置 */}
        </Head>
        <body>
          <Main />
          <NextScript />
        </body>
      </Html>
    )
  }
}

export default MyDocument

2. 通过_app.js配置(全局补充Meta)

_app.js是所有页面的入口组件,在这里添加的Metadata会作用于所有页面,同时支持页面级Meta覆盖:

import '../Style/global.css'
import Head from 'next/head'

function MyApp({ Component, pageProps }) {
  return (
    <>
      <Head>
        <meta name="author" content="网站作者" />
        <link rel="icon" href="/favicon.ico" />
      </Head>
      <Component {...pageProps} />
    </>
  )
}

export default MyApp

单页面Metadata(单个页面专属)

在具体页面文件(比如Page/index.js)中,导入next/head的Head组件,添加该页面独有的Metadata:

import Head from 'next/head'

export default function Home() {
  return (
    <>
      <Head>
        <title>首页 - 我的网站</title>
        <meta name="description" content="这是网站首页的专属描述" />
      </Head>
      <div>首页内容区域</div>
    </>
  )
}

如果后续想切换到App Router,需要重构目录结构将Page目录改为app,并替换_app.js/_document.js为layout.js,但当前场景下直接用Pages Router的配置方式更高效。

内容的提问来源于stack exchange,提问作者MattiaVise04

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 11:29:56