500 Internal Server Error: اكتشف السبب وأصلحه
500 Internal Server Error هو الرد العام عندما يفشل كود الخادم أو إعداداته؛ والسبب موجود دائمًا في سجل الأخطاء.
500 Internal Server Error هو رد الخادم العام «حدث عطل ما». الطلب كان سليمًا؛ لكن الكود أو الإعدادات التي كان يفترض أن تجيب عنه فشلت. ولأنه رمز شامل، فإن 500 لا يخبرك تقريبًا بشيء عن السبب، والجواب موجود غالبًا في سجل أخطاء الخادم.
التعريف
يقول RFC 9110، القسم 15.6.1 إن الخادم «واجه حالة غير متوقعة منعته من تنفيذ الطلب». وهناك رموز 5xx أكثر تحديدًا للبوابات (502 و504) وللانقطاع المؤقت (503)؛ أما 500 فيغطي كل ما عدا ذلك.
الأسباب الشائعة
- أخطاء في الكود: استثناءات غير ملتقطة، وأخطاء PHP قاتلة (fatal)، وأخطاء صياغة في نشر جديد.
- حدود الموارد: «Allowed memory size exhausted»، وحدود زمن التنفيذ، وقرص ممتلئ.
- ملف .htaccess معطوب: توجيه غير صالح أو غير مدعوم يجعل Apache يعيد 500 لكل طلب في ذلك المجلد.
- تعارض الإضافات أو القوالب بعد تحديث؛ وعندها يعرض WordPress «There has been a critical error on this website».
- أعطال قاعدة البيانات أو الخدمات التي لا يتعامل معها التطبيق بسلاسة.
- صلاحيات خاطئة أو متغيرات بيئة مفقودة بعد النقل.
التأثير على السيو
بحسب وثائق Google لرموز حالة HTTP، تجعل أخطاء 5xx الزاحف Googlebot يبطّئ زحف الموقع بما يتناسب مع عدد الروابط الفاشلة. وتبقى الصفحات المفهرسة فترة، لكن الروابط التي تعيد أخطاء الخادم باستمرار تُزال. والعطل القصير كلفته قليلة؛ أما أيام من الأخطاء على صفحات مهمة فتكلّف الترتيب.
يستحق robots.txt عناية خاصة. فإذا أعاد 5xx، تعامل Google الموقع كله مؤقتًا كأنه محظور. وإذا استمر ذلك أكثر من 30 يومًا، ترجع Google إلى آخر نسخة مخزّنة لديها، أو تفترض عدم وجود قيود إن لم تكن لديها نسخة. ويعرض Search Console هذه المشاكل تحت «Server error (5xx)» في تقرير فهرسة الصفحات وفي قسم حالة المضيف ضمن إحصاءات الزحف.
كيف تصلح 500
لأصحاب المواقع
- فكّر فيما تغيّر آخر مرة (تحديث أو إضافة جديدة أو ملف معدَّل) وتراجع عنه.
- في WordPress عطّل كل الإضافات بإعادة تسمية مجلد
wp-content/pluginsعبر FTP، ثم فعّلها واحدة واحدة. - اطلب من استضافتك مدخلات سجل الأخطاء وقت حدوث العطل.
للمطورين
اقرأ السجلات أولًا:
tail -f /var/log/nginx/error.log
tail -f /var/log/apache2/error.log
journalctl -u php8.3-fpm --since "10 min ago"
وفي WordPress، سجّل الأخطاء دون عرضها للزوار:
// wp-config.php
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true); // يكتب في wp-content/debug.log
define('WP_DEBUG_DISPLAY', false);
لا تطبع أبدًا تتبّع المكدس (stack trace) في صفحات الإنتاج (display_errors = Off). وفي الأعطال المؤقتة المعروفة، مثل قاعدة بيانات تعيد التشغيل، أعد 503 مع Retry-After بدلًا من 500 كي تعرف الزواحف أن تعود لاحقًا.
كيف تتحقق
بعد كل نشر، اختبر رابطًا واحدًا من كل قالب أساسي (الرئيسية والتصنيف والمقال والمنتج) بـ أداة فحص حالة HTTP؛ فقالب واحد معطوب قد يكسر آلاف الصفحات دفعة واحدة. ولرؤية أوسع، يكشف زحف فحص السيو للموقع الأخطاء في أنحاء الموقع. وهذا رد نموذجي:
HTTP/1.1 500 Internal Server Error
Content-Type: text/html; charset=UTF-8
Cache-Control: no-store
Content-Length: 2671 الأسئلة الشائعة
هل يضر خطأ 500 بالسيو؟
العطل القصير لا يسبب ضررًا دائمًا: يبطّئ Googlebot ثم يعود. أما استمرار 500 على الروابط نفسها فيدفع Google إلى إسقاطها من الفهرس، فأصلحها بسرعة.
لماذا أحصل على خطأ 500 في بعض الصفحات فقط؟
غالبًا لأن تلك الصفحات تستخدم قالبًا أو إضافة أو استعلامًا أو بيانات تفشل. قارن صفحة معطلة بصفحة تعمل، وراجع مدخلات سجل الأخطاء للرابط المعطل.
كم تستغرق Google قبل أن تُسقط الصفحات التي تعيد 500؟
لا تنشر Google مدة محددة. وإرشاداتها تعد الأخطاء التي تستمر ساعات أو يومًا أو يومين تباطؤًا مؤقتًا، بينما تُزال تدريجيًا الروابط التي تفشل لفترة أطول.