بهینه‌سازی فونت در Next.js با next/font

فونت‌ها لباس ظاهری صفحات وب هستند. با استفاده از next/font در Next.js می‌توانید فونت‌ها را به‌صورت خودکار بهینه‌سازی، self-host، و بدون هیچ‌گونه تغییر چیدمان (layout shift) بارگذاری کنید. این مقاله نحوهٔ استفاده از فونت‌های گوگل، فونت‌های محلی، ادغام با Tailwind CSS، و بهترین شیوه‌های مدیریت فونت را آموزش می‌دهد.

next/fontGoogle FontsTailwind CSS

~2 min read · Updated Dec 13, 2025

چرا از next/font استفاده کنیم؟


مشکل قدیمیراه‌حل next/font
درخواست به گوگلدانلود در زمان build
Layout ShiftCLS = 0
نشت حریم خصوصیبدون tracker
لود کندفونت محلی

۱. فونت‌های گوگل — آسان مثل نفس کشیدن


import { Inter, Roboto_Mono } from 'next/font/google'

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

const roboto_mono = Roboto_Mono({
  subsets: ['latin'],
  weight: '400',
  variable: '--font-mono',
})

در layout:

<html className={`${inter.variable} ${roboto_mono.variable}`}>

۲. فونت‌های محلی — عشق سفارشی شما


import localFont from 'next/font/local'

const vazir = localFont({
  src: './fonts/Vazir.woff2',
  variable: '--font-vazir',
  display: 'swap',
})

برای چند وزن:

src: [
  { path: './Vazir-Thin.woff2', weight: '100' },
  { path: './Vazir-Regular.woff2', weight: '400' },
  { path: './Vazir-Bold.woff2', weight: '700' },
]

۳. ادغام با Tailwind CSS — عشق واقعی


// layout.tsx
<html className={`${inter.variable} ${roboto.variable} antialiased`}>

// tailwind.config.ts
fontFamily: {
  sans: ['var(--font-inter)'],
  mono: ['var(--font-mono)'],
}

در JSX:

<p className="font-sans">متن معمولی</p>
<code className="font-mono">کد</code>

۴. فایل تعریف فونت — تمیز و سازمان‌یافته


// styles/fonts.ts
export const inter = Inter({ subsets: ['latin'], variable: '--font-inter' })
export const vazir = localFont({ src: './Vazir.woff2', variable: '--font-vazir' })

// app/page.tsx
import { inter, vazir } from '@/styles/fonts'

<h1 className={vazir.className}>سلام دنیا</h1>
<p className={inter.className}>خوش آمدید</p>

۵. روش‌های اعمال فونت


  • className: <p className={inter.className}>
  • style: <p style={inter.style}>
  • CSS Variable: font-family: var(--font-inter)

۶. Preloading — فقط آنچه نیاز است


مکانچه چیزی preload می‌شود؟
app/layout.tsxهمه صفحات
app/dashboard/layout.tsxفقط داشبورد
app/page.tsxفقط صفحه خانه

۷. بهترین شیوه‌ها


  • ✅ استفاده از variable برای Tailwind
  • ✅ تعریف subsets برای کاهش حجم
  • ✅ استفاده از display: 'swap' برای جلوگیری از CLS
  • ✅ تعریف فونت‌ها در fonts.ts برای سازمان بهتر
  • ✅ استفاده از فونت‌های متغیر (variable fonts)

۸. مثال واقعی: فروشگاه آنلاین


// styles/fonts.ts
export const inter = Inter({ subsets: ['latin'], variable: '--font-inter' })
export const playfair = Playfair_Display({ weight: '700', variable: '--font-title' })

// layout.tsx
<html className={`${inter.variable} ${playfair.variable}`}>
  <body className={inter.className}>{children}</body>
</html>

// page.tsx
<h1 className={`${playfair.className} text-4xl`}>فروشگاه من</h1>
<p className="text-lg">بهترین محصولات، بهترین قیمت‌ها</p>

۹. چک‌لیست نهایی


  • ✅ استفاده از next/font
  • ✅ تعریف subsets
  • ✅ استفاده از variable برای Tailwind
  • ✅ تعریف فونت‌ها در fonts.ts
  • ✅ استفاده از display: 'swap'
  • ✅ CLS = صفر

Written & researched by Dr. Shahin Siami

Related Articles

مسیریابی پیشرفته و هوک‌های عملکرد در Next.js — راهنمای توسعه‌دهنده برای App Router

Next.js مجموعه‌ای غنی از هوک‌های کلاینت و ابزارهای کش و ناوبری را در اختیار توسعه‌دهندگان قرار می‌دهد. از خواندن پارامترهای مسیر تا گزارش Web Vitals و مدیریت کش، این مقاله مهم‌ترین ابزارهای App Router را با مثال‌های کاربردی معرفی می‌کند.

Continue

مدیریت احراز هویت و کش در Next.js — راهنمای توسعه‌دهنده برای امنیت و عملکرد پویا

Next.js با معرفی قابلیت‌های آزمایشی جدید، امکان کنترل دقیق‌تر دسترسی و کش داده‌ها را فراهم کرده است. تابع unauthorized برای مدیریت خطای 401 و هدایت کاربران به صفحه ورود، unstable_cache برای کش هوشمند عملیات سنگین، updateTag برای بازسازی آنی داده‌ها، و useLinkStatus برای نمایش وضعیت ناوبری استفاده می‌شوند. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات مهم بررسی می‌کند.

Continue

redirect و refresh در Next.js — ریدایرکت‌های هوشمند و تازه‌سازی مسیر در Server Actions

تابع redirect در Next.js برای هدایت کاربر به مسیر جدید استفاده می‌شود و بسته به نوع استفاده، پاسخ HTTP با وضعیت 307 یا 303 ارسال می‌کند. این تابع در Server Components، Client Components، Route Handlers و Server Actions قابل استفاده است. تابع refresh نیز برای تازه‌سازی مسیر کلاینت از درون Server Action استفاده می‌شود. این مقاله نحوه استفاده از هر دو تابع را با مثال‌های کاربردی و نکات مهم توضیح می‌دهد.

Continue

Next.js با معرفی NextRequest و NextResponse، APIهای Request و Response مرورگر را گسترش داده و ابزارهای قدرتمندی برای مدیریت کوکی‌ها، هدرها، ریدایرکت‌ها، بازنویسی مسیرها و پاسخ‌های JSON فراهم کرده است. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات امنیتی توضیح می‌دهد.

Next.js با معرفی NextRequest و NextResponse، APIهای Request و Response مرورگر را گسترش داده و ابزارهای قدرتمندی برای مدیریت کوکی‌ها، هدرها، ریدایرکت‌ها، بازنویسی مسیرها و پاسخ‌های JSON فراهم کرده است. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات امنیتی توضیح می‌دهد.

Continue

headers، ImageResponse، notFound و permanentRedirect در Next.js — مدیریت درخواست‌ها، تولید تصویر، خطا و ریدایرکت

Next.js ابزارهای قدرتمندی برای مدیریت درخواست‌ها و پاسخ‌ها در کامپوننت‌های سروری فراهم کرده است. تابع headers برای خواندن هدرهای HTTP ورودی، ImageResponse برای تولید تصاویر داینامیک، notFound برای نمایش صفحه خطای 404، و permanentRedirect برای ریدایرکت دائمی کاربران استفاده می‌شوند. این مقاله نحوه استفاده از هر یک را با مثال‌های کاربردی توضیح می‌دهد.

Continue

راهنمای کامل استفاده از metadata و generateMetadata در Next.js

در نسخه‌های مدرن Next.js، مدیریت metadata صفحات بسیار قدرتمندتر و ساده‌تر شده است. metadata به‌صورت خودکار در تگ <head> صفحات تزریق می‌شود و نقش مهمی در SEO، اشتراک‌گذاری اجتماعی و تجربه کاربری دارد. این مقاله دو روش اصلی تعریف metadata را بررسی می‌کند: استفاده از آبجکت ثابت metadata و تابع داینامیک generateMetadata.

Continue