字体预加载没生效,是不是写法有问题?

シ娇娇 阅读 3

我在 React 项目里用 next/font 加载自定义字体,但 Lighthouse 还是提示“确保文本在网页字体加载期间保持可见”,感觉预加载没起作用。我试过在 head 里加 link rel="preload",但不确定是不是和 Next.js 的机制冲突了。

这是我的组件代码:

import { Inter } from 'next/font/google';

const inter = Inter({
  subsets: ['latin'],
  display: 'swap',
});

export default function Layout({ children }) {
  return (
    <html lang="en">
      <body className={inter.className}>{children}</body>
    </html>
  );
}

这样写应该自动处理预加载了吧?为什么还会报资源优化问题?

我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
司徒俊鑫
你这问题跟 WordPress 关系不大,不过既然问到字体预加载,我来给你说说。在 Next.js 里,next/font 确实会自动处理预加载,但有个细节容易被忽略。

首先检查你的 next.config.js 里是不是设置了什么奇怪的东西影响了字体加载。其次,确保你的生产环境配置正确,因为开发环境下有些优化可能不会生效。

如果还是不行,可以试试手动在 _app.js 里加个 preload:

import { Inter } from 'next/font/google';
import Script from 'next/script';

const inter = Inter({
subsets: ['latin'],
display: 'swap',
});

export default function App({ Component, pageProps }) {
return (
<>




);
}


记住一点,字体预加载有时候受浏览器策略影响,特别是跨域设置不对的时候。别忘了检查开发者工具里的网络请求,看看字体是不是真的没预加载上。这些问题搞起来确实挺烦人的,我都折腾过好几次。
点赞
2026-03-27 20:03