الطلبات الشرطية: ETag وIf-Modified-Since و304 Not Modified

كيف تتيح الطلبات الشرطية، عبر ETag وLast-Modified وIf-Modified-Since وIf-None-Match واستجابة 304 Not Modified، لـ Googlebot تجنب إعادة تنزيل الصفحات الثابتة والحفاظ على ميزانية الزحف في المواقع الكبيرة.

نُشر أول مرة: 28 يونيو 2026 · آخر تحديث: 14 أغسطس 2026 · Advanced
اللغات
دليل واحد في هذه الصفحة

الطلبات الشرطية هي طريقة Googlebot للسؤال عما إذا كانت الصفحة قد تغيرت قبل تنزيلها مجدداً. يرسل If-Modified-Since للتحقق مقابل Last-Modified و/أو If-None-Match للتحقق مقابل ETag؛ وإذا لم يتغير شيء، ينبغي أن يعيد الخادم 304 Not Modified بلا متن، ويستخدم الزاحف نسخته الحالية. تفضل Google ETag عند وجود الاثنين، ولا ترسل الترويسات في كل زحف، كما أن 304 لا تجمد إشارات الفهرسة. تفيد الآلية كفاءة الزحف في المواقع الكبيرة ذات الصفحات النادرة التغيير، وليست عامل ترتيب. وتعطلها عادة استجابة 200 الدائمة، أو ETag المتقلبة، أو Last-Modified التي لا تعكس التغييرات الحقيقية.

الخلاصة — تتيح الطلبات الشرطية لـ Googlebot التحقق من نسخة مخزنة مؤقتاً بدلاً من تنزيلها من جديد. يرسل If-Modified-Since للتحقق مقابل ترويسة Last-Modified و/أو If-None-Match للتحقق مقابل ETag؛ وإذا لم يتغير شيء، يعيد الخادم 304 Not Modified بلا متن، ويستخدم الزاحف نسخته الحالية، أي نحو 1 KB بدلاً من 100 KB أو أكثر للصفحة الكاملة. تكون الأولوية لـ ETag عند وجود الاثنين؛ توصي Google به لتجنب مشكلات تنسيق التاريخ، لكنها تنصح بضبط الاثنين. لا ترسل Google الترويسات في كل عملية زحف، ويعتمد ذلك على حالة الاستخدام، ويكون AdsBot أرجح في إرسالها. ويمكنك استباقياً إرسال 304 حتى بلا ترويسة شرطية، كما أن 304 لا تجمد إشارات الفهرسة. تعطلها ثلاثة أخطاء: إعادة 200 دائماً، أو ETag متقلب بسبب الطوابع الزمنية أو الرموز الخاصة بكل طلب أو اختلاف عقد CDN، أو Last-Modified لا يعكس التغييرات الحقيقية. إنها وسيلة لكفاءة الزحف في المواقع الكبيرة، وليست عامل ترتيب، وتختلف عن معدل الزحف وتكراره وميزانيته.

Evidence for this claim Google may send If-Modified-Since or If-None-Match, but a site must not assume every crawler request will contain either conditional header. Scope: official protocol/provider documentation and production verification Confidence: high · Verified: Troubleshoot Google Search crawling errors Evidence for this claim Conditional requests use validators such as ETag and Last-Modified with If-None-Match or If-Modified-Since. Scope: Current official or standards documentation. Confidence: high · Verified: RFC 9110: Conditional requests Evidence for this claim A 304 response indicates a conditional request can reuse a stored representation and does not include a message body. Scope: Current official or standards documentation. Confidence: high · Verified: RFC 9110: 304 Not Modified

الآلية بدقة

إذا كان معدل الزحف يصف سرعة جلب Googlebot، ويصف تكرار الزحف عدد مرات عودته، فالطلبات الشرطية تصف قلة تكلفة الإجابة عن كل إعادة زحف. إنها مصافحة تحقق بين الزاحف وخادمك، مبنية على زوجين من ترويسات HTTP:

ما ترسله أنت (ترويسة الاستجابة)ما يعيده الزاحف (ترويسة الطلب)طريقة التحقق
Last-Modified: <date>If-Modified-Since: <date>مقارنة التواريخ
ETag: "<fingerprint>"If-None-Match: "<fingerprint>"مقارنة معرّفات المحتوى

يجري التدفق خطوة بخطوة هكذا:

  1. في أول زحف، يعيد الخادم الصفحة مع 200 OK وتاريخ Last-Modified و/أو بصمة ETag.
  2. في زحف لاحق، قد يرسل Googlebot ترويسة If-Modified-Since مكرراً التاريخ الذي رآه، و/أو If-None-Match مكرراً قيمة ETag.
  3. يفحصهما الخادم. إذا لم يتغير شيء ذي صلة، يعيد 304 Not Modified بلا متن استجابة؛ أي الحالة والترويسات فقط.
  4. يعيد Googlebot استخدام النسخة التي زحف إليها سابقاً. وإذا تغير المحتوى، يعيد الخادم 200 OK مع المتن الكامل.

توثق Google هذه المصافحة بصياغة تكاد تكون حرفية: “Google’s crawlers that support caching will send the ETag value returned for a previous crawl of that URL in the If-None-Match header. If the ETag value sent by the crawler matches the current value the server generated, your server should return an HTTP 304 (Not modified) status code with no HTTP body.” (ترجمة) «ترسل برامج زحف Google التي تدعم التخزين المؤقت قيمة ETag المعادة من زحف سابق لعنوان URL في ترويسة If-None-Match. وإذا طابقت القيمة التي أرسلها الزاحف القيمة الحالية التي أنشأها الخادم، فينبغي أن يعيد الخادم حالة HTTP 304 (غير معدل) بلا متن HTTP».

Evidence for this claim Google documents heuristic HTTP caching and support for ETag and Last-Modified validators for crawlers that support caching. Scope: official protocol/provider documentation and production verification Confidence: high · Verified: Things to Know about Google web crawling
The validator makes the recrawl conditional: unchanged content returns a lightweight 304, while a real change returns the full 200 response. المصدر: Google Search Central

A crawler revalidates its saved copy by sending If-None-Match with an ETag or If-Modified-Since with a date. The server compares that validator. If the representation is unchanged, it returns 304 Not Modified without a response body and the crawler reuses its saved copy. If the representation changed, the server returns 200 OK with the full updated response body.

© Patrick Stox LLC · CC BY 4.0 ·

ETag مقابل Last-Modified — ولماذا تفضل Google الأول

كلا أداتي التحقق مدعومتان. تنص وثائق زحف Google بوضوح: “Google’s crawling infrastructure supports heuristic HTTP caching as defined by the HTTP caching standard, specifically through the ETag response- and If-None-Match request header, and the Last-Modified response- and If-Modified-Since request header.” (ترجمة) «تدعم بنية زحف Google التخزين المؤقت الاستدلالي لـ HTTP كما يعرّفه معيار التخزين المؤقت، وتحديداً عبر ترويسة الاستجابة ETag وترويسة الطلب If-None-Match، وترويسة الاستجابة Last-Modified وترويسة الطلب If-Modified-Since».

Evidence for this claim Google documents heuristic HTTP caching and support for ETag and Last-Modified validators for crawlers that support caching. Scope: official protocol/provider documentation and production verification Confidence: high · Verified: Things to Know about Google web crawling

عند وجود الاثنين، تكون الأولوية لـ ETag: “If both ETag and Last-Modified response header fields are present in the HTTP response, Google’s crawlers use the ETag value as required by the HTTP standard.” (ترجمة) «إذا وُجد حقلا ترويسة الاستجابة ETag وLast-Modified معاً في استجابة HTTP، تستخدم برامج زحف Google قيمة ETag كما يقتضي معيار HTTP». ليست هذه خصوصية لدى Google؛ إنها قاعدة HTTP، وتتفق مع قاعدة الأولوية التي شرحتها في مدخل قاموس Ahrefs عن 304 Not Modified: عند استخدام If-None-Match وIf-Modified-Since معاً، تكون الأولوية لـ If-None-Match.

لماذا تفضل ETag؟ لأنها سلسلة مبهمة تمثل بصمة للمحتوى، فتتجنب مشكلات تحليل التاريخ التي تصيب Last-Modified. توصي Google: “For Google’s crawlers specifically, we recommend using ETag instead of the Last-Modified header to indicate caching preference as ETag doesn’t have date formatting issues.” (ترجمة) «بالنسبة إلى برامج زحف Google تحديداً، نوصي باستخدام ETag بدلاً من ترويسة Last-Modified للإشارة إلى تفضيل التخزين المؤقت، لأن ETag لا تعاني مشكلات تنسيق التاريخ». وإذا استخدمت Last-Modified، فيجب تنسيق التاريخ وفق معيار HTTP (Weekday, DD Mon YYYY HH:MM:SS Timezone) وإلا فقد لا تحلله Google. ونصيحة Google العملية هي ضبط الاثنين على أي حال متى أمكن.

توجد إشارة إضافية أيضاً: Cache-Control: max-age. تقول Google إنها غير مطلوبة، لكن يمكنك ضبطها على عدد الثواني التي تتوقع بقاء المحتوى خلالها بلا تغيير لمساعدة برامج الزحف على تحديد موعد إعادة الزحف. لاحظ عدم التماثل: تراعي بنية الزحف لدى Google قيمة max-age كتلميح، لكنها لا تعامل توجيهات Cache-Control الأخرى كما يفعل المتصفح.

ما الذي تفعله 304 وما الذي لا تفعله؟

الفارق على الشبكة كبير. لا تحمل 304 متناً، ولذلك تبلغ، وفق مقارنة Gary Illyes التقريبية، نحو 1 KB بدلاً من 100 KB أو أكثر للصفحة الكاملة. كما أن إنشاءها أقل تكلفة، إذ لا يلزم عرض كامل أو استعلام قاعدة بيانات، ومعالجتها لدى Google أقل تكلفة، إذ لا يعاد تحليل المتن أو عرضه أو تشغيل مسار الفهرسة كاملاً عليه.

لكن كن دقيقاً بشأن ما لا تفعله 304: إنها لا تجمد إشارات ترتيبك. تذكر إرشادات Google لرموز الحالة أن مسار الفهرسة عند 304 “may recalculate signals for the URL,” (ترجمة) «قد يعيد حساب إشارات عنوان URL»، رغم أنه لم يجلب المتن مجدداً. تتجاوز 304 تنزيل المحتوى وإعادة معالجته، لا كل تقييم لاحق. لذلك لا توجد حيلة «أرسل 304 لتثبيت ترتيبي».

لا تسأل Google دائماً — وهذا طبيعي

تفوت معظم الشروحات تفصيلاً مهماً: لا يرسل Googlebot الترويسات الشرطية في كل طلب. تقول وثيقة أخطاء الزحف: “Google generally supports the If-Modified-Since and If-None-Match HTTP request headers for crawling. Google’s crawlers don’t send the headers with all crawl attempts; it depends on the use case of the request (for example, AdsBot is more likely to set the If-Modified-Since and If-None-Match HTTP request headers).” (ترجمة) «تدعم Google عموماً ترويستي طلب HTTP If-Modified-Since وIf-None-Match للزحف. ولا ترسلهما برامج زحف Google في جميع محاولات الزحف؛ إذ يعتمد ذلك على حالة استخدام الطلب، فعلى سبيل المثال يكون AdsBot أرجح في ضبطهما».

لذلك، إذا نظرت في سجلاتك ورأيت أن Googlebot نادراً ما يرسل If-None-Match، فلا يعني ذلك أن إعدادك معطل؛ ربما لا تسأل Google في ذلك الزحف ببساطة. وتشير Google أيضاً إلى أن كل زاحف أو أداة جلب قد تستخدم التخزين المؤقت أو لا تستخدمه بحسب المنتج الذي تخدمه.

وفي الاتجاه الآخر، يمكنك إرسال 304 من دون تلقي ترويسة شرطية أصلاً. تقول Google: “Independently of the request headers, you can send a 304 (Not Modified) HTTP status code and no response body for any Googlebot request if the content hasn’t changed since Googlebot last visited the URL. This will save your server processing time and resources, which may indirectly improve crawl efficiency.” (ترجمة) «بصرف النظر عن ترويسات الطلب، يمكنك إرسال حالة HTTP 304 (غير معدل) من دون متن للاستجابة لأي طلب من Googlebot إذا لم يتغير المحتوى منذ آخر زيارة للعنوان. سيوفر ذلك وقت معالجة الخادم وموارده، وقد يحسن كفاءة الزحف بصورة غير مباشرة». هذه تقنية متقدمة عند CDN أو الحافة، وخطيرة إذا أخطأت؛ لأن إرسال 304 لمحتوى تغير فعلاً هو تحديداً فشل «أدوات التحقق تكذب». عاملها كتحسين حافة، لا كاختصار لادعاء الثبات.

لماذا يهم ذلك لميزانية الزحف؟

تتضاعف الوفورات في الحالة التي تذكرها إرشادات Google لميزانية الزحف: مواقع كبيرة تضم نسبة كبيرة من عناوين URL نادرة التغيير، مثل كتالوجات التجارة الإلكترونية ذات المنتجات طويلة الذيل، وأرشيفات الأخبار والناشرين، ومواقع التوثيق الكبيرة. قد تُهدر نسبة معتبرة من ميزانية الزحف فيها على إعادة تنزيل صفحات مطابقة بايتاً ببايت للزحف السابق. أجب عنها بـ 304 لتحرر هذه الميزانية للصفحات الجديدة والمتغيرة.

أما الجزء الصريح المحبط قليلاً، فهو أن Google تطلب زيادة التبني، لا تبلغ بأن الجميع يطبقه. ذكر Illyes أن حصة عمليات جلب Googlebot القابلة للتخزين المؤقت انخفضت خلال العقد الماضي من نحو 0,026 % إلى 0,017 %، رغم نمو الويب. أي أن هذه وسيلة قليلة الاستخدام، وأن عنوان قسم منشور «Crawling December» يكاد يكون رجاءً حرفياً: “Allow us to cache, pretty please.” (ترجمة) «اسمحوا لنا بالتخزين المؤقت، من فضلكم». معظم المواقع غير مهيأة لذلك ببساطة.

أخطاء الإعداد الشائعة التي تهزم الطلبات الشرطية

لا يعني ضبط أداة تحقق أنك تستفيد منها. تكسر المواقع هذه الآلية خفية بثلاث طرق — أو أربع:

1. إعادة 200 دائماً مع متن كامل

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

2. تغيّر ETag في كل طلب

هذا أخبث لأنه يبدو صحيحاً. إذا حُسبت ETag من عنصر متقلب، كطابع زمني مضمّن أو رمز خاص بالطلب أو الجلسة أو معرّف طلب أو ناتج بناء يتضمن وقت البناء، تحصل كل استجابة على ETag «جديدة» رغم تطابق المحتوى الظاهر. لا تطابق If-None-Match أبداً، فلا يجد الخادم أساساً لإعادة 304. الحل: اشتق ETag من تجزئة متن الاستجابة الفعلي أو معرّف إصدار محتوى ثابت، لا من شيء يتغير مع كل طلب.

3. اختلاف عقد CDN أو المجموعة

خطأ قريب: تنشئ عقد الأصل المختلفة قيماً ضعيفة مختلفة لـ ETag لمحتوى متطابق. لا يرى CDN أو الزاحف المتنقل بين العقد قيمة ثابتة، ويواصل إعادة التحقق من دون الوصول إلى 304 صحيحة. الحل: أنشئ ETag حتمياً من المحتوى، لا من حالة المثيل، أو وحّد إنشاءها عبر المجموعة.

4. قيمة Last-Modified لا تعكس التغييرات الحقيقية

إذا وُسمت Last-Modified بوقت «الآن» عند كل عرض، أو تغيرت بسبب تعديل تافه مثل سنة حقوق نشر تتحدث تلقائياً في التذييل، فإنها إما تطلق عمليات زحف كاملة بلا داعٍ لأن التاريخ يبدو جديداً دائماً، أو إذا كانت قديمة أو متلاعباً بها تضعف ثقة Google في الإشارة. هذا مبدأ الصدق نفسه الذي تطبقه Google على قيمة lastmod في خريطة الموقع: لا تستخدمها إلا إذا كانت تعكس تغييراً مهماً يمكن التحقق منه. يشرح مقال تكرار الزحف منطق lastmod، وينطبق الانضباط نفسه على ترويسة HTTP Last-Modified.

حالة Illyes الطرفية: عندما تثبت 304 صفحة معطلة

تستحق تنبيهاً مستقلاً لأنها مناقضة للحدس ولا يغطيها أحد تقريباً. وصف Illyes كيف يمكن أن تأتي 304 “backfire spectacularly” (ترجمة) «بنتيجة عكسية مذهلة»: يقدم خلل في الخادم صفحة فارغة معطلة ضمن 200؛ يعاملها الزاحف كخطأ عابر ويحدد إعادة زحف للتحقق؛ ثم تبلغ الصفحة التي ما زالت معطلة، وبصورة صحيحة، عن 304 «لم تتغير»؛ فيستنتج الزاحف أن حالة الخطأ هي المحتوى الدائم «الحقيقي» ويقلل مرات إعادة الفحص. ينتهي تسلسله بأن الزاحف “learn[ing] the error is persistable” (ترجمة) «يتعلم أن الخطأ قابل للاستمرار». وتحفظه: هل يحدث ذلك؟ نعم. كثيراً؟ قطعاً لا؛ “but it’s worth keeping this somewhere deep in your mind because debugging it is an absolute nightmare.” (ترجمة) «لكن يجدر الاحتفاظ به في مكان عميق من ذهنك لأن تصحيحه كابوس مطلق». الدرس: قد ترسخ الطلبات الشرطية خطأً إذا كان توليد المحتوى معطلاً، فلا تضفها فوق أصل غير مستقر.

كيف يتعامل Bing معها؟

ليست هذه ميزة خاصة بـ Google، بل يمكن القول إن دعم Bing أقدم وأوضح. أعلن Bing، عندما كان Live Search، في 2008 عن طلب GET شرطي متوافق مع RFC 2616: إنه “generally will not download the page unless it has changed since the last time it crawled it” (ترجمة) «لن ينزّل الصفحة عموماً إلا إذا تغيرت منذ آخر مرة زحف إليها»، ويرسل If-Modified-Since مع وقت آخر تنزيل، وعند توافرها If-None-Match مع ETag. واليوم يضم Bing ذلك إلى مقياس مسمى قابل للتتبع هو كفاءة الزحف، ويعرّفه Fabrice Canel بأنه “how often we crawl and discover new and fresh content per page crawled.” (ترجمة) «معدل زحفنا واكتشافنا لمحتوى جديد وحديث لكل صفحة نزحف إليها». وتخفض عمليات إعادة الزحف غير الضرورية إلى المحتوى الثابت تلك الدرجة مباشرة. لذا تخدم أدوات التحقق نفسها المحركين، لكن Bing يمنح المفهوم لوحة نتائج.

Evidence for this claim Conditional requests use validators such as ETag and Last-Modified with If-None-Match or If-Modified-Since. Scope: Current official or standards documentation. Confidence: high · Verified: RFC 9110: Conditional requests

هل يؤثر ذلك في الترتيب؟

لا. حافظ على الانضباط نفسه في مقالي معدل الزحف وميزانيته: الطلبات الشرطية وسيلة لكفاءة الزحف والموارد، وليست عامل ترتيب. لا يربط مصدر رسمي ETag أو If-Modified-Since أو 304 بالترتيب. الفائدة غير المباشرة هي أن المواقع الكبيرة أو كثيرة التحديث قد تزحف صفحاتها الجديدة والمتغيرة وتفهرس أسرع؛ لكن زيادة كفاءة الزحف ليست في ذاتها إشارة ترتيب.

كيف تتحقق من عملها؟

الحقيقة المرجعية في سجلات الخادم. ابحث عن أمرين: إرسال Googlebot ترويستي الطلب If-None-Match وIf-Modified-Since، وإعادة الخادم استجابات 304 إليه. البيانات الواقعية قليلة، وهذا ما يجعل دراسة سجلات الخادم لدى Tame the Bots التي أعدها Dave Smart قيّمة. راقب حركة Googlebot المتحقق منها، ووجد أن نحو 1,3 % فقط من الطلبات حصلت على 304، بينما كان معظمها 200، وأن طلبات If-None-Match تجمعت عندما طُلب عنوان URL مرة أخرى بعد وقت قصير من جلب سابق. تتفق خلاصته مع الإرشادات: نادرة في المواقع الصغيرة، لكنها قد تحقق “significant savings” (ترجمة) «وفورات كبيرة» في المواقع كثيفة الزحف. لا تتوقع معدل 304 مرتفعاً في موقع صغير؛ وتوقع أن يهم عند التوسع.

الطلبات الشرطية مقابل معدل الزحف وتكراره وميزانيته

لتمييز أفراد عائلة ميزانية الزحف:

  • معدل الزحف — مدى سرعة جلب Googlebot، أي جانب العرض الذي تقيده صحة الخادم.
  • تكرار الزحف — مدى تكرار إعادة جلب عنوان URL معروف، بحسب الشعبية وقدم النسخة.
  • ميزانية الزحف — نطاق الطلب والسعة: مجموعة عناوين URL التي يستطيع Google الزحف إليها ويريد ذلك.
  • الطلبات الشرطية — مدى قلة تكلفة الإجابة عن كل إعادة زحف. لا تغير سرعة الزحف أو تكراره؛ بل تجعل زيارة كل صفحة ثابتة شبه مجانية، فتمنع هدر الميزانية على محتوى مطابق.

Add an expert note

Pin an expert quote

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