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

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>
  );
}

错误截图

RootLayout标签缺失错误截图


解决方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:41:00