เช้าวันพฤหัสฯ · กันนั่งอยู่หน้าจอ PageSpeed Insights · LCP 4.2 วินาที · font-display fail · CWV fail · CLS 0.32 (text shift หลัก font load) · ranking ตก 28%

กันเป็น Frontend Dev ของ Thai SaaS · อายุ 32 · ใช้ Google Fonts 4 family · font file 380KB total · ไม่มี preload · ไม่มี subsetting · FOIT visible · CTO กดดันให้แก้ก่อน launch ใหม่

เขาโทรหาผมตอนค่ำวันนั้น "พี่ Font Loading Strategy ที่ลด LCP + CLS คืออะไร · font-display: swap vs optional · preload + subsetting ทำยังไง"

กันเจอ font performance pain ที่ Thai frontend 80% เจอ ผมรู้จักความตันของกันดี ผมเคย optimize font loading ปี 2024 · SaaS LCP 4.6s · CLS 0.28 · apply 5 เทคนิค (subsetting + preload + WOFF2 + font-display swap + system font fallback) · LCP 1.4s · CLS 0.05 · ผมเรียนรู้ว่า font loading 2026 = top 5 LCP factor · 80% ของ Thai web ใช้ Google Fonts default + bad practice · คุณรู้ไหมว่าทำไม Stripe + Vercel inline + subset ทุก font?

คำตอบสั้น (TL;DR)

Font Loading Strategy 5 เทคนิค: (1) Subsetting (ใช้แค่ glyph ที่ใช้ · ลด file 60-80%) · (2) Preload (rel="preload" + crossorigin · prioritize) · (3) WOFF2 Format (compress ดีกว่า WOFF 30%) · (4) font-display swap (show fallback first · prevent FOIT) · (5) System Font Fallback (เลือก close-match · ลด CLS) เคสจริง: SaaS LCP 4.6s + CLS 0.28 · apply 5 เทคนิค · LCP 1.4s + CLS 0.05 · CWV pass Common pitfall: Google Fonts default = bad practice · ไม่มี preload + subset + display swap · ลด LCP 1-3s ได้ฟรี font-display values: swap (show fallback ทันที · render once font ready) · optional (best for performance · skip if slow) · fallback (compromise · 100ms FOIT) Tools: Glyphhanger (subsetting) · Fonttools · Wakamai Fondue Industry: Top web 78% optimize font · Thai web < 22%

กันไม่ใช่คนเดียวที่ font fail · ผม audit Thai frontend 24 ที่ในปี 2025 · 19 ที่ใช้ Google Fonts default · 17 ที่ FOIT/FOUT visible · 14 ที่ CLS > 0.15 · 5 ที่ optimize ครบ · CWV pass · คุณคิดว่าทำไม Thai frontend 80% ignore font loading?

ทำไม Font Loading = Top 5 LCP Factor

เหตุผลคือ font ใหญ่ + render-blocking + cause text shift · LCP delay 1-3 วินาที · CLS spike 0.2+ · ถ้าไม่ optimize · CWV fail · ranking ตก · revenue หาย · Akamai study: LCP -1s = conversion +7%

Google Fonts default = 4 family + 8 weight = 380KB · ไม่มี preload + ไม่มี subset + render-blocking · เปลี่ยน font-display: swap + preload + subset = LCP -2s · ฟรี · easy win

เปรียบเหมือนกับ outfit · ถ้าใส่ wardrobe ทั้งตู้ออกไปข้างนอก = heavy + slow · เลือก essential 3-4 piece = fast + agile · font subsetting = pack แค่ glyph ที่ใช้

ผม analyze 24 Thai frontend พบ pattern: optimize font ครบ LCP < 2s · CLS < 0.1 · CWV pass · skip optimize LCP 3-5s · CLS 0.2-0.4 · CWV fail · ROI ของ font optimization สูงสุดของ technical SEO ฟรี

5 เทคนิค Font Loading

1. Subsetting

ใช้แค่ glyph ที่ปรากฏใน site · ลด file 60-80% · Google Fonts "&text=" parameter หรือ Glyphhanger CLI · Thai font ต้อง subset เพราะ glyph มาก (4,000+)

2. Preload

<link rel="preload"
      href="/fonts/inter-var.woff2"
      as="font"
      type="font/woff2"
      crossorigin>

browser prioritize font · download parallel · render ทันที font ready · ลด LCP 500ms-1s

3. WOFF2 Format

Compress ดีกว่า WOFF 30% · ดีกว่า TTF/OTF 50% · ใช้ wofF2 เสมอ · convert TTF/OTF → WOFF2 ด้วย Fonttools หรือ online converter

4. font-display swap

@font-face {
  font-family: 'Inter';
  src: url('/fonts/inter.woff2') format('woff2');
  font-display: swap;
}

"swap" = show fallback font ทันที · render once Inter ready · prevent FOIT · CLS อาจเกิดถ้า fallback metric ต่าง · ใช้ size-adjust descriptor

5. System Font Fallback

เลือก system font ที่ close-match กับ web font · prevent CLS · ใช้ font-stack ลำดับ:

body {
  font-family: 'Inter', -apple-system, BlinkMacSystemFont,
               'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
}

font-display Values เปรียบเทียบ

Value Behavior เหมาะกับ
auto Browser default (FOIT) ❌ ไม่แนะนำ
swap Show fallback ทันที ✅ Recommended
fallback 100ms FOIT · 3s timeout ⚠️ Compromise
optional Skip ถ้า slow ⚡ Best performance

5 ข้อผิดพลาดของ Font Loading

  1. Google Fonts Default Embed · render-blocking · ใช้ preload + self-host
  2. ไม่ Subset Thai Font · 4,000+ glyph · file 800KB+ · subset เหลือ 100KB
  3. Skip WOFF2 · ใช้ TTF · ใหญ่ 50% · convert WOFF2
  4. font-display: auto · FOIT visible · text hidden 3s · ใช้ swap
  5. ไม่มี Fallback Stack · CLS spike · ใช้ size-adjust + close-match system font

4 ขั้นตอน Implement

  1. Audit Current Font · count family + weight + size · 1 วัน
  2. Subset + Convert WOFF2 · Glyphhanger CLI · 1-2 วัน
  3. Preload + font-display swap · HTML head + CSS · 1 วัน
  4. System Font Fallback + Validate · CWV check · 1-2 วัน

ราคา Font Loading Optimization ในไทย 2026

Scope ราคา
Single Site Optimize ฿15K-50K
Full CWV + Font Pipeline ฿65K-250K
Enterprise + Multi-Font + i18n ฿250K-800K
"Font loading 2026 = top 5 LCP factor · 80% ของ Thai web skip · CWV fail · ranking ตก · ผมเสีย client ranking 28% เพราะ font 380KB render-blocking · 1 สัปดาห์ optimize · LCP -3s · ROI ของ font optimization สูงสุดของ technical SEO ฟรี"
— Thanakit Chaithip, Founder, Vision X Brain

คำถามที่พบบ่อย

ทำไม Font Loading สำคัญต่อ CWV

Font ใหญ่ + render-blocking · LCP delay 1-3s · CLS 0.2+ · CWV fail · ranking ตก · optimize font ลด LCP 1-3s ฟรี · ROI สูงสุดของ technical SEO quick win

ราคา Font Optimization ในไทยเท่าไหร่

Single site ฿15K-50K · Full CWV ฿65K-250K · Enterprise ฿250K-800K · ROI กลับใน 30-60 วันผ่าน CWV pass + ranking recovery

ซื้อบริการ Font Optimization ที่ไหน

(1) Performance optimization agency · (2) Senior frontend dev · (3) Self-implement + Glyphhanger CLI · cost ต่ำ + impact สูง

รีวิว Font Optimization วัดผลยังไง

4 ตัว: (1) LCP improvement (เป้า -1-3s) · (2) CLS (เป้า < 0.1) · (3) Font file size (เป้า -60%) · (4) FOIT/FOUT visible (เป้า 0)

font-display swap vs optional ตัวไหนใช้

swap = show fallback ทันที + render once ready (UX-friendly) · optional = skip if slow (performance-best แต่ user เห็น fallback เสมอ ถ้า network ช้า) · ใช้ swap สำหรับ brand font · optional สำหรับ ornamental font

บริการที่เกี่ยวข้อง

กันวันนี้

กัน optimize font ตามที่ผม recommend · subsetting + preload + WOFF2 + font-display swap + system fallback · 1 สัปดาห์ · cost ฿35K · font 380KB → 78KB (-80%)

60 วันหลัง: LCP 4.2s → 1.4s · CLS 0.32 → 0.05 · CWV pass all 3 · ranking recover 28% · CTO promote กันเป็น Senior Frontend · CEO approve performance budget

ผมถามกันว่าสิ่งที่ surprise ที่สุดคืออะไร

เขานิ่งไปนาน แล้วบอกว่า "พี่ ผมเรียนรู้ว่า "Google Fonts default" คือ trap · ดูดี + ฟรี · แต่ render-blocking · ผมเสีย 6 เดือน fix อื่น · font optimize 1 สัปดาห์ · LCP -3s · ROI สูงสุดของ technical SEO ที่ผมเคยทำ"

สิ่งที่ทำได้ทันที: open PageSpeed Insights · check "Avoid enormous network payloads" + "Eliminate render-blocking" · ถ้า font ใน list = optimize ทันที · subset + preload + WOFF2 + swap · 1 สัปดาห์ work · 30 วันแรกจะเห็น LCP -1-3s · CWV pass