راهنمای جامع بهینه سازی فونت در وب

فونت‌ها علاوه بر زیباسازی سایت، نقش کلیدی در تجربه کاربری (UX)، سرعت بارگذاری، سئو، و حتی درآمد وب‌سایت دارند. بهینه‌سازی فونت فقط یک کار تزئینی نیست؛ بلکه یک سرمایه‌گذاری واقعی روی عملکرد و رضایت کاربران است.

فهرست مطالب

اهمیت بهینه‌سازی فونت

۱- تاثیر مستقیم بر سرعت سایت و تجربه کاربر

  • فونت‌های سنگین و بزرگ زمان بارگذاری سایت را زیاد می‌کنند و کاربران را فراری می‌دهند.
  • هر میلی‌ثانیه تاخیر، نرخ تبدیل (Conversion Rate) و سئوی سایت را کاهش می‌دهد.
  • در موبایل، اهمیت این موضوع بیشتر است؛ چون سرعت اینترنت کاربران پایین‌تر و منابع محدودتر است.

۲- تاثیر بر شاخص‌های کلیدی عملکرد (Core Web Vitals)

شاخصتوضیحنقش فونت
LCPبزرگ‌ترین محتوای قابل مشاهدهفونت سنگین تاخیر در نمایش متن اصلی ایجاد می‌کند
FIDتاخیر اولین تعامل کاربرفونت دیر لود شده مانع تعامل سریع می‌شود
CLSجابجایی چیدمان صفحهتغییر فونت ناگهانی باعث جابجایی متن و عناصر می‌شود

استفاده از فونت‌های بهینه و سبک، سرعت سایت را تا چندین برابر افزایش می‌دهد و مستقیماً بر سئو و تجربه کاربری تاثیر مثبت دارد. 
web.dev: Best practices for fonts

۳- تاثیر بر برندینگ و اعتماد کاربران

  • فونت زیبا و صحیح، حس حرفه‌ای بودن سایت را منتقل می‌کند.
  • فونت‌های ناهمگون یا دیر لود شده، حس بی‌نظمی و ضعف ایجاد می‌کنند.

۴- تاثیر بر درآمد و فروش

  • بر اساس تحقیقات OpenReplay، هر ثانیه تاخیر در بارگذاری فونت می‌تواند تا ۲۰٪ درآمد فروشگاه‌های اینترنتی را کاهش دهد.

۵- بهینه‌سازی فونت، هنر و علم

بهینه‌سازی فونت تنها محدود به کم کردن حجم نیست؛ بلکه برای حفظ کیفیت رندر، پشتیبانی از مرورگرهای مختلف، کاهش مصرف منابع و جلوگیری از مشکلات رایج (مثل نمایش ناقص یا بهم‌ریختگی متن) باید چندین تکنیک را باهم به کار گرفت.

فرمت‌های رایج فونت و مقایسه آن‌ها

فرمت فونتتوضیححجم (میانگین)پشتیبانی مرورگر
TTF/OTFقدیمی، بدون فشرده‌سازی، سازگاربالااکثر مرورگرها
WOFFفشرده و مخصوص وبمتوسطهمه مرورگرهای مدرن
WOFF2بهینه‌تر و بسیار فشردهکمهمه مرورگرهای مدرن (جدیدتر)
EOTمخصوص IEمتوسطفقط IE
SVGمخصوص موبایل‌های قدیمیبالامنسوخ

توصیه: حداقل فرمت‌های WOFF و WOFF2 را ارائه دهید. WOFF2 بهترین گزینه است.

WOFF2 is the best choice for web font delivery due to its high compression and widespread browser support.
nitropack.io

ساب‌ستینگ (Font Subsetting) یا حذف کاراکترهای اضافی

ساب‌ستینگ چیست و چرا مهم است؟

  • فونت‌ها معمولاً هزاران گلیف دارند (انگلیسی، فارسی، عربی، نمادها و ...)
  • با حذف کاراکترهای اضافی و نگه‌داشتن فقط کاراکترهای مورد نیاز (مثلاً فقط فارسی و اعداد)، حجم فونت را تا ۹۰٪ می‌توان کاهش داد.

ابزارهای ساب‌ستینگ:

مثال عملی با fonttools:

pyftsubset myfont.ttf --unicodes="U+0600-06FF,U+FB50-FDFF,U+FE70-FEFF,U+200C,U+200D,U+0020-0039" --flavor=woff2 --output-file=myfont-fa.woff2

Subsetting fonts by removing unused characters is the most effective way to reduce font file size.
debugbear.com

فشرده‌سازی فونت‌ها (Font Compression)

  • حجم فونت رابطه مستقیم با سرعت دانلود دارد.
  • WOFF2 بهترین فرمت برای فشرده‌سازی است.
  • ابزارهای آنلاین و آفلاین (fonttools, Font Squirrel, Transfonter) خروجی WOFF2 می‌دهند.

مقایسه حجم فونت (قبل و بعد از بهینه‌سازی):

نوع فونتحجم اولیهبعد از Subsetبعد از WOFF2
TTF کامل250KB80KB24KB
TTF کامل500KB120KB40KB

تکنیک‌های لودینگ بهینه (font-display و ...)

خصوصیت font-display در CSS کنترل می‌کند که متن هنگام لود فونت چگونه نمایش داده شود:

مقدارتوضیحکاربرد
autoرفتار پیش‌فرض مرورگرمعمولاً توصیه نمی‌شود
blockتا ۳ ثانیه هیچ متنی نمایش نمی‌دهد، بعد فونت لود شد نمایش می‌دهدبرای فونت‌های حیاتی اما ممکن است باعث FOIT شود
swapمتن بلافاصله با فونت پیش‌فرض نمایش داده می‌شود و بعد از دانلود فونت، فونت عوض می‌شودپیشنهادی برای تجربه کاربری بهتر
fallbackشبیه swap اما تایم‌اوت کوتاه‌تربرای فونت‌های غیرحیاتی
optionalاگر فونت زود نرسید، هرگز لود نمی‌شودبرای فونت‌های تزئینی

@font-face {  font-family: 'IranSans';  src: url('IranSans.woff2') format('woff2');  font-display: swap; }    

Using font-display: swap improves perceived performance by showing text immediately using a fallback font.
developer.chrome.com

توجه:

  • همیشه یک fallback font-family نزدیک به فونت اصلی انتخاب کنید.
  • برای فونت فارسی، Tahoma یا Arial بهترین گزینه fallback هستند.

استفاده از CDN و کشینگ

مزایای استفاده از CDN:

  • افزایش سرعت بارگذاری برای کاربران مناطق مختلف
  • کاهش بار سرور اصلی و افزایش پایداری
  • امکان کش طولانی مدت (Cache-Control: public, max-age=31536000, immutable)

نمونه هدر مناسب:

Cache-Control: public, max-age=31536000, immutable

نمونه بارگذاری فونت از CDN:

<link rel="preload" href="https://cdn.example.com/fonts/myfont-fa.woff2" as="font" type="font/woff2" crossorigin>    

بهترین نکات و توصیه‌های web.dev

۱. فقط وزن‌ها و استایل‌های مورد نیاز را نگه دارید

  • هر وزن (مثلاً 400, 700) و استایل (italic, bold) یک فایل جداگانه است.
  • اگر از یک وزن یا دو وزن بیشتر استفاده نمی‌کنید، بقیه را حذف کنید تا حجم و تعداد درخواست‌ها کم شود.

۲. فونت‌های اصلی را preload کنید

مثال:
<link rel="preload" href="fonts/myfont.woff2" as="font" type="font/woff2" crossorigin> 
نکته: همیشه attribute crossorigin را ست کنید تا مرورگر بتواند فونت را کش کند.

۳. استفاده از fallback مناسب و نزدیک به فونت اصلی

  • مثلاً اگر فونت فارسی شما کمی ضخیم‌تر از Tahoma است، وزن و ارتفاع خط fallback را تا حد ممکن با font-style-matcher تنظیم کنید.
  • Font Style Matcher ابزار رایگان برای تنظیم دقیق است.

۴. استفاده از font-metric override (CSS جدید)

@font-face {  font-family: 'MyFont';  src: url('myfont.woff2') format('woff2');  font-display: swap;  ascent-override: 90%;  descent-override: 20%;  line-gap-override: 0%; }    

  • این ویژگی‌ها کمک می‌کند خط مبنا و فاصله خطوط fallback و فونت اصلی یکی شود و پرش چیدمان (CLS) رخ ندهد.

۵. برای آیکون‌ها از SVG استفاده کنید

  • آیکون‌فون (icon font)ها مشکلات دسترس‌پذیری و رندر دارند.
  • SVGها یا فونت‌های متغیر (Variable Fonts) راه‌حل بهتری هستند.

۶. تست عملکرد با ابزارهای تخصصی

  • Performance panel در DevTools کروم، Lighthouse و WebPageTest برای بررسی تاثیر فونت بسیار عالی‌اند.
  • حتماً Network panel را چک کنید تا مطمئن شوید فونت‌ها از کش بارگذاری می‌شوند.

۷. نکات ویژه فونت فارسی

  • برای فونت فارسی، features مثل init, medi, fina, isol را حتماً نگه دارید تا اتصال حروف درست باشد.
  • برای اعداد و علائم، subset فقط همان بخش‌ها را نگه دارید (اگر فقط نیاز دارید).

ابزارهای حرفه‌ای بهینه‌سازی فونت

ابزارتوضیحلینک
fonttoolsساب‌ستینگ و فشرده‌سازی فونت (پایتون)GitHub
glyphhangerاستخراج کاراکترها و ساب‌ستینگ (CLI)GitHub
Font Squirrelابزار آنلاین و اتوماتیکFont Squirrel
Transfonterابزار آنلاین با تنظیمات حرفه‌ایTransfonter
Google Fontsفونت‌های رایگان با CDN و بهینه‌سازیGoogle Fonts

نمونه کدها و مثال‌های عملی

ساب‌ستینگ و فشرده‌سازی برای فونت فارسی:

pyftsubset myfont.ttf \  --unicodes="U+0600-06FF,U+FB50-FDFF,U+FE70-FEFF,U+200C,U+200D,U+0020-0039" \  --flavor=woff2 \  --output-file=myfont-fa.woff2 \  --no-hinting \  --drop-tables="DSIG,LTSH,VDMX" \  --layout-features="init,medi,fina,isol,ccmp" \  --name-IDs="1,2,3,4,6"    

CSS با font-display و font-metric override:

@font-face {  font-family: 'MyFont';  src: url('myfont-fa.woff2') format('woff2');  font-display: swap;  ascent-override: 90%;  descent-override: 20%;  line-gap-override: 0%; }    

مشکلات رایج و راه‌حل

مشکلدلیلراه‌حل
فونت دیر لود می‌شودحجم بالا، فرمت اشتباه، نبود CDNساب‌ستینگ، WOFF2، استفاده از CDN
FOIT (متن نامرئی تا لود فونت)font-display: blockاستفاده از swap یا fallback
FOUT (تغییر فونت ناگهانی)swap یا fallbackانتخاب fallback مناسب و نزدیک به فونت اصلی
فونت در برخی مرورگرها نمایش نمی‌یابدفرمت نامناسب یا ناقصارائه همزمان WOFF و WOFF2

جمع‌بندی و منابع بیشتر

  • فونت سایت را ساب‌ست و فشرده کنید؛ فقط کاراکترهای لازم را نگه دارید.
  • همیشه از WOFF2 و در صورت نیاز WOFF استفاده کنید.
  • در CSS مقدار font-display: swap را برای فونت‌ها تنظیم کنید.
  • فونت را روی CDN قرار دهید و کشینگ مناسب اعمال کنید.
  • فونت خروجی را روی همه مرورگرها و دستگاه‌ها تست کنید.

منابع و رفرنس‌های معتبر

پرسش یا ابهام داری؟

اگر سوال یا نیاز به راهنمایی بیشتر داری، همین‌جا بپرس یا منابع بالا را به دقت مطالعه کن.