الضغط (Gzip وBrotli وZstd)

شرح ضغط نصوص HTTP، والفروق بين Gzip وBrotli وZstd، وما يدعمه Googlebot، وتأثير الضغط في Core Web Vitals وحد الجلب، وكيفية تفعيله والتحقق منه.

نُشر أول مرة: 3 يوليو 2026 · آخر تحديث: 22 أغسطس 2026 · Advanced
اللغات

الضغط تفاوض على ترميز محتوى HTTP يقلص ردود النص قبل نقلها. يعلن العميل الدعم عبر Accept-Encoding، ويرد الخادم بـContent-Encoding، وتحتاج نسخ التخزين المختلفة إلى Vary: Accept-Encoding. يكون Brotli أصغر عادة، ويظل Gzip البديل العام، أما Zstd فليس مدعومًا عالميًا. يدعم Googlebot ‏gzip وdeflate وBrotli. لا يُعد الضغط عامل ترتيب، لكنه قد يحسن النقل وTTFB وLCP وكفاءة الزحف إذا كان النقل هو الاختناق. اختبر مستويات أعلى للثابت ومنخفضة إلى متوسطة للديناميكي، ولا تعِد ضغط الصيغ المضغوطة أصلًا. وخطر BREACH محدود بسياقات بعينها، ويسمح بروتوكول خرائط الموقع بملفات gzip.

الخلاصة — الضغط تفاوض على ترميز محتوى HTTP: يرسل العميل Accept-Encoding، ويمكن أن يتضمن أوزان q وidentity، ويرد الخادم بـContent-Encoding لكل طلب ومورد. ويحتاج الرد القابل للتخزين الذي يختلف حسب الترميز إلى Vary: Accept-Encoding. يتفوق Brotli عادة على Gzip للنص نفسه؛ وتُذكر نسبة 15–20% كثيرًا، لكن الفارق يتوقف على المحتوى وإصدار المرماز والمستوى. وتفضله Google عند دعمه، بينما يظل Gzip البديل العام. أما Zstd فمرماز مسجل لكنه غير مدعوم عالميًا، ولا تذكر وثائق الزاحف دعم Googlebot له. يدعم Googlebot ‏gzip وdeflate وBrotli ‏(br). لا يُعد الضغط عامل ترتيب ولا يضمن تحسن TTFB أو LCP أو البحث؛ لكنه يقلص النقل، وقد يساعد TTFB ← LCP عندما يكون النقل هو عنق الزجاجة، كما يساعد HTML على البقاء دون حد جلب Google البالغ 2 MB وفق منشور 2026. اختر الأنواع وفق MIME والقياس، لا وفق قائمة امتدادات عامة. وخطر BREACH مقصور على رد يجمع سرًا مع محتوى يعكسه مهاجم، وليس مبررًا لتعطيل الضغط في الموقع كله. استخدم مستويات أعلى للملفات الثابتة المضغوطة مسبقًا، ومنخفضة إلى متوسطة للمحتوى الديناميكي بعد قياس الحركة وCPU. ويسمح بروتوكول خرائط الموقع صراحة بخرائط gzip.

Evidence for this claim HTTP content coding compresses transferred representations and is negotiated with Accept-Encoding and Content-Encoding. Scope: Current official or standards documentation. Confidence: high · Verified: MDN: HTTP compression Evidence for this claim Brotli is an HTTP content coding supported through the br encoding token. Scope: Current official or standards documentation. Confidence: high · Verified: RFC 7932: Brotli

ما الضغط فعليًا؟

الضغط، أو بدقة ترميز محتوى HTTP، يقلص متن الرد النصي قبل عبوره الشبكة، فينزّل العميل بايتات أقل ويفكها محليًا. ويجري التفاوض لكل طلب. تقول وثائق Lighthouse: “When a browser requests a resource, it will use the Accept-Encoding HTTP request header to indicate what compression algorithms it supports.” (ترجمة) «عند طلب مورد، يبين المتصفح خوارزميات الضغط التي يدعمها بواسطة ترويسة طلب HTTP المسماة Accept-Encoding». وتبدو ترويسة معتادة هكذا: Accept-Encoding: gzip, deflate, br. يختار الخادم ترميزًا ويعلنه في ترويسة الرد Content-Encoding.

هناك حدّان يستحقان الدقة وفق RFC 9110: ترميز المحتوى تحويل لبيانات التمثيل، أي متن الرد، وهو غير ترميز النقل الذي يعمل على الرسالة أثناء الاتصال. موضوع هذه الصفحة هو ترميز المحتوى المحدد بـContent-Encoding. وقد يحمل Accept-Encoding أوزان q لترتيب التفضيلات، ويرفض ترميزًا بـq=0، وتشير identity إلى «لا ترميز» (§8.4 و§12.5.3). وإذا اختلف متن رد قابل للتخزين حسب الترميز، مثل نسختي gzip وBrotli، وجب إرسال Vary: Accept-Encoding كي لا يقدم المخزن نسخة لا يستطيع العميل فكها (§12.5.5). وتصف وثائق Apache ‏mod_deflate متطلب Vary نفسه.

ينطبق الضغط على HTML وCSS وJavaScript وJSON وSVG وXML، بما فيها خرائط الموقع. ويمكن لـGzip وBrotli تقليص النص كثيرًا؛ وتذكر Google سقفًا يصل إلى 90%. هذه سقف لا نسبة معتادة، فالوفر يتوقف على تكرار المحتوى وحجمه وتصغيره والمرماز وإصداره وقاموسه ومستوى الضغط، ولا يصح تعميم أرقام موقع على آخر.

هناك شيئان لا يمثلهما الضغط، وكلاهما مهم:

  • ليس تصغيرًا. يزيل التصغير محارف المصدر، بينما يعيد الضغط ترميز البايتات الناتجة للنقل. اجمعهما: صغّر ثم اضغط.
  • ليس تخزينًا مؤقتًا. الضغط يتعلق بالترميز وتقليل بايتات الشبكة، أما التخزين فيتعلق بالحفظ وإعادة الاستخدام عبر Cache-Control وETag وCDN. راجع التخزين المؤقت.

هذه الصفحة هي الشرح المتعمق للضغط ضمن محور مسار العرض الحرج، الذي يورد «ضغط النص» ضمن قائمة البايتات الحرجة.

‏Gzip مقابل Brotli مقابل Zstd

نسبة الضغط

يحقق Brotli عادة نتيجة أفضل للنص، لكن لا تعامل رقمًا بعينه بوصفه عامًا. توضح وثيقة Lighthouse أن التوفير المبلغ عنه محسوب بـGzip وأن Brotli قد يحقق مزيدًا منه. يعرض مختبر Brotli من web.dev مثالًا: تقلص main.bundle.js من 225 KB إلى نحو 61,6 KB بـGzip و53,1 KB بـBrotli، أي أصغر بنحو 14% في ذلك الملف. الأرقام الشائعة مثل 15–20% اتجاهية لا ضمان؛ يتوقف الفارق على إصدار المكتبة والمستوى وتكرار المحتوى وتصغيره. اختبر ملفاتك بدل نقل نسبة موقع آخر.

Gzip هو البديل العام. تقول Google: “Use GZIP as a fallback to Brotli. GZIP is supported in all major browsers, but is less efficient than Brotli.” (ترجمة) «اجعل GZIP بديل Brotli؛ فكل المتصفحات الرئيسية تدعمه، وإن كان أقل كفاءة».

Zstd مرماز ثالث مسجل، لكنه ليس خيارًا افتراضيًا آمنًا بعد. يسرد سجل IANA الرموز gzip وbr وzstd، لكن التسجيل لا يعني دعم كل عميل أو زاحف أو خادم أو CDN. يفرض RFC 9659، الذي يحدّث RFC 8878، دعم نوافذ حتى 8 MB ويمنع طلب نافذة أكبر للتشغيل البيني. كما أن zstd غير ترميز القاموس dcz. ما زال الاعتماد مبكرًا؛ يتيح Caddy مثلًا encode zstd gzip، بينما تسرد وثائق Google ‏gzip وdeflate وBrotli ولا تذكر Zstd لـGooglebot. فعّله حين تدعمه المنظومة ويطلبه العميل، لا بديلًا كاملًا بعد.

Evidence for this claim gzip, br and zstd are registered HTTP content codings, but registration is not universal client, crawler, origin or CDN support; deploy only a coding advertised for the individual request and preserve a valid identity or fallback path. For HTTP interoperability, RFC 9659 requires zstd decoders to support windows through 8 MB and encoders not to require larger windows; this `zstd` coding is distinct from dictionary coding `dcz`. Scope: registry Confidence: high · Verified: HTTP Content Coding Registry

دعم المتصفحات والزواحف

صار دعم Brotli شبه شامل، لكنه لم يكن كذلك دائمًا. تقول وثائق Lighthouse: “As of December 2022 Brotli is supported in all major browsers except Safari on iOS.” (ترجمة) «بحلول ديسمبر 2022 كانت كل المتصفحات الرئيسية عدا Safari على iOS تدعم Brotli». وتفسر تلك الفجوة استمرار أهمية Gzip بديلًا.

تقول Google: “If the browser supports Brotli (br) you should use Brotli because it can reduce the file size of the resources more than the other compression algorithms.” (ترجمة) «متى دعم المتصفح Brotli ‏(br)، فاستخدمه لأنه يستطيع تصغير الموارد أكثر من بقية خوارزميات الضغط».

متى تظل بحاجة إلى Gzip؟

اضبط Gzip دائمًا إلى جانب Brotli. يجري التفاوض لكل طلب، فيقدم الخادم Brotli للعملاء الذين يعلنون br وGzip للباقين تلقائيًا؛ أي إنك تعرض كليهما وتدع التفاوض يقرر.

هل يدعم Google وBing ‏Brotli وGzip؟

تؤكد مقالات كثيرة الجواب بلا دليل. وفيما يأتي مسار مؤرخ من ثلاث إفادات صادرة عن Google نفسها.

منشور Google الأول عن الترويسات والضغط عام 2008

تشرح Google الضغط بصوتها منذ 2008. ففي منشورها عن Googlebot والترويسات والضغط كتب Maile Ohye وJeremy Lilley أن محركات البحث والمتصفحات الرئيسية تدعم gzip، وأنك قد ترى x-gzip، وهو gzip نفسه، وdeflate الذي تدعمه Google أيضًا، وidentity أي بلا ضغط. ويوضح المنشور أن Flash وJPG وPNG وGIF وPDF مضغوطة أصلًا، فلا تكسب كثيرًا من إعادة ضغطها، ويفضل gzip قليلًا على deflate للمتانة. يحمل المنشور تنبيهًا بأنه قديم، لكنه حي ومرتبط مباشرة بالموضوع.

ترد عبارات منشور 2008 هنا بلا علامات اقتباس أو روابط عميقة؛ تحققت المذكرة منها عبر جلب مباشر، لكن روابط #:~:text= لم تُنشأ لذلك القالب القديم، لذا صيغت بالمعنى.

تأكيد Gary Illyes لدعم Brotli عام 2020

أُكد دعم Googlebot لـBrotli بصورة غير رسمية قبل توثيقه. ففي أغسطس 2020 قال Gary Illyes، بعد اجتماع مع فريق Googlebot، إنه سُئل عن الدعم وإنه موجود. نقل Barry Schwartz الخبر يومها في Search Engine Roundtable. سبق ذلك الوثائق الحالية بنحو أربع سنوات.

وثائق الزاحف الرسمية الحالية

تقول نظرة عامة على زواحف Google: “Google’s crawlers and fetchers support the following content encodings (compressions): gzip, deflate, and Brotli (br).” (ترجمة) «تتعامل زواحف Google وأدوات الجلب مع ترميزات gzip وdeflate وBrotli ‏(br)». وتشرح أن كل هوية تعلن دعمها في Accept-Encoding لكل طلب، مثل Accept-Encoding: gzip, deflate, br. ويقول دليلي لدى Ahrefs: “Googlebot supports gzip, deflate, and Brotli (br).” (ترجمة) «يتعامل Googlebot مع gzip وdeflate وBrotli ‏(br)».

إذن التسلسل هو: منشور 2008 ← تأكيد Illyes عام 2020 ← وثائق الزاحف الحالية. الأمر راسخ وليس تخمينًا.

فجوة وثائق Bing

لا توجد وثيقة عامة من Bing تحدد ترميزات Bingbot عند زحف HTML، ولا مقابل لصفحة Google. ما يوثقه Bing أضيق: تدعم واجهة Content Submission ‏Gzip، ويمكن إرسال خرائط .xml.gz. وبما أن ضغط HTTP آلية معيارية تتفاوض عليها العملاء عبر Accept-Encoding، فمن المعقول استنتاج دعم Gzip على الأقل، لكنه استنتاج لا تصريح موثق. إنها فجوة شفافية لا حكم على سلوك Bingbot.

لماذا يهم الضغط للأداء وCore Web Vitals؟

السلسلة السببية بدقة

الضغط ليس عامل ترتيب مباشرًا. قد يقصر النقل الأصغر زمن التنزيل، فيساعد Time to First Byte ثم Largest Contentful Paint ضمن Core Web Vitals، وهي إشارة لتجربة الصفحة. لكن Google تضمن بايتات أقل لا تحسن TTFB أو LCP أو البحث؛ فإذا كان الاختناق في قاعدة بيانات أو نص يحظر العرض أو إعداد الاتصال فلن يغير ضغط رد صغير النتيجة. قِس الاختناق والنتيجة الميدانية. راجع Time to First Byte وLargest Contentful Paint وCore Web Vitals.

Evidence for this claim Reducing transferred bytes may improve a network-bound load, but compression alone does not guarantee lower TTFB/LCP, better Core Web Vitals or a Search change; measure the actual bottleneck and field outcome. Scope: lab audit Confidence: high · Verified: Enable text compression

يقدم Martin Splitt إطارًا مفيدًا: المهم ما يعبر الشبكة بعد الضغط لا الحجم غير المضغوط على القرص؛ فقد تبدو الصفحة 10 MB لكنها تنقل خمسة أو ستة. نُقلت النقطة عبر Search Engine Journal لا نص أولي، لذا صيغت بالمعنى.

الضغط وكفاءة الزحف: الزاوية التي لا تحظى بما يكفي من الاهتمام

يساعد الضغط أيضًا على البقاء تحت حد الجلب لدى Google. وفق تحديث «Inside Googlebot» لعام 2026 بقلم Gary Illyes، يجلب Googlebot نحو 2 MB لكل عنوان HTML بدل الرقم الأقدم 15 MB، وما يتجاوز الحد يُقتطع ولا يُرفض؛ فلا يمر للفهرسة إلا الجزء المنزّل. ضغط HTML أداة لإبقاء المحتوى الحرج داخل الميزانية. راجع الزحف.

تدقيق Lighthouse لتفعيل ضغط النص: الحدود الدقيقة

لتدقيق PageSpeed Insights/Lighthouse قواعد دقيقة. يجمع الردود النصية التي لا تحمل content-encoding بقيمة br أوgzip أوdeflate، ثم يضغط كلًا منها بـGzip لتقدير الوفر. ولا يضع علامة إذا كان حجم الرد الأصلي أقل من 1,4 KiB أو كان الوفر المحتمل أقل من 10%. لذلك لا تطلق الملفات الأصغر من نحو 1,4 KiB التحذير ولو لم تُضغط. ومنذ Lighthouse 13 دُمج التدقيق في رؤية أوسع لزمن طلب المستند، لكن الإرشاد الأساسي لم يتغير.

لماذا قد يفشل موقع مضبوط بصورة صحيحة في التدقيق؟

توضح وثائق PageSpeed أن الخوادم الوكيلة وبرامج مكافحة الفيروسات قد تعطل الضغط عند تنزيل الملفات. لذلك قد يبلغ الفاحص نتيجة سلبية كاذبة رغم صحة الخادم، لأن وسيطًا أزال Content-Encoding أثناء النقل. اختبر عبر مسار شبكة نظيف قبل لوم الأداة أوالخادم.

الضغط الثابت مقابل الديناميكي: مفاضلات التنفيذ

مستويات الضغط

لكلا الخوارزميتين مستويات قابلة للضبط توازن زمن CPU مع نسبة الضغط:

  • Gzip: المستويات 1–9.
  • Brotli: المستويات 0، بلا ضغط، حتى 11، الحد الأقصى، وفق مختبر web.dev.

تضغط المستويات الأعلى بقوة أكبر، لكنها تستهلك زمن CPU أكثر.

كلفة CPU ولماذا يهم الفرق بين الثابت والديناميكي

الضغط ليس مجانيًا؛ فهو يستهلك CPU، وتختلف الكلفة بين الملفات المبنية مسبقًا والمحتوى المتولد فوريًا. لا يوجد رقم عام صحيح للحالتين؛ فالاختيار يتوقف على تغير المحتوى، وطريقة تعامل التخزين أو CDN مع النسخة، وحجم الحركة، وما تقيسه فعليًا.

  • الملفات الثابتة المضغوطة مسبقًا أووقت البناء — يمكن للمحتوى المستقر أن يتحمل مستويات أعلى، لأن كلفة CPU تُدفع مرة عند البناء لا مع كل طلب. وتوثق gzip_static في nginx وmod_deflate في Apache اختيار ملف مضغوط مسبقًا. يصبح المقابل زمن بناء أطول لا تأخيرًا لكل زائر.
  • الردود الديناميكية المتولدة لكل طلب — يضيف أعلى ضغط تأخيرًا لكل رد، لذا يكون المستوى المنخفض إلى المتوسط بداية شائعة؛ وتبدأ بعض الأدوات جودة Brotli عند نحو 4. لكنه رقم تختبره مقابل سعة CPU والحركة. وقد ذكرت Google منذ 2008 كلفة gzip/deflate على خادم مثقل يقدم محتوى ديناميكيًا.

نقطة البدء العملية: مستوى أعلى للثابت، ومنخفض إلى متوسط للديناميكي. أكدها وفق تغير المحتوى وسلوك التخزين أو CDN والحركة وقياس قبل وبعد، لا رقمًا مأخوذًا من مقال.

كيفية تفعيل الضغط

هيئ الخادم أو CDN أو الحافة لضغط الردود النصية، واعرض Brotli مع Gzip بديلًا. بحسب المنصة:

  • Apache — وحدة mod_deflate وmod_brotli لـBrotli.
  • Nginx — وحدة ngx_http_gzip_module المضمنة، أي gzip on; مع gzip_types، ووحدة Brotli لـbr.
  • IIS — ضغط HTTP المضمن للثابت والديناميكي.
  • CDN / الحافة — توفر Cloudflare وFastly وأشباههما Brotli وGzip عادة، ويتيح Caddy ‏encode zstd gzip.
  • أطر التطبيقات — وسيط compression في Node/Express، وتضغط Next.js/Vercel ومعظم الاستضافات الحديثة افتراضيًا.

ثم تحقق منه كما توضح قائمة الفحص. أسرع اختبار: curl -I -H "Accept-Encoding: br, gzip" https://example.com/، ثم ابحث عن ترويسة content-encoding في الرد.

ما الذي لا ينبغي ضغطه؟

لا تعِد ضغط JPG وPNG وGIF ومعظم الفيديو وخطوط WOFF2 ومعظم PDF. فهي مضغوطة داخليًا، وتشغيل Gzip أو Brotli عليها يهدر CPU لقاء تغير ضئيل، وربما سلبي. تعامل مع القائمة كأمثلة؛ تقول إرشادات GTmetrix إن الصيغ المضغوطة أو عالية الإنتروبيا قد لا تستفيد وقد تكبر. حدد الأنواع النصية وفق MIME، وقِس ناتج الرد بدل الثقة بقائمة امتدادات عامة.

ولا يوجد حد أدنى عالمي لحجم الرد لا يستحق الضغط تحته. قد تلغي كلفة التأطير والبيانات الوصفية الوفر في الأجسام الصغيرة أو الكثيفة، لكن نقطة التعادل تتوقف على المرماز والتنفيذ والترويسات والمحتوى. حدّا Lighthouse، أي 1,4 KiB و10%، قاعدة لذلك التدقيق تحديدًا لا حدًا عامًا، وقد تنشر CDN حدًا مختلفًا.

Evidence for this claim Framing and metadata overhead can erase savings for small or poorly compressible bodies; there is no universal minimum response size because codec, implementation, headers and content determine the break-even point. Scope: lab audit Confidence: high · Verified: Enable text compression

الضغط وBREACH: خطر محدود لا مبرر لتعطيل الضغط في الموقع كله

خطر BREACH ليس صفة للضغط في المجرد؛ تصف الدراسة هجومًا محددًا: رد HTTP مضغوط يمزج سرًا، مثل رمز CSRF، بمحتوى يستطيع المهاجم التأثير فيه وينعكس في الرد نفسه، ويستطيع المهاجم ملاحظة طول الرد عبر طلبات متكررة لاستنتاج السر. تلفت وثائق Apache ‏mod_deflate إلى التركيبة نفسها. إن لم يجمع الرد سرًا مع مدخل يعكسه المهاجم فلا ينطبق الهجوم الكلاسيكي. العلاج هو مراجعة الرد المعرّض ومنع عكس المدخل بجوار الأسرار أو إضافة رموز لكل طلب أو تقييد المعدل، لا تعطيل الضغط في الموقع كله.

Evidence for this claim BREACH-style risk is not a reason to disable compression sitewide: the classic attack requires a compressible HTTP response that combines a secret with attacker-influenced reflection and observable repeated length; mitigate the vulnerable response/context with reviewed controls. Scope: security Confidence: high · Verified: BREACH: Reviving the CRIME Attack

خرافة خريطة الموقع: الضغط مسموح به صراحة

يسمح بروتوكول خرائط الموقع صراحة بخرائط مضغوطة بـgzip. الاعتقاد بعكس ذلك خطأ. يسمح بروتوكول sitemaps.org بملفات .xml.gz لتقليل النطاق، ويقبلها المحركان، كما تدعمها أدوات Bing. التحفظ أن تظل الخريطة غير المضغوطة ضمن 50 000 عنوان URL و50 MB. ضغطها أثناء النقل صحيح ومفيد للخرائط الكبيرة.

موضع الضغط ضمن أداء الويب

الضغط أداة ضمن المجموعة. يقلل البايتات التي ينزّلها مسار العرض الحرج، وقد يخفض TTFB ثم LCP، وهو تدقيق في PageSpeed Insights وLighthouse. ويتكامل مع التخزين المؤقت ومع الموارد الحاجبة للعرض. راجع أدوات أداء الويب.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.