صفحةُ صيانة تُرجِع ٢٠٠ تقول لمحرّكات البحث إن موقعك كلَّه صار صفحةً مكتوبًا عليها «نعود قريبًا»، وستفهرسها. والجوابُ الصحيح ٥٠٣ مع ترويسة Retry-After، ومعناها: غيرُ متاحٍ مؤقّتًا، فعُد لاحقًا — ولا يكلّف شيئًا.

Nginx

server {
    # ...
    if (-f /var/www/site/maintenance.on) {
        return 503;
    }

    error_page 503 @maintenance;
    location @maintenance {
        root /var/www/site/public;
        rewrite ^ /maintenance.html break;
        add_header Retry-After 3600 always;
    }
}
sudo touch /var/www/site/maintenance.on     # on
sudo rm /var/www/site/maintenance.on        # off

ومفتاحٌ بملفٍّ يعني ألّا إعادةَ تحميل ولا تغييرَ إعدادات، ويمكن قلبه من سكربت نشر.

وأدخِل نفسك

set $maint 0;
if (-f /var/www/site/maintenance.on) { set $maint 1; }
if ($remote_addr = 203.0.113.42)   { set $maint 0; }
if ($maint = 1) { return 503; }
فبلا استثناءٍ لا تستطيع اختبار الإصلاح الذي تنشره، والردُّ المعتاد أن يُطفَأ وضعُ الصيانة والموقعُ ما زال مكسورًا. ضع عنوانك أنت قبل أن تحتاج إليه.

ماذا ينبغي أن تقول الصفحة

  • أنها صيانةٌ مخطَّطة، ومتى يعود الموقع — وقتًا حقيقيًّا لا «قريبًا».
  • وسبيلًا للوصول إليك لا يعتمد على الموقع.
  • ولا اعتمادَ على التطبيق: ملفٌّ ساكن بأنماطٍ داخله.

افحصها

curl -sSI https://yourdomain.com/ | grep -E '^HTTP|retry-after'
# HTTP/2 503
# retry-after: 3600
ولنشرٍ يستغرق ثوانيَ لا تستعمل وضع الصيانة البتّة: ابنِ في مجلّدٍ جديد وبدّل رابطًا رمزيًّا. فلا يرى أحدٌ شيئًا — انظر النشرُ بتبديلٍ ذرّي.