Live · status OK
Back to blog
التطوير12 min

Next.js static export و Core Web Vitals: دليل 2026

TL;DR

للوصول إلى 95+ PageSpeed على الجوال في Next.js static export: استضافة الخطوط ذاتياً عبر raw @font-face، تحميل مسبق لخط LCP مع fetchPriority=high، تجنب Framer Motion above-the-fold، استخدام transform/opacity فقط للرسوم المتحركة، حجز مساحة تخطيط لمحتوى i18n، الخدمة خلف Cloudflare free tier.

Julien Daniel
ByJulien Daniel
Founder & CTO, OptionWeb
Share
لوحة تحكم PageSpeed Insights مع نتائج أداء عالية

بعد 12 شهراً من بيانات الإنتاج على 40+ موقع Next.js مع static export، إليك الـ playbook الدقيق الذي نطبقه للوصول إلى 95+ PageSpeed على الجوال. بدون نظرية — فقط ما يعمل بشكل قابل للقياس.

الأساس: ما يقدمه static export مجاناً

موقع Next.js static export فانيلا يسجل 95-100 موبايل لأن كل HTML مُصير مسبقاً، TTFB منخفض، بدون cold starts. عند إضافة Framer Motion، Google Fonts، الأيقونات، analytics، تنخفض إلى 70-85.

LCP: معركة ضد CSS render-blocking

تقارير PageSpeed تُظهر نفس المشكلة: ملفا CSS render-blocking يضيفان ~500ms render delay على موبايل مخنوق. هذا 100% من ميزانية LCP.

styles/globals.csscss
@font-face {
  font-family: 'Space Grotesk';
  font-weight: 500 700;
  font-display: swap;
  src: url('/fonts/space-grotesk-latin.woff2') format('woff2');
}

استراتيجية خطوط تعمل فعلاً

  • خط display (العناوين)1 variable font عبر raw @font-face، preload fetchPriority=high.
  • خط bodynext/font/google Inter مع 2 أوزان (400، 600)، latin فقط.
  • Monospacenext/font/google JetBrains Mono، preload=false.

INP: فخاخ Framer Motion

tsx
// ❌ سيء
<motion.h1 initial={{ opacity: 0 }} animate={{ opacity: 1 }}>العنوان</motion.h1>

// ✅ جيد
<h1 className="ow-anim-fade-up">العنوان</h1>

قواعد: لا تحرك أبداً width/height/top/left. transform/opacity فقط. حد أقصى 1-2 رسوم متحركة لكل viewport. useReducedMotion.

CLS: نمط الحجز i18n

على مواقع i18n، CLS يظهر عندما تُحمل الترجمات بعد التصيير الأولي. الحل: حجز min-height لكل breakpoint.

tsx
<div className="min-h-[280px] sm:min-h-[220px] md:min-h-[160px] lg:min-h-[130px]">
  <p>{t('tldr.content')}</p>
</div>

الصور: AVIF، priority، fetchPriority

next.config.jsjs
images: { unoptimized: true, formats: ['image/avif', 'image/webp'] }

الاستضافة: Brotli 11، HTTP/3، Early Hints

  1. استضافة Originأي استضافة ثابتة.
  2. Cloudflare free tier أمامHTTP/3، Brotli 11، edge cache.
  3. Early Hints (103)يلغي انتظار TTFB من critical path.
  4. قاعدة cache _next/static/*Cache Everything، Edge TTL سنة.
  5. تفريغ cache عند النشرwrangler أو Cloudflare API في CI.

كيفية تصحيح تراجع PageSpeed

  1. قارن التقاريرأي مقياس انخفض.
  2. Critical request chainما الذي يعرقل التصيير الآن.
  3. Chrome DevTools Performancelocalhost مع throttling.
  4. Git diff depsحزمة npm جديدة؟
  5. next build outputمسار +20KB = مشبوه.
Tags#nextjs#performance#core-web-vitals#pagespeed#framer-motion