أخطاء Soft 404: ما هي وكيف تصلحها
الجواب المختصر: يحدث Soft 404 حين تعرض صفحة للزائر «غير موجودة» (أو لا تعرض شيئًا يذكر) لكنها ترد برمز النجاح 200 بدل 404. يعتبر Google هذا خطأً: إذا كان محتوى رد 2xx يشير إلى خطأ فإن Search Console يبلغ عن Soft 404. والإصلاح أن يرسل الخادم رمز الحالة المطابق للحقيقة: 404 أو 410 للصفحات المحذوفة، و301 إلى صفحة مكافئة للصفحات المنقولة، ومحتوى حقيقيًا للصفحات التي يجب أن تكون موجودة.
ما هو Soft 404 وكيف يختلف عن 404 العادي؟
يبدأ كل رد من خادم الويب برمز حالة، ويصل الرمز قبل أي محتوى. الرمز 200 معناه «حسنًا، هذه هي الصفحة»، والرمز 404 معناه «لا شيء هنا». وSoft 404 هو عدم تطابق بين الاثنين: الصفحة على الشاشة تقول «غير موجودة» أو «0 نتيجة» أو لا تعرض ما يستحق القراءة، ومع ذلك فالرمز 200.
يصف Google هذه الحالة في وثائقه عن رموز حالة HTTP وأخطاء الشبكة. عند رد 2xx يأخذ Google المحتوى في الحسبان، فإذا كان المحتوى يشير إلى خطأ، كصفحة فارغة أو رسالة خطأ، يعرض Search Console خطأ Soft 404. أما مع رمز 4xx حقيقي فلا يستخدم Google محتوى عنوان URL إطلاقًا.
يمكنك رؤية الفرق في الطرفية. في موقع يعاني هذه المشكلة يبدو الطلب إلى عنوان غير موجود هكذا (العنوان مثال توضيحي):
$ curl -s -o /dev/null -w "%{http_code}\n" https://your-site.example/page-that-does-not-exist
200
الجواب الصحيح هو 404. يرى الزائر نص «الصفحة غير موجودة» اللطيف نفسه في الحالتين. الفرق في رمز الحالة وحده، ورمز الحالة هو أول ما يقرؤه الزاحف.
وكلمة «soft» لا تعني «خفيف». إنها تعني أن الخادم يقول إن كل شيء على ما يرام بينما تقول الصفحة إن الأمر ليس كذلك.
لماذا يهم Soft 404 أصلًا؟
إليك ما هو موثق وما ليس موثقًا.
موثق:
- يسرد Search Console العنوان بوصفه خطأ Soft 404، أي أن Google نفسه يعتبره مشكلة.
- مع 404 أو 410 حقيقي لا يستخدم Google محتوى العنوان. ومع 200 تترك له أن يخمن من المحتوى هل الصفحة خطأ.
غير موثق: تأثير مباشر في الترتيب. يسمي Google الخطأ في تقريره، ولا يقول إن Soft 404 يسحب صفحات أخرى من موقعك إلى الأسفل، ولم نجد مصدرًا يثبت ذلك. تعامل بحذر مع عبارات مثل «أخطاء Soft 404 تدمر SEO».
رأينا، ولا شيء أكثر من ذلك: الصفحة التي لا قيمة لها لا ينبغي أن تظهر نتيجة بحث، وكلفة الإصلاح قليلة. وهناك جانب عملي لا علاقة له بـ Google: أدوات فحص الروابط ومراقبة التوفر تقرأ رموز الحالة. فإذا رد كل عنوان بالرمز 200 لم تستطع أن تخبرك بأن رابطًا معطوب، ولن يعرف الزوار الذين يتبعون رابطًا قديمًا أن الصفحة لم تعد موجودة.
ما الذي يسبب Soft 404 في المواقع؟
تنشأ حالات Soft 404 عادةً من أنماط كهذه:
- تطبيق أحادي الصفحة (SPA) يرد على كل مسار بالهيكل نفسه. يرسل الخادم التطبيق برمز 200 لأي عنوان. وبعد تشغيل JavaScript فقط تقول الشاشة «غير موجودة». لكن الرمز تقرر قبل ذلك وهو 200. يعالج Google هذه الصفحات على خطوات (الزحف، ثم التصيير، ثم الفهرسة)، وتدخل الصفحة ذات الرمز 200 طابورًا للتصيير. وتشرح أساسيات JavaScript من Google هذا النموذج. وبعض الزواحف قد لا تنفذ النصوص البرمجية أصلًا.
- صفحة خطأ جميلة برمز 200. نظام إدارة محتوى أو إطار عمل أو قاعدة في وكيل عكسي يعرض قالب «غير موجودة» مصممًا لكنه ينسى ضبط رمز الحالة.
- صفحات القوائم الفارغة. قسم أو وسم أو صفحة بحث داخلي بلا عناصر ما زالت ترد بالرمز 200 وتعرض «0 نتيجة» أو إطارًا فارغًا.
- منتجات نفدت أو توقف إنتاجها. تبقى الصفحة قائمة ولا تقول أكثر من «غير متوفر». والصفحة التي ما زالت تحمل وصفًا حقيقيًا وملاحظة عن التوفر حالة مختلفة عن إشعار مجرد.
- إعادة توجيه كل شيء إلى الصفحة الرئيسية. الصفحة المحذوفة التي تحيل الزوار إلى الصفحة الرئيسية تنتهي برمز 200 ومحتوى لا صلة له بها. والصفحة الرئيسية نادرًا ما تكافئ الصفحة الغائبة.
ومن الأسباب أيضًا الصفحة الرقيقة: قالب بلا محتوى تقريبًا، كعنصر نائب أو قسم نصف مكتمل. فالمحتوى الذي يشبه رسالة خطأ أو صفحة فارغة قد يوسم حتى لو لم يقصد أحد أن تكون صفحة خطأ.
كيف تكتشف أخطاء Soft 404 في موقعك؟
لديك ثلاث طرق، وهي يكمل بعضها بعضًا.
- Search Console. افتح تقرير فهرسة الصفحات (Page indexing) وابحث عن السبب «Soft 404». يسرد العناوين التي وسمها Google نفسه هنا. وتعرض أداة «فحص عنوان URL» ما يحصل عليه Google من عنوان واحد.
- الطرفية. اطلب عنوانًا لا يمكن أن يوجد واقرأ رمز الحالة (الأمر أدناه).
- المتصفح. افتح أدوات المطور، وانتقل إلى تبويب Network (الشبكة)، وافتح عنوانًا من اختراعك، وانظر إلى رمز حالة الطلب الأول. الصفحة نفسها لا تخبرك بشيء لأنها تبدو واحدة مع أي رمز.
في فحص الطرفية يتبع الخيار -L عمليات إعادة التوجيه، فترى أيضًا أين ينتهي العنوان:
curl -s -L -o /dev/null -w "%{http_code} %{url_effective}\n" https://your-site.example/page-that-does-not-exist
المطلوب هو 404. وإذا حصلت على 200 https://example.com/ فالخادم يعيد توجيه العناوين المجهولة إلى الصفحة الرئيسية. استخدم GET هكذا بدل curl -I، لأن بعض الخوادم تجيب عن طلب HEAD بشكل مختلف.
اختبر من الخارج: اطلب العنوان العام لا التطبيق مباشرة. فقد يبدل CDN أو ذاكرة مؤقتة أو جدار حماية أمام التطبيق الجواب.
كيف يختبر SEOgrinder وجود Soft 404
يطلب الفحص المجاني في SEOgrinder من موقعك عنوانًا يختلق له اسمًا عشوائيًا لا يمكن أن يوجد. فإذا كان الجواب 200 فإنه يبلغ عن نتيجة. ويحتسب الأمر نفسه إذا أعاد موقعك توجيه هذا العنوان إلى الصفحة الرئيسية، لأن ذلك ينتهي أيضًا برمز 200. تظهر النتيجة في تبويب «الصفحة في Google»، في بطاقة «الفهرسة»، على شكل سطر: «عناوين URL المجهولة تُعيد 404 بشكل صحيح» أو «عناوين URL المجهولة تُعيد 200 بدل 404». وتدخل النتيجة قائمة المهام مع نصيحة بإرجاع 404 حقيقي أو 410.
وللاختبار قيدان نقولهما بصراحة. الأول أنه يسأل كيف يتعامل خادمك مع عناوين غير موجودة؛ ولا يخبرك أي عناوينك الحقيقية وسمها Google بوصفها Soft 404. أما الحكم في العناوين المفردة فمكانه Search Console. وفي التثبيت المحلي المربوط بـ Search Console يقرأ SEOgrinder أيضًا حالة الفهرسة المخزنة للصفحة المفحوصة ويقول ذلك إذا أدرجها Google بوصفها Soft 404. والثاني أن الاختبار لا يستطيع أن يخبرك هل تبدو إحدى صفحاتك الرقيقة فارغة في نظر Google. أما جولة الموقع فتبلغ عن الصفحات الرقيقة والروابط الداخلية المعطوبة، وهي الأماكن التي تبدأ منها المشكلة غالبًا.
أي رمز حالة هو الصحيح؟ جدول القرار
يتوقف الجواب الصحيح على ما هو حقيقي في شأن الصفحة. اضبط الرمز ليطابق الحقيقة، لا العكس.
| الحالة | الجواب الصحيح | ملاحظة |
|---|---|---|
| الصفحة زالت نهائيًا ولا مكافئ لها | 404 أو 410 | لا بأس بصفحة خطأ مصممة، لكن يجب أن ترسل رمز الخطأ |
| انتقلت الصفحة إلى عنوان جديد | 301 (أو 308) إلى الصفحة الجديدة المكافئة | إشارة قوية بأن على Google معالجة الهدف |
| الانتقال مؤقت فعلًا | 302 (أو 307) | إشارة ضعيفة، فلا تستخدمه للانتقال الدائم |
| الصفحة موجودة لكنها رقيقة أو شبه فارغة | أضف محتوى حقيقيًا | أو احذفها إن لم تكن لها غاية |
| صفحة قائمة أو بحث فارغة بصورة دائمة | 404 | لا تضعها في الروابط ولا في خريطة الموقع |
| صفحة قائمة فارغة في الوقت الحالي فقط | اعرض شيئًا مفيدًا | مثل عناصر ذات صلة وملاحظة، برمز 200 |
| منتج زال نهائيًا | 404 أو 410، أو 301 إلى خليفته المباشر | وليس إلى الصفحة الرئيسية |
| منتج نفد مخزونه لفترة | احتفظ بالصفحة بمحتواها الحقيقي | الرمز 200 صحيح هنا |
يعتبر Google الرمزين 301 و308 إشارة قوية إلى وجوب معالجة هدف إعادة التوجيه، والرمزين 302 و307 إشارة ضعيفة. وهو يتبع افتراضيًا ما يصل إلى عشر خطوات إعادة توجيه ويتجاهل محتوى العنوان الذي يعيد التوجيه. لذا أعد التوجيه مرة واحدة، مباشرة إلى العنوان النهائي.
كيف تصلح Soft 404 في nginx وNode والتطبيقات أحادية الصفحة
nginx
تقدم هذه الإعدادات صفحة خطأ مصممة وتبقي الرمز 404. السطر error_page 404 /404.html; يبقي الرمز الأصلي ما لم تضف =200، فلا تضفه.
server {
root /var/www/example;
error_page 404 /404.html;
location / {
try_files $uri $uri/ =404;
}
location = /404.html {
internal;
}
# محذوفة عن قصد
location /old-campaign/ {
return 410;
}
# منقولة
location = /old-page {
return 301 https://example.com/new-page;
}
}
Node
في المسارات التي تعتمد على بيانات يجب أن تبحث الشيفرة عن السجل أولًا ثم تقرر الرمز. يستخدم هذا المثال وحدات Node الأصلية فقط:
import http from 'node:http';
const products = new Map([['blue-mug', 'Blue mug']]); // بديل عن قاعدة بياناتك
http.createServer((req, res) => {
const { pathname } = new URL(req.url, 'http://localhost');
const match = /^\/products\/([a-z0-9-]+)$/.exec(pathname);
const name = match && products.get(match[1]);
res.writeHead(name ? 200 : 404, { 'content-type': 'text/html; charset=utf-8' });
res.end(name ? `<h1>${name}</h1>` : '<h1>Page not found</h1>');
}).listen(3000);
يمكن أن تكون صفحة الخطأ ودودة ومصممة، ويبقى الرمز 404. في معظم أطر العمل دالة أو خطاف مخصص لحالة «غير موجود». ابحث عن الذي يضبط رمز الحالة، لا عن الذي يعرض قالبًا فقط.
التطبيقات أحادية الصفحة
يجب أن يعرف الخادم أي المسارات حقيقية. والاختصار الشائع «أرسل index.html لكل شيء» هو بالضبط ما يخلق المشكلة. في nginx يمكنك سرد المسارات الحقيقية والرد بـ 404 على الباقي:
location = / {
try_files /index.html =404;
}
location ~ ^/(about|contact|docs)/?$ {
try_files /index.html =404;
}
location / {
try_files $uri =404;
}
الكتلة الأخيرة تجد الملفات الثابتة مثل النصوص البرمجية والصور، وكل مسار آخر يحصل على 404. وإذا كانت قائمة المسارات طويلة أو تتغير كثيرًا فأنشئها من الموجه (router) عند البناء. والبديل أن تعتمد تصيير صفحات حقيقية على الخادم أو مسبقًا، فيكون لكل عنوان ملف HTML خاص به ويستطيع الخادم أن يجيب عنه. ويصف Google التصيير على الخادم أو التصيير المسبق بأنه فكرة جيدة، لأنه يجعل الصفحة أسرع للمستخدمين وللزواحف ولأن الروبوتات لا تنفذ كلها JavaScript. وللتطبيقات التي يتعذر فيها ضبط رمز الحالة أو يصعب ذلك، تذكر أساسيات JavaScript من Google طريقتين أخريين: إعادة التوجيه بـ JavaScript إلى عنوان يرد بالرمز 404 (مثل /not-found)، أو إضافة <meta name="robots" content="noindex"> بـ JavaScript في صفحات الخطأ.
بعد كل تغيير أعد تشغيل فحص curl، واختبر صفحة حقيقية وصفحة منقولة وعنوانًا لا يمكن أن يوجد.
الأخطاء الشائعة
- إصلاح الشكل لا الرمز. صفحة «غير موجودة» جميلة ترسل 200 تبقى Soft 404.
- إعادة توجيه كل الصفحات المفقودة إلى الصفحة الرئيسية. هذا يخفي المشكلة عن أدواتك أنت، ويعطي الزوار شيئًا غير ما طلبوه. أعد التوجيه إلى صفحة مكافئة، أو أرجع 404.
- الاختصارات مثل
error_page 404 =200 /index.html;. إنها تحول الرمز إلى 200 لكل عنوان مجهول. - الاختبار في المتصفح وحده. يبدو المتصفح واحدًا مع كل رمز. اقرأ رمز الحالة.
- حجب العناوين في robots.txt بدل إصلاح الرمز. الزاحف الذي لا يحق له جلب الصفحة لا يرى رمز حالتها أبدًا.
- ترك عناوين ميتة في خريطة الموقع. ينبغي ألا تذكر خريطة الموقع إلا صفحات موجودة وترد بالرمز 200.
- توقع أن يختفي البلاغ فورًا. يتغير الإدخال في Search Console حين يجلب Google العنوان من جديد، ولا أحد يستطيع أن يعد بموعد ذلك.
الأسئلة الشائعة
هل يضر Soft 404 بترتيبي في النتائج؟
لم يثبت ذلك. الموثق أن Google يبلغ عنه بوصفه خطأً في Search Console. أما عقوبة مباشرة على بقية موقعك فلا يذكرها أي مصدر استخدمناه. والقراءة المعقولة: أصلحه لأن الجواب خاطئ، لا من أجل مكسب موعود.
هل Soft 404 هو الشيء نفسه مثل 404 العادي؟
لا. 404 جواب صادق: الرمز يقول إن الصفحة غير موجودة. أما Soft 404 فيقول 200 بينما يقول المحتوى عكس ذلك.
هل أرسل 404 أم 410 في هذه الحالة؟
كلاهما رمز خطأ من فئة 4xx، ولا يستخدم Google محتوى العنوان مع أي منهما. الرمز 404 هو الجواب المعتاد عن «غير موجودة». أما 410 فيعني «زالت»، فيناسب الصفحات التي أزلتها عن قصد.
هل يمكنني استخدام صفحة 404 مخصصة؟
نعم، بل ينبغي ذلك. اختر تصميمها كما تشاء، وأضف رابطًا إلى الصفحة الرئيسية أو بحثًا، لكن تأكد أن الرمز هو 404.
كيف أفحص موقعي كله؟
ابدأ الفحص المجاني لتختبر كيف يجيب خادمك عن العناوين المجهولة، وانظر في تقرير Search Console عن العناوين التي وسمها Google. وافحص شيئًا آخر بيدك: الصفحات التي لا تحمل غير إشعار قصير.
خطوتك التالية
جرب curl على عنوان لا يمكن أن يوجد في موقعك. إذا لم تحصل على 404 فأصلح ذلك أولًا. ثم ابدأ الفحص المجاني عبر SEOgrinder، وابحث عن سطر Soft 404 في بطاقة «الفهرسة» ضمن تبويب «الصفحة في Google»، واضغط «إعادة التحقق» بعد تغييرك لترى النتيجة الجديدة.