البرمجة

تحسين CLS للمواقع

مقدمة شاملة حول مؤشر انزياح الهيكل التراكمي (Cumulative Layout Shift – CLS) وآليات تحسينه

تمهيد: لماذا يحتل CLS صدارة مقاييس تجربة المستخدم الحديثة؟

منذ أن أعلنت «جوجل» في مايو 2020 عن دمج Core Web Vitals في خوارزميات ترتيب نتائج البحث، برز مؤشر CLS كأحد أهم معايير جودة الأداء؛ إذ يُقاس به مدى ثبات العناصر البصرية أثناء تحميل الصفحة. انخفاض CLS يعني صفحةً لا «تقفز» عناصرها أمام أعين الزائر، ويرتبط مباشرةً بمعدلات بقاء المستخدم، رضا المتصفح، وارتفاع التحويلات الرقمية. في عام 2025، ومع الانتشار الواسع لتقنيات التصميم المتجاوب وتكامل الإعلانات الديناميكية، صار تحسين CLS ضرورةً لا ترفاً.


أولاً: المفهوم التقني لـ CLS وكيفية احتسابه

1. تعريف مبسط

انزياح الهيكل التراكمي هو مجموع النقاط الجزئية لانزياحات غير متوقعة للعناصر داخل الإطار المرئي (Viewport) أثناء عمر الجلسة. يُحتسب لكل انزياحٍ ناتج مُعامل Impact Fraction (حجم المنطقة المنزاحة) مضروباً في Distance Fraction (المسافة النسبية التي قطعتها العناصر)، ثم تُجمَع القيم. الحد المقبول وفق توصيات «جوجل» هو ≤ 0.1، بينما يُعد 0.25 فأكثر تجربةً سيئة web.dev.

2. نقاط حسابية مهمة

بند الوصف الصيغة
Impact Fraction نسبة المساحة المتأثرة بالانزياح Area of impact / Viewport area
Distance Fraction أكبر مسافة قطعها أي عنصر % من الشاشة Max move distance / Viewport height
CLS مجموع (Impact × Distance) لكل انزياح في الإطار Σ (Impact × Distance)

ثانياً: العوامل الرئيسة التي ترفع قيمة CLS

  1. الصور والفيديوهات غير المُعَرَّفة الأبعاد

    غياب سمات width و height يجعل المتصفح يحجز مساحةً صفريةً أولاً، ثم يضطر إلى إعادة التدفق بعدما يستلم الأبعاد الحقيقية.

  2. الوحدات الإعلانية وiframe الديناميكية

    منصات الإعلانات غالباً ما تحقن وحدات لا تُحدَّد أبعادها مسبقاً، فتدفع المحتوى إلى أسفل.

  3. المحتوى المُولَّد بعد التفاعل

    مثل أشرطة الإشعارات أو رسائل الـCookie التي تُحقَن في أعلى الصفحة.

  4. تأخر تحميل الخطوط (FOIT/FOUT)

    عند استخدام خطوط Web Fonts دون استراتيجيات عرض متدرجة، تظهر النصوص أولاً بخط افتراضي ثم تتغير.

  5. التحولات CSS غير المتوقعة

    تحريك عناصر موضوعة مسبقاً في تدفق المستند عبر animation أو transition قبل انتهاء التحميل يزيد الانزياح DebugBear.


ثالثاً: خطوات عملية لتحسين CLS في موقعك

1. تحديد المشكلة بدقة

  • استخدام Lighthouse أو PageSpeed Insights للحصول على قيمة CLS لكل قالب URL.

  • تشغيل Performance Panel في DevTools وتفعيل «Layout Shift Regions» لرؤية أطر الانزياح باللون الأزرق.

  • استخدام أدوات مُتخصّصة مثل CLS Debugger أو Layout Shift GIF Generator للحصول على تسجيل مرئي للحركة.

2. تثبيت الأبعاد المعلَنة

  • أضف سمات width و height لجميع صور  وفيديوهات ، أو استعمل aspect-ratio في CSS لضمان حجز الفراغ الملائم قبل التحميل.

  • بالنسبة إلى الإعلانات: احجز حاوية مستقرة بأبعاد قصوى متوقعة واستخدم سمات min-height.

3. تحميل الخطوط دون انزياح

  • اعتمد إستراتيجية font-display: optional أو swap لإظهار نص احتياطي أولاً ثم استبداله دون إخفاء المحتوى.

  • استفد من preload لتقليل تأخر جلب ملفات الخطوط الرئيسة.

4. تجنُّب حقن محتوى مفاجئ

  • اجعل رسائل ملفات تعريف الارتباط تنزلق من الأسفل أو تتراكب تجاوزياً عبر position: fixed; bottom:0 بدلاً من دفع المحتوى.

  • قم بتأجيل عناصر الطرف الثالث (مثل مربعات التعليقات) إلى ما بعد الـ DOMContentLoaded.

5. إدارة التحولات والرسوم المتحركة

  • لا تُطلق أي انتقال CSS يحتوي على تغيُّر في top أو left قبل إتمام التحميل؛ بدِّلها بتحويلات transform التي لا تعيد تدفق layout.

  • ثبِّت الحالة الابتدائية للعناصر المتحركة باستخدام will-change: transform.

6. تحسين تجربة الوصول البطيء للشبكة

  • فعِّل التحويل التدريجي للصور (Progressive JPEG/AVIF) لتقليل المفاجأة البصرية.

  • فعِّل lazyload="true" للصور خارج الإطار المرئي مع حجز مساحة مسبقة باستخدام aspect-ratio.


رابعاً: استراتيجيات متقدمة لمطوّري الواجهات

1. استخدام Server‑Side Rendering مع Hydration تدريجي

يقلّل SSR زمن البصمة الأولى (FCP) ويحجز الهيكل الكامل قبل وصول جافاسكريبت، ما يحدّ من تغيُّر البنية عند الهيدرية المرحلية.

2. شبكات CDN ذكية مع Edge Workers

عبر حقن سمات الأبعاد للصور والإعلانات على مستوى الحافة (Edge)، تتجنّب تعديل الكود المصدري وتسرّع الاستجابة للمستخدمين العالميين.

3. مراقبة فورية عبر Layout Instability API

تتيح هذه الواجهة جمع أحداث الانزياح آنياً وإرسالها إلى خدمة تتبُّع (Analytics) لتوليد تحذيرات في الوقت الحقيقي عند تجاوز عتبة 0.1.

4. الأطر الحديثة الداعمة للأبعاد التلقائية

  • Next.js (منذ v13) يُنشئ عنصر  يفرض نسبة بُعد ثابتة تلقائياً.

  • SvelteKit يضمّن معرّفات الأحجام في مرحلة البناء، مما يمنع الانزياح تماماً.


خامساً: دراسة حالة مختصرة

شركة e‑Store الشرق الأوسط عانت CLS=0.38. بعد مراجعة القوالب:

  1. حجزوا مساحة ثابتة لإعلانات AdSense 300×250 على الأجهزة الصغيرة.

  2. استبدلوا خطوط @import بـ .

  3. طبّقوا صور WebP بـ وأبعاد صريحة.

    النتيجة خلال أسبوع: انخفاض CLS إلى 0.06، وزيادة زمن التفاعل الإيجابي +15 ٪ ومعدل تحويل سلة الشراء +11 ٪.


سادساً: توصيات ختامية لضمان ثبات طويل الأجل

  • دمج اختبار CLS ضمن خط أنابيب CI/CD لرفض أي دمج يزيد الانزياح فوق الحد.

  • تحديث مستودع الصور بفئات نسبية responsive تحجز الفراغ الصحيح لكل نقطة توقف.

  • تدريب فريق المحتوى على رفع الوسائط مع بيانات الأبعاد مدمجة في الـ CMS.

  • مراقبة التقارير الميدانية (Chrome UX Report) شهرياً، ولا تكتفِ بالاختبار المختبري.


المراجع

  1. Optimize Cumulative Layout Shift – دليل «ويب.دِف» (web.dev). web.dev

  2. Measure And Optimize CLS – وثائق DebugBear 2025. DebugBear