ذاكرة الرجوع/التقدم (bfcache)

ما هي ذاكرة الرجوع/التقدم — ميزة المتصفح التي تجمّد الصفحة كاملة في الذاكرة للتنقل الفوري إلى الخلف/الأمام — وكيف تختلف عن ذاكرة HTTP، وما الذي يمنع الأهلية، وكيف تختبرها، وما علاقتها الحقيقية غير المباشرة بـCore Web Vitals وSEO.

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

ذاكرة الرجوع/التقدم (bfcache) تحسين في المتصفح يجمد الصفحة كاملة — DOM وJavaScript heap وحالة التشغيل — في الذاكرة عند مغادرتها، بحيث يعيد زر Back أو Forward الصفحة فورًا بلا إعادة تحميل أو إعادة تصيير أو طلبات شبكة، ما لم يُخلِ المتصفح تلك اللقطة المجمدة أولًا. إنها ميزة متصفح وليست عامل ترتيب في البحث: لا تذكر وثائق Google الخاصة بترتيب Core Web Vitals bfcache. صلتها بـSEO غير مباشرة ومحددة — فالتنقل المستعاد من bfcache يسجل LCP شبه فوري وCLS إضافيًا شبه صفري للمستخدمين الذين يحصلون عليه، وقد يحسن CWV الميداني الإجمالي في المواقع ذات حركة Back/Forward المهمة (واحد من كل عشرة تنقلات على سطح المكتب وواحد من كل خمسة على الهاتف)، لكنه لا يضمن معدل الاستعادة أو تقييم CWV الإجمالي أو الترتيب أو التحويل. أكبر عائق هو معالج unload؛ وكان العائق التاريخي الأكبر Cache-Control: no-store، مع أن Chrome يسمح الآن بشروط بصفحات no-store كثيرة بعد طرح 2025. اختبرها في Chrome DevTools للفحص الواحد أو عبر API notRestoredReasons الخاص بـChrome لبيانات الميدان، ولا تخلطها بذاكرة HTTP أو ذاكرة الموارد أو Cache Storage أو ميزة البحث القديمة «الصفحة المخزنة».

الخلاصة — bfcache لقطة للصفحة كاملة في الذاكرة (DOM + JS heap + running state)، وليست استجابة HTTP قابلة لإعادة الجلب، ولا ذاكرة الموارد داخل المتصفح، ولا Cache Storage لـservice worker — وهذا هو الفرق المفاهيمي الأهم. عند مغادرة الصفحة يوقف المتصفح JS ويجمّد الصفحة؛ وعند Back/Forward، إذا بقيت اللقطة متاحة، يفك تجميدها ويعرضها فورًا بلا طلبات شبكة — لكن الإخلاء ممكن دائمًا، لذا اعتبر الاستعادة مرجحة لا مضمونة. وهي ليست عامل ترتيب موثقًا في Google Search (فوثائق Core Web Vitals في Search Central لا تذكرها)؛ صلتها غير مباشرة ومحددة بنسج قياس CWV الميداني (خصوصًا LCP وCLS) في التنقلات التي تُستعاد فقط — ولا تضمن معدل الاستعادة أو تقييم CWV الإجمالي أو الترتيب أو التحويل. أكبر عائق للأهلية هو معالج unload (نحو 18 نقطة مئوية من معدل الإصابة في Chrome)؛ أما العائق التاريخي الأكبر فكان Cache-Control: no-store (يمنع نحو 17% من تنقلات السجل على الهاتف و~7% على سطح المكتب)، مع أن Chrome يسمح الآن، بعد طرح 2025، بـbfcache لصفحات no-store كثيرة بشروط (تُخلى عند تغير المصادقة/ملفات تعريف الارتباط، وتظل APIs ذات الاتصالات المفتوحة مانعة). ينبغي إغلاق/إيقاف الاتصالات والمؤقتات والمراقبين عند pagehide/freeze وإعادتها عند pageshow/resume؛ وقد تمنعه أيضًا window.opener وسياسات الأذونات والإطارات — افحص السبب لكل إطار في DevTools أو notRestoredReasons بدل التخمين. اختبره مرة واحدة عبر Chrome DevTools؛ وشخّصه ميدانيًا عبر API notRestoredReasons الخاص بـChrome (النتيجة null ليست دليل استعادة، ونص السبب غير ثابت). لكل متصفح قواعد أهلية خاصة، والتنقلات اللينة في SPA لا تحصل على المعاملة نفسها.

Evidence for this claim The back-forward cache stores a complete page snapshot for instant history navigation. Scope: Current official or standards documentation. Confidence: high · Verified: web.dev: Back/forward cache Evidence for this claim Browser eligibility rules and APIs such as unload handlers can prevent bfcache use. Scope: Current official or standards documentation. Confidence: high · Verified: web.dev: bfcache eligibility

ما هي bfcache فعلًا؟ (محور الدقة)

أهم نقطة ينبغي ضبطها: bfcache لقطة كاملة للصفحة في الذاكرة، وليست استجابة HTTP مخزنة. عند مغادرة الصفحة، لا يهدم المتصفح الصفحة؛ بل يوقف تنفيذ JavaScript ويجمّدها كاملة — DOM وJS heap والمؤقتات قيد التشغيل وكل شيء — ويحفظها في الذاكرة. إذا ضغطت Back أو Forward واللقطة المجمدة ما تزال متاحة، يفك المتصفح تجميدها ويعرض الصفحة نفسها التي تركتها، مع صفر طلبات شبكة وصفر إعادة تصيير. هذه استعادة ممكنة لا ضمان: قد يُخلي المتصفح اللقطة قبل عودتك (ضغط ذاكرة أو مهلة أو أحداث معينة)، أو تفرض قاعدة خاصة بالمتصفح تحميلًا جديدًا، وعندها تكون مجرد تنقل عادي في السجل. والصياغة المعتمدة لدى Google هي أن bfcache “a browser optimization that enables instant back and forward navigation.” (الترجمة العربية) «تحسين في المتصفح يتيح تنقلًا فوريًا إلى الخلف وإلى الأمام».

لهذا فإن الخلط بينها وبين ذاكرة HTTP/المتصفح هو خطأ المنافسين المتكرر. تخزن ذاكرة HTTP استجابات الطلبات السابقة — ملفات يمكن إعادة تقديمها. أما bfcache فتخزن الصفحة الحية قيد التشغيل. وتوضح وثائق Chrome DevTools الفرق صراحةً: bfcache “differs from browser cache and HTTP cache.” (الترجمة العربية) «تختلف عن ذاكرة المتصفح وذاكرة HTTP». ولا «تشغّل» bfcache عبر ترويسات التخزين بالطريقة التي تضبط بها التخزين المؤقت HTTP؛ فالموضع الوحيد الذي تدخل فيه الترويسات هو أن Cache-Control: no-store كانت تستبعد الصفحة من bfcache (وسنعود إلى ذلك أدناه).

ينطبق الفرق نفسه على ذاكرتين أخريين يخلط الناس بينهما وبين bfcache: ذاكرة الموارد داخل المتصفح (البرامج النصية المترجمة والصور المفكوكة المحفوظة للجلسة الحالية)، وCache Storage الخاصة بـservice worker (أزواج الطلب/الاستجابة التي يديرها الموقع بنفسه عبر caches.open()). يمكن أن تعمل كلتاهما في الصفحة نفسها وفي الوقت نفسه مع bfcache — لكن لا واحدة منهما هي bfcache، التي تعني نسخة الصفحة المجمدة لا الأصول المخزنة أو الاستجابات المعترضة.

وهناك توضيح آخر يستحق الذكر لأن الالتباس ما زال قائمًا: لا علاقة لـbfcache بميزة البحث القديمة «الصفحة المخزنة» التي كان Google (وBing) يعرضها في النتائج. كانت تلك لقطة محفوظة لصفحة داخل فهرس البحث وقد أُحيلت إلى التقاعد. أما bfcache فهي ميزة في محرك التصيير من جهة العميل.

ما مدى شيوع تنقلات Back/Forward فعلًا؟

هذه ليست حالة هامشية نادرة. فبحسب web.dev: “1 in 10 navigations on desktop and 1 in 5 on mobile are either back or forward.” (الترجمة العربية) «واحد من كل عشرة تنقلات على سطح المكتب وواحد من كل خمسة على الهاتف يكون إلى الخلف أو إلى الأمام». وفي أي موقع يعتمد على تدفقات التكرار والرجوع — من فئة تجارة إلكترونية إلى منتج ثم عودة، أو نتائج بحث، أو محتوى مقسم إلى صفحات، أو قراءة مقال بعد مقال — فهذه حصة كبيرة من التنقلات الحقيقية التي يمكن جعلها فورية تقريبًا.

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

“All major browsers include a bfcache, including Chrome since version 96, Firefox and Safari.” (الترجمة العربية) «تتضمن جميع المتصفحات الرئيسية bfcache، بما فيها Chrome منذ الإصدار 96 وFirefox وSafari». ولدى Firefox وSafari تطبيقاتهما الخاصة الأقدم والأطول عمرًا؛ أما المتصفحات المبنية على Chromium (Edge وBrave وOpera وArc) فترث تطبيق Chrome. وتصف وثائق سياسة Edge من Microsoft الميزة نفسها: عند مغادرة الصفحة قد تُحفظ حالتها الحالية (شجرة المستند والبرنامج النصي وما إلى ذلك) في ذاكرة الرجوع/التقدم، وعند العودة قد يستعيدها المتصفح ويعرضها بالحالة التي كانت عليها قبل تخزينها. وهي مفعلة افتراضيًا في Edge؛ ومفتاح إيقافها الوحيد سياسة مؤسسية يتحكم فيها مسؤول تقنية المعلومات، لا مالك الموقع.

والتحفظ المهم هو أن لكل متصفح قواعد أهلية خاصة بـbfcache. فاجتياز الصفحة اختبار Chrome DevTools «Test back/forward cache» لا يضمن أهليتها في Firefox أو Safari. اعتبر نجاح Chrome ضروريًا لا كافيًا.

ما الذي يمنع أهلية bfcache؟

حدث unload — أكبر عائق على الإطلاق

إذا أخذت شيئًا واحدًا من هذا المقال، فليكن: توقف عن استخدام حدث unload. وتؤكد web.dev ذلك بتشديد نادر في وثيقة Google: “Never use the unload event. Ever!” (الترجمة العربية) «لا تستخدم حدث unload أبدًا!». وفي Chrome، يكلّف معالجو unload تقريبًا انخفاضًا قدره 18 نقطة مئوية في معدل إصابة bfcache — وهو أكبر عامل استبعاد تسببه بنفسك بفارق كبير.

هناك سببان لإنهاء Chrome استخدامه تدريجيًا. الأول أنه أكبر عائق أمام bfcache. والثاني أن unload غير موثوق أصلًا: فعلى الهاتف لا يُطلق كثيرًا على الإطلاق، لأن علامات التبويب تنتقل إلى الخلفية وتُقتل، ولأن المتصفح يعطي الأولوية لـbfcache على إطلاق unload. لذلك فإن الحدث الذي تعتمد عليه في «التنظيف» قد لا يعمل أصلًا، وفوق ذلك يحجب مكسب أداء حقيقيًا.

الإصلاحات:

  • استبدل unload بـpagehide. يُطلق حدث pagehide في كل حالة يطلق فيها unload، إضافةً إلى حالة دخول الصفحة في bfcache — لذلك فهو ترقية صارمة. استخدم visibilitychange لتنظيف موثوق عند مغادرة المستخدم.
  • اكتشف استعادة bfcache عبر pageshow. استمع إلى pageshow وافحص event.persisted — فإذا كانت true فقد استُعيدت الصفحة من bfcache، وهذه إشارة لتحديث البيانات القديمة أو إعادة عدّ مشاهدة الصفحة.
  • احظر مستمعي unload استباقيًا عبر ترويسة الاستجابة Permissions-Policy: unload=()، التي تمنع تسجيل أي معالج unload أصلًا. وينقل Chrome السياسة الافتراضية تدريجيًا نحو المنع (وقد شُحنت Permissions-Policy الخاصة بـunload منذ Chrome 115).

Cache-Control: no-store — كان الأكبر تاريخيًا، لكنه أصبح أدق

هذه هي نقطة الحداثة التي تخطئ فيها معظم مقالات المنافسين. تاريخيًا كانت Cache-Control: no-store أكبر سبب منفرد لاستبعاد الصفحات من bfcache — وتضع أرقام Chrome الخاصة بها ذلك عند نحو 17% من تنقلات السجل على الهاتف و7% على سطح المكتب. تضبط مواقع كثيرة no-store دفاعيًا لتجنب تقديم صفحة قديمة، لكن حجة Google هي أن هذا السبب يضعف مع bfcache: فالاستعادة لا تحمّل استجابة مخزنة قديمة، بل تعيد عرض الصفحة الحية نفسها تقريبًا كما لو أن علامة التبويب ظلت مفتوحة.

غيّر Chrome السلوك — لكن بشروط لا على نحو شامل. بدأت التجارب في Chrome 116، واكتمل الطرح إلى 100% من المستخدمين خلال مارس وأبريل 2025: يسمح Chrome الآن بـbfcache لصفحات no-store كثيرة، وفق شروط أمان محددة لا استثناء عام. ووفق وثائق Chrome، هناك قيود حقيقية — تُخلى الصفحة من bfcache إذا تغيرت حالة المصادقة أو ملفات تعريف الارتباط أثناء تجميدها (حتى لا يرى زائر سجّل الخروج أو مسح ملفات الارتباط لقطة قديمة لتسجيل الدخول)، كما أن قائمة ثابتة من APIs — وهي APIs الاتصالات المفتوحة نفسها المذكورة أدناه (IndexedDB وWebSocket وWebRTC وغيرها) — ما زالت تستبعد صفحة no-store من bfcache كما تستبعد أي صفحة أخرى. هذا سلوك خاص بـChrome في نطاق إصدارات محدد، وليس قاعدة تفترضها في متصفحات أخرى أو إصدارات Chrome الأقدم — اجلب تقرير DevTools/notRestoredReasons الحالي للمتصفح والإصدار اللذين تختبرهما بدل الثقة بقاعدة ثابتة. الخلاصة العملية: أي دليل (بما فيه الإصدارات الأقدم من هذا المقال) يسرد no-store كعائق دائم وغير مشروط لـbfcache أصبح قديمًا — وكذلك التعامل معه كأنه حُلّ بالكامل. وإذا كانت الحداثة مهمة فعلًا، تقترح وثائق Chrome استخدام no-cache أو max-age قصير (مثل max-age=60) بدل no-store.

الاتصالات المفتوحة والمراقبون والعوائق الأخرى

عند لحظة التنقل، ما زالت بعض الموارد المفتوحة قادرة على منع الأهلية — وماهية هذه الموارد، وهل تمنع بصرامة أم تُغلق ثم يمكن إعادة الاتصال بها، أمر يختلف باختلاف المتصفح والإصدار. تعامل مع القائمة التالية بوصفها أمثلة على نمط، لا قائمة عوائق ثابتة ودائمة:

  • طلبات fetch() / XMLHttpRequest الجارية.
  • معاملات IndexedDB المفتوحة.
  • اتصالات WebSocket / WebRTC المفتوحة، والمؤقتات، والمراقبون (MutationObserver وIntersectionObserver وما شابه). هذا مجال يتحسن بنشاط — فتوضح ملاحظات إصدارات Microsoft Edge الحديثة أن WebSocket المفتوح يُغلق الآن عند دخول الصفحة bfcache (بدل منع التخزين المؤقت كليًا)، مع التوصية بإعادة الاتصال عبر حدث pageshow وفحص event.persisted. وهذا يطابق اتجاه Chrome الأوسع إلى تقليل العوائق بدل استبعاد الصفحات فحسب.

النمط العام الذي ينبغي بناؤه، بدل حفظ قائمة ثابتة، هو إغلاق أو إيقاف الاتصالات والمؤقتات والمراقبين المفتوحة في معالجة pagehide/freeze، ثم إعادتها في معالجة pageshow/resume عندما تكون event.persisted مساوية لـtrue. ويظل هذا النمط صالحًا حتى يغير المتصفح بالضبط أي APIs تمنع الأهلية صراحةً وأيها يعلّقها فقط ويسمح لك بإعادة الاتصال.

window.opener وسياسات الأذونات والإطارات. قد يؤثر مرجع window.opener وسياسات أذونات معينة وإطارات iframe المضمنة (من المصدر نفسه أو من مصدر مختلف) في الأهلية أيضًا — وهذه عناصر في القائمة التي استخلصتها من دليل CLS لدى Ahrefs ومن وثائق Chrome. لكن لا تفترض السبب الفعلي من قائمة عامة: تعرض لوحة Chrome DevTools وAPI notRestoredReasons أسباب المنع لكل إطار — الإطار الأعلى وكل iframe على حدة — لأن الإطار المسؤول عن المنع ليس دائمًا الصفحة العليا. اجلب السبب الحقيقي من تقرير ذلك الإطار للمتصفح الذي تختبره بدل التخمين من قائمة عامة.

ضبط تسلسل أحداث/حالة دورة الحياة

الخلط بين ما يثبته كل حدث من أحداث دورة الحياة وما يوحي به فقط هو ثاني أكثر أخطاء الصحة شيوعًا هنا، بعد أخطاء الأهلية المذكورة أعلاه:

الحدث / الحالةالإشارةما الذي يعنيه فعلًاما العمل؟
pagehide (event.persisted === true)نية التخزينيحاول المتصفح تجميد الصفحة لـbfcache — وليس هذا إدخالًا مؤكدًا في الذاكرةأغلق/أوقف الاتصالات والمؤقتات والمراقبين هنا؛ لا تفترض أن الصفحة ستُستعاد فعلًا
freezeمتوقف مؤقتًاتنفيذ JS متوقف؛ وما زال يمكن إخلاء الصفحة قبل أي استعادةلا إجراء يتجاوز ما فعلته عند pagehide
(لا حدث) إخلاء ممكنيستطيع المتصفح إسقاط الصفحة المجمدة من الذاكرة في أي وقت — بسبب ضغط الذاكرة أو مهلة أو قاعدة متصفح — ولا يوجد حدث يُطلق لهذالا تعتمد على تشغيل التنظيف لاحقًا؛ نفذه بلا شروط عند pagehide/freeze
pageshow (event.persisted === true)استعادة مؤكدةالإشارة الموثوقة الوحيدة إلى حدوث استعادة bfcache فعلًاحدّث الحالة الحساسة للوقت، وأعد الاتصالات المغلقة، واحسب مشاهدة تحليلية واحدة بالضبط
resumeاستئنافعاد تنفيذ JS بعد استعادة مؤكدةأعد الاتصال بكل ما أوقفته عند freeze

القاعدة العملية: تعامل مع pagehide.persisted بوصفه نية لا دليلًا — فقد تُخلى الصفحة قبل أن ترى استعادة. وpageshow.persisted === true وحده دليل على حدوث الاستعادة. نفّذ التنظيف بلا شروط عند pagehide/freeze (فهو رخيص وآمن حتى في تنقل عادي)، ونفّذ العمل الخاص بالاستعادة فقط عند pageshow/resume وبعد تقييده بـevent.persisted، حتى لا تحدّث البيانات أو تعدّ مشاهدة تحليلية مرتين عند تحميل جديد عادي.

كيف تختبر bfcache وتشخّصها؟

المختبر / الفحص الواحد: Chrome DevTools

افتح DevTools → Application → Background services → Back/forward cache، ثم انقر “Test back/forward cache.” سينتقل Chrome تلقائيًا إلى chrome://terms/ ثم يعود، ويعرض إما نجاحًا أو قائمة محددة بأسباب المنع. وهذا مناسب لفحص عنوان URL واحد في كل مرة.

الميدان / الإنتاج: API notRestoredReasons

في السابق كانت الطريقة الوحيدة لفحص الأهلية هي اختبار DevTools اليدوي لعنوان URL واحد في كل مرة — ولم تكن هناك طريقة لمعرفة سبب منع تنقلات المستخدمين الحقيقيين. وتسُد خاصية notRestoredReasons في PerformanceNavigationTiming (المتاحة منذ Chrome 123+) هذه الفجوة؛ فهي تعرض أسباب المنع المحددة للإطار الأعلى والإطارات ذات المصدر نفسه في بيانات الميدان الحقيقية.

const nav = performance.getEntriesByType('navigation')[0];
console.log(nav.notRestoredReasons);

هناك أمور قليلة ينبغي ضبطها عند استخدامها، وفق إرشادات API الخاصة بـChrome:

  • تعمل في Chrome فقط (123+). لا يعرض Firefox وSafari API ميدانيًا مكافئًا، لذا لا تزال تحتاج إلى فحوص يدوية موضعية فيهما لمعرفة معدل الاستعادة هناك.
  • نتيجة null ملتبسة وليست ضوءًا أخضر. قد تعني أن الصفحة استُعيدت، أو أن المتصفح لم يجمع سببًا ببساطة — وتقول وثائق Chrome نفسها لا تتعامل مع null كدليل على استعادة ناجحة.
  • نص السبب ليس عقدًا ثابتًا. لا تبرمج مطابقات نصية ثابتة له؛ بل اجمع الأسباب وتتبع اتجاهاتها، لأن الصياغة الدقيقة قد تتغير عبر إصدارات Chrome.

عمليًا: اجلب notRestoredReasons إلى جانب معدلات الاستعادة pageshow.persisted قبل إطلاق الإصلاح وبعده، وقارن الاتجاه لا لقطة واحدة، واجمع ذلك مع فحص يدوي عبر DevTools/المختبر في Firefox وSafari، حيث لا يصل API. هذه هي الأداة المناسبة لتشخيص bfcache على نطاق واسع في RUM/الإنتاج، لا لفحص العناوين واحدًا واحدًا — لكن لا تتعامل معها بوصفها الصورة كلها.

bfcache وCore Web Vitals — العلاقة الدقيقة

هذه هي الدقة التي تطمسها معظم مقالات المنافسين، وهي الزاوية التي تستحق امتلاكها.

كيف تُقاس استعادة bfcache؟ تعد المتصفحات (وبالتالي بيانات CrUX الميدانية) التنقل المستعاد من bfcache «تحميل صفحة» سريعًا جدًا — مع LCP شبه فوري، وعندما تُنفذ الصفحة صحيحًا (ولا تضطر إلى إعادة التخطيط)، صفرًا إضافيًا تقريبًا في CLS، لأنه لا توجد إعادة تصيير. وفي مقارنة DebugBear الواقعية، حققت صفحة مستعادة من bfcache قيمة LCP تقارب 100ms مقابل ~427ms لتحميل غير مخزن. ولهذا بالضبط تظهر bfcache كرافعة لـCLS وLCP في قائمة CLS لدى Ahrefs، حيث أقولها ببساطة: “Make sure your pages are eligible for bfcache. The back/forward cache keeps pages in the browser cache. It allows for instant loading of a page that was already loaded, meaning no layout shifts will happen.” (الترجمة العربية) «تأكد من أن صفحاتك مؤهلة لـbfcache. تحتفظ ذاكرة الرجوع/التقدم بالصفحات في ذاكرة المتصفح، وتتيح تحميل الصفحة المحملة مسبقًا فورًا، ما يعني عدم حدوث تحولات في التخطيط».

هناك تحفظان على النطاق ينبغي صياغتهما بدقة، لأن محتوى المنافسين يبالغ هنا عادةً. أولًا، يؤثر ذلك فقط في التنقلات التي تصنفها CrUX على أنها رجوع/تقدم (بُعد navigation-type) — ولا يقول شيئًا عن زياراتك الأولى أو عمليات إعادة التحميل، وهي أغلبية الزيارات في معظم المواقع. ثانيًا، تحسين الاستعادة للتجربة المقاسة لدى المستخدمين الذين يحصلون عليها ليس ضمانًا: فالمستخدم الذي أُخليت صفحته من bfcache (راجع جدول دورة الحياة أعلاه) سيحصل على تحميل عادي غير محسّن؛ لذلك تحرك أعمال أهلية bfcache معدل الاستعادة بين تنقلات Back/Forward، لا حصة ثابتة من إجمالي الزيارات — ولا تضمن تقييم Core Web Vitals الميداني الإجمالي أو الترتيب أو معدل التحويل. إنها رافعة حقيقية قابلة للقياس بنطاق محدد، وليست إصلاح أداء أو SEO عامًا.

هل bfcache عامل ترتيب؟ لا. هذا هو الادعاء القابل للدفاع والمميز. لا تذكر وثائق Google الخاصة بترتيب Core Web Vitals bfcache إطلاقًا. وسلسلة التأثير الصادقة هي: أهلية bfcache ← أرقام CWV ميدانية أفضل (خصوصًا LCP/CLS) في تنقلات الرجوع/التقدم ← Core Web Vitals إشارة واحدة بين إشارات «تجربة الصفحة» الكثيرة التي تقول Google إنها تتماشى مع ما تكافئه أنظمة الترتيب. وهذا ادعاء أضعف وأكثر دقة بكثير من «bfcache ترفع الترتيب» — وهو الادعاء الذي ينبغي أن تقوله مقالات المنافسين عادةً لكنها لا تتوخى الدقة فيه. كما أن bfcache، على نحو صحيح، ميزة في محرك التصيير وليست ميزة للزاحف — لا علاقة لها بكيفية زحف Googlebot أو Bingbot إلى صفحاتك، ولهذا لا توجد «وجهة نظر Bing حول bfcache لأغراض SEO» مثلما توجد حول robots.txt أو خرائط المواقع.

تطبيقات SPA والتنقلات اللينة. تعمل bfcache مع تنقل المتصفح الحقيقي وأحداث السجل. أما تغير المسار «اللين» من جهة العميل في تطبيق أحادي الصفحة (تبديل عرض يقوده JS ولا يطلق تنقلًا حقيقيًا للمتصفح) فليس حدث bfcache ولا يحصل على المعاملة نفسها. وقد تؤدي محاولات بعض أدوات RUM لنسب Core Web Vitals إلى التنقلات اللينة إلى اختلافات في القياس بين CrUX وRUM — وهي نقطة ينبغي ذكرها عند تدقيق موقع مبني على إطار JS.

ما مدى شيوع عوائق bfcache في الواقع؟

يتابع Web Almanac التابع لـHTTP Archive ذلك، وهو مجال حي متغير لا خبر قديم محسوم. في إصدار 2022، لم تكن أهلية نحو ~22% من صفحات الهاتف ممكنة استنادًا إلى معياري unload وno-store وحدهما. ومنذ ذلك الحين انخفض استخدام معالجات unload عبر شرائح المواقع والأجهزة، لكن استخدام Cache-Control: no-store ارتفع (إذ يضعه فصل 2025 عند نحو 23% من المواقع، مقابل ~21% في 2024، ويربط ذلك جزئيًا بتجارب أكثر اعتمادًا على المصادقة والتخصيص وبمتطلبات امتثال أشد).

والنتيجة غير البديهية الجديرة بالاقتباس هي أن المواقع الأكبر والأعلى حركة أكثر عرضة بصورة غير متناسبة لحجب bfcache عن نفسها. فما زال نحو 28% من صفحات سطح المكتب و20% من صفحات الهاتف ضمن أكبر 1 000 موقع يستخدم معالجات unload، مقابل 11% لسطح المكتب و10% للهاتف عبر كل المواقع — غالبًا لأن المواقع الأكبر تحمل تحليلات قديمة وكودًا يعتمد على unload. والمواقع التي لديها أكثر حركة رجوع/تقدم يمكن خسارتها هي غالبًا المواقع التي تعرقل نفسها حتى الآن.

أين تقع هذه الميزة؟

bfcache رافعة أداء واحدة بين عدة رافعات في هذه المجموعة. يظهر مردودها في بيانات Core Web Vitals الميدانية — وتحديدًا Cumulative Layout Shift وLargest Contentful Paint — لأن الصفحة المستعادة تُعرض فورًا بلا إعادة تخطيط. وهي مختلفة عن التخزين المؤقت الذي يخزن الملفات لا لقطة الصفحة الحية، رغم اشتراكهما في ترويسة Cache-Control كنقطة تماس. ولا توجد صلة مباشرة بـInteraction to Next Paint، لذلك لن أفرض صلة غير موجودة.

Add an expert note

Pin an expert quote

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