Next.js 15根布局缺失必需HTML标签问题求助
Next.js 15集成i18NextJs遇到的RootLayout标签缺失及NotFound页面异常问题
我在采用App Router和next-i18n-router的Next.js 15项目中集成i18NextJs,目前碰到两个问题:
- NotFound页面无法正常工作
- RootLayout组件被提示缺失
<html>和<body>标签,试了各种调整都解决不了
错误提示
Missing required html tags The following tags are missing in the Root Layout: , .
相关代码(layout.tsx)
import { notFound } from "next/navigation"; import { NextIntlClientProvider } from "next-intl"; import { getMessages } from "next-intl/server"; import React from "react"; import { Locale, routing } from "@/i18n/routing"; import { SessionProvider } from "next-auth/react"; import { auth } from "../../../auth"; import Header from "../../components/Header/page"; import "./globals.css"; export default async function RootLayout({ children, params, }: { children: React.ReactNode; params: { locale: string }; }) { const { locale } = await params; if (!routing.locales.includes(locale as Locale)) { notFound(); } const messages = await getMessages(); const session = await auth(); return ( <html lang="en"> <body> <SessionProvider session={session}> <NextIntlClientProvider messages={messages}> <Header /> {children} </NextIntlClientProvider> </SessionProvider> </body> </html> ); }
错误截图

解决方案
1. 修复RootLayout标签报错
你的代码里明明写了<html>和<body>,但报错大概率是这两个点:
- 把
<html lang="en">改成动态的<html lang={locale}>,固定写死en可能和路由的locale不匹配,导致Next.js识别异常。 - 检查
routing.locales的配置,确保传入的locale确实在这个数组里,要是校验逻辑有问题,notFound()会提前触发,后续的<html>标签根本没渲染出来。
2. 解决NotFound页面失效
Next.js 15 App Router要求NotFound页面必须放在对应语言路由的目录下,也就是app/[locale]/not-found.tsx。你现在在RootLayout里调用notFound(),但没有对应的页面文件,自然无法正常显示。
创建这个文件,示例代码:
// app/[locale]/not-found.tsx import Link from "next/link"; import { useTranslations } from "next-intl"; export default function NotFound() { const t = useTranslations("NotFound"); return ( <div className="container"> <h1>{t("pageNotFound")}</h1> <p>{t("goBackHome")}</p> <Link href="/">{t("home")}</Link> </div> ); }
3. 额外排查项
- 检查有没有其他嵌套Layout也写了
<html>或<body>,Next.js只允许RootLayout包含这两个根标签,重复的话会导致识别错误。 - 把
next-intl和next-i18n-router更到最新版,旧版本可能和Next.js 15的App Router有兼容问题。
内容的提问来源于stack exchange,提问作者Roman
相关产品推荐
相关产品推荐

