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

Next.js 13(实验性app.dir)全页面默认SSR问题求助

Next.js 13 App Router 默认非SSG问题解决方法

Next.js 13 App Router 中,页面组件默认是 Server Components,构建时默认标记为 Server(λ)——这是框架为保留服务端渲染灵活性的默认行为,即便页面没有数据获取逻辑,也不会自动触发全静态生成(SSG)。只有动态路由配合generateStaticParams时,才会自动预渲染为静态页面。

方案1:单页面强制静态生成

在需要静态化的页面文件(如app/test/page.tsx)中添加dynamic配置,强制页面静态生成:

export const dynamic = "force-static";

const TestPage = () => {
  return <h1>test page</h1>;
};

export default TestPage;

添加后执行npm run build,该页面会被标记为●(SSG)。

方案2:全局默认静态生成

如果希望所有页面默认都采用SSG,可以在根布局app/layout.tsx中添加全局配置,所有子页面会自动继承该设置:

export const dynamic = "force-static";

export default function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <html lang="zh-CN">
      <body>{children}</body>
    </html>
  );
}

如果某个页面需要动态渲染(比如依赖用户会话、实时数据),可在该页面单独导出dynamic = "auto"或"force-dynamic"覆盖全局配置。

补充说明

  • App Router 已废弃getStaticProps,静态生成逻辑通过dynamic配置 + Server Components 内直接写数据请求 + generateStaticParams(动态路由场景)组合实现。
  • 当页面使用force-static时,Next.js 会在构建阶段预渲染页面为静态HTML文件,后续请求直接返回静态资源,不再经过服务端渲染。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:45:40