Soft 404 error क्या है और इसे कैसे ठीक करें
संक्षिप्त उत्तर: Soft 404 error तब होता है जब कोई पेज आगंतुक को “नहीं मिला” (या लगभग कुछ नहीं) दिखाता है, पर सर्वर 404 की जगह सफलता का कोड 200 लौटाता है। Google इसे त्रुटि मानता है: जब किसी 2xx जवाब की सामग्री किसी गड़बड़ी की ओर इशारा करती है, तो Search Console soft 404 दर्ज करता है। सुधार यह है कि सर्वर वही स्टेटस भेजे जो सच के हिसाब से ठीक है: हट चुके पेजों के लिए 404 या 410, दूसरी जगह गए पेजों के लिए बराबर के पेज पर 301, और जिन पेजों को होना चाहिए उनके लिए असली सामग्री।
Soft 404 error क्या है?
वेब सर्वर का हर जवाब एक स्टेटस कोड से शुरू होता है, और यह कोड सामग्री से पहले आता है। 200 का मतलब है “ठीक है, यह रहा पेज”। 404 का मतलब है “यहाँ कुछ नहीं है”। Soft 404 error इन दोनों के बीच का बेमेल है: स्क्रीन पर पेज कहता है “नहीं मिला”, “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 error क्यों मायने रखता है?
पहले यह अलग कर लें कि क्या दर्ज है और क्या नहीं।
दर्ज है:
- Search Console ऐसे URL को soft 404 त्रुटि के रूप में गिनाता है, यानी Google ख़ुद इसे समस्या मानता है।
- असली 404 या 410 पर Google उस URL की सामग्री इस्तेमाल नहीं करता। 200 के मामले में आप Google पर छोड़ देते हैं कि वह सामग्री देखकर अंदाज़ा लगाए कि पेज त्रुटि है या नहीं।
दर्ज नहीं है: रैंकिंग पर सीधा असर। Google रिपोर्ट में त्रुटि का नाम लेता है। वह यह नहीं कहता कि एक soft 404 आपकी साइट के बाक़ी पेजों को नीचे खींचता है, और हमें ऐसा कोई स्रोत नहीं मिला जो इसे साबित करे। “soft 404 आपका SEO बर्बाद कर देते हैं” जैसे दावों पर शक कीजिए।
हमारी राय, इससे ज़्यादा कुछ नहीं: जिस पेज की कोई कीमत नहीं, उसे नतीजे के रूप में पेश नहीं होना चाहिए, और सुधार सस्ता है। एक व्यावहारिक पहलू भी है जिसका Google से कोई वास्ता नहीं: टूटे लिंक पकड़ने वाले टूल और uptime मॉनिटर स्टेटस कोड पढ़ते हैं। अगर हर पता 200 लौटाता है, तो वे आपको बता ही नहीं सकते कि कोई लिंक टूटा है, और पुराने लिंक पर आने वाले आगंतुक को कभी पता नहीं चलता कि पेज हट चुका है।
Soft 404 error की वजहें क्या होती हैं?
Soft 404 आम तौर पर इन तरीक़ों से बनते हैं:
- Single-page app जो हर पाथ पर एक ही ढाँचा लौटाती है। सर्वर किसी भी पते के लिए ऐप को स्टेटस 200 के साथ भेज देता है। JavaScript चलने के बाद ही स्क्रीन पर “नहीं मिला” आता है। स्टेटस उससे पहले ही तय हो चुका था, और वह 200 है। Google पेजों को चरणों में प्रोसेस करता है (क्रॉलिंग, रेंडरिंग, इंडेक्सिंग), और स्टेटस 200 वाला पेज रेंडरिंग की कतार में जाता है। यह मॉडल Google के JavaScript के बुनियादी दस्तावेज़ में समझाया गया है। जो क्रॉलर स्क्रिप्ट बिल्कुल चलाते ही नहीं, उनके लिए यह और बड़ी बात है: उन्हें सिर्फ़ ख़ाली ढाँचा मिलता है।
- स्टेटस 200 वाला सुंदर त्रुटि पेज। कोई CMS, फ़्रेमवर्क या प्रॉक्सी नियम “नहीं मिला” का डिज़ाइन किया हुआ टेम्पलेट दिखा देता है, पर स्टेटस सेट करना भूल जाता है। यह सबसे आसान मामला है।
- ख़ाली सूची वाले पेज। कोई कैटेगरी, टैग या आंतरिक खोज का पेज, जिसमें कोई प्रविष्टि नहीं, फिर भी 200 लौटाता है और “0 नतीजे” या ख़ाली ढाँचा दिखाता है।
- बिक चुके या बंद किए गए प्रोडक्ट। पेज बना रहता है और उसमें बस “उपलब्ध नहीं” लिखा होता है। जिस पेज पर अब भी असली विवरण और उपलब्धता की जानकारी है, वह सिर्फ़ एक सूचना वाले पेज से अलग मामला है।
- सब कुछ होम पेज पर रीडायरेक्ट कर देना। जो पेज हटा दिया गया और उसके आगंतुकों को होम पेज पर भेज दिया गया, वह असंबंधित सामग्री के साथ 200 पर ख़त्म होता है। होम पेज शायद ही कभी उस पेज का बराबर विकल्प होता है जो ग़ायब हुआ।
एक और वजह पतला पेज है: लगभग बिना सामग्री का टेम्पलेट, जैसे प्लेसहोल्डर या अधूरा बना हिस्सा। जो सामग्री त्रुटि संदेश या ख़ाली पेज जैसी दिखती है, उस पर निशान लग सकता है, भले ही किसी ने उसे त्रुटि पेज बनाना न चाहा हो।
Soft 404 error कैसे ढूँढें?
तीन रास्ते हैं, और वे एक-दूसरे के पूरक हैं।
- Search Console। “Page indexing” रिपोर्ट खोलिए और कारण “Soft 404” ढूँढिए। वहाँ वे URL मिलेंगे जिन्हें Google ने ख़ुद इस खाने में रखा है। URL inspection टूल दिखाता है कि किसी एक पते से 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, cache या फ़ायरवॉल जवाब बदल सकता है।
SEOgrinder soft 404 error को कैसे जाँचता है
SEOgrinder का मुफ़्त स्कैन आपकी साइट से एक ऐसा पता माँगता है जिसे वह ख़ुद गढ़ता है, एक बेतरतीब नाम के साथ जो मौजूद हो ही नहीं सकता। अगर जवाब 200 आता है, तो वह एक नतीजा दर्ज करता है। अगर वह पता होम पेज पर रीडायरेक्ट होता है, तो वह भी वही नतीजा गिना जाता है, क्योंकि उसका अंत भी 200 पर होता है। नतीजा “Google पर पेज” टैब में, “इंडेक्सिंग” कार्ड में, एक पंक्ति के रूप में दिखता है: “अनजान पते सही ढंग से 404 लौटाते हैं”, या “अनजान पते 404 की जगह 200 लौटाते हैं”। नतीजा कार्य-सूची में इस सलाह के साथ जुड़ जाता है कि असली 404 या 410 लौटाइए।
दो ईमानदार सीमाएँ। पहली: यह जाँच बताती है कि आपका सर्वर उन पतों को कैसे सँभालता है जो मौजूद नहीं हैं। यह नहीं बताती कि आपके असली URL में से किन्हें Google ने soft 404 के रूप में दर्ज किया है। अलग-अलग URL का फ़ैसला Search Console में है। अगर आपने SEOgrinder अपने कंप्यूटर पर चलाया है और वह Search Console से जुड़ा है, तो वह जाँचे गए पेज की सहेजी हुई इंडेक्स-स्थिति भी पढ़ता है और बताता है कि Google उसे soft 404 के रूप में गिनाता है। दूसरी: जाँच यह नहीं बता सकती कि आपका कोई पतला पेज Google को ख़ाली लगता है या नहीं। वेबसाइट क्रॉल पतले पेज और टूटे आंतरिक लिंक ज़रूर दर्ज करता है, और अक्सर समस्या वहीं से शुरू होती है।
कौन-सा स्टेटस कोड सही है? फ़ैसले की तालिका
सही जवाब इस पर टिका है कि पेज के बारे में सच क्या है। स्टेटस को सच के हिसाब से बदलिए, उल्टा नहीं।
| स्थिति | सही जवाब | टिप्पणी |
|---|---|---|
| पेज हमेशा के लिए हट गया है, कोई बराबर का विकल्प नहीं | 404 या 410 | डिज़ाइन किया हुआ त्रुटि पेज चलेगा, पर उसे त्रुटि वाला स्टेटस भेजना ही होगा |
| पेज नए पते पर चला गया है | बराबर के नए पेज पर 301 (या 308) | मज़बूत संकेत कि Google को लक्ष्य पेज प्रोसेस करना चाहिए |
| बदलाव सचमुच अस्थायी है | 302 (या 307) | कमज़ोर संकेत, इसलिए स्थायी बदलाव के लिए नहीं |
| पेज है, पर पतला या लगभग ख़ाली है | असली सामग्री जोड़िए | या हटा दीजिए, अगर उसका कोई मक़सद नहीं |
| कोई सूची या खोज का पेज, जो हमेशा के लिए ख़ाली है | 404 | उसे लिंक या साइटमैप में मत दीजिए |
| कोई सूची का पेज, जो अभी के लिए ख़ाली है | कुछ काम की चीज़ दिखाइए | जैसे मिलती-जुलती प्रविष्टियाँ और एक सूचना, स्टेटस 200 के साथ |
| ऐसा प्रोडक्ट जो हमेशा के लिए हट गया | 404 या 410, या उसके सीधे उत्तराधिकारी पर 301 | होम पेज पर नहीं |
| ऐसा प्रोडक्ट जो कुछ समय के लिए स्टॉक में नहीं | पेज को उसकी असली सामग्री के साथ रखिए | यहाँ स्टेटस 200 सही है |
Google 301 और 308 को इस बात का मज़बूत संकेत मानता है कि रीडायरेक्ट के लक्ष्य को प्रोसेस किया जाए, और 302 व 307 को कमज़ोर संकेत। वह डिफ़ॉल्ट रूप से दस रीडायरेक्ट कदम तक पीछा करता है और रीडायरेक्ट करने वाले URL की सामग्री को अनदेखा कर देता है। इसलिए एक ही बार रीडायरेक्ट कीजिए, सीधे अंतिम पते पर।
nginx, Node और single-page app में soft 404 error कैसे ठीक करें
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', 'नीला मग']]); // आपके डेटाबेस की जगह एक नमूना
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>पेज नहीं मिला</h1>');
}).listen(3000);
त्रुटि पेज मिलनसार और डिज़ाइन वाला हो सकता है, और स्टेटस फिर भी 404 रहता है। ज़्यादातर फ़्रेमवर्क में इसी काम के लिए “not found” का कोई फ़ंक्शन या hook होता है। वह वाला चुनिए जो स्टेटस सेट करता है, सिर्फ़ टेम्पलेट नहीं दिखाता।
Single-page app
सर्वर को पता होना चाहिए कि कौन-से पाथ असली हैं। आम शॉर्टकट, “हर चीज़ के लिए 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 मिलता है। अगर रूट की सूची लंबी है या बार-बार बदलती है, तो उसे build के समय अपने राउटर से बनवा लीजिए। दूसरा रास्ता है असली पेज सर्वर पर या पहले से तैयार करना, ताकि हर पते की अपनी HTML फ़ाइल हो और सर्वर उसके लिए जवाब दे सके। Google ख़ुद server-side rendering या pre-rendering को अच्छा विचार कहता है, क्योंकि इससे पेज उपयोगकर्ताओं और क्रॉलरों दोनों के लिए तेज़ होता है और इसलिए भी कि सभी बॉट JavaScript नहीं चलाते। जिन ऐप्स में स्टेटस कोड सेट करना असंभव या अव्यावहारिक है, उनके लिए Google के JavaScript के बुनियादी दस्तावेज़ दो और रास्ते बताते हैं: JavaScript से किसी ऐसे पते पर रीडायरेक्ट कीजिए जो 404 लौटाता है (जैसे /not-found), या त्रुटि पेजों पर JavaScript से <meta name="robots" content="noindex"> जोड़िए।
हर बदलाव के बाद curl वाली जाँच दोबारा चलाइए, और एक असली पेज, एक दूसरी जगह गया पेज और एक ऐसा पता जो हो ही नहीं सकता, तीनों परखिए।
आम ग़लतियाँ
- स्टेटस की जगह डिज़ाइन ठीक करना। स्टेटस 200 भेजने वाला ख़ूबसूरत “नहीं मिला” पेज फिर भी soft 404 ही है।
- सारे ग़ायब पेज होम पेज पर भेज देना। इससे समस्या आपके अपने टूल से छिप जाती है और आगंतुक को वह नहीं मिलता जो उसने माँगा था। बराबर के पेज पर रीडायरेक्ट कीजिए, या 404 दीजिए।
error_page 404 =200 /index.html;जैसे शॉर्टकट। ये हर अनजान पते का स्टेटस 200 कर देते हैं।- सिर्फ़ ब्राउज़र में जाँचना। ब्राउज़र हर स्टेटस पर एक जैसा दिखता है। स्टेटस पढ़िए।
- स्टेटस ठीक करने की जगह पतों को robots.txt में रोक देना। जिस क्रॉलर को पेज माँगने की इजाज़त नहीं, वह उसका स्टेटस कोड कभी देख ही नहीं पाता।
- मरे हुए पते साइटमैप में छोड़ देना। साइटमैप में सिर्फ़ वे पेज होने चाहिए जो मौजूद हैं और 200 लौटाते हैं।
- उम्मीद करना कि रिपोर्ट तुरंत साफ़ हो जाएगी। Search Console की प्रविष्टि तब बदलती है जब Google उस URL को दोबारा माँगता है। यह कब होगा, कोई वादा नहीं कर सकता।
अक्सर पूछे जाने वाले सवाल
क्या soft 404 error मेरी रैंकिंग को नुक़सान पहुँचाता है?
प्रमाणित नहीं। Google उसे Search Console में त्रुटि के रूप में दर्ज करता है, यह दर्ज है। आपकी बाक़ी साइट पर सीधी रैंकिंग-सज़ा हमारे इस्तेमाल किए किसी स्रोत में नहीं मिलती। समझदारी भरी सोच यह है: इसे इसलिए ठीक कीजिए कि जवाब ग़लत है, किसी वादा किए गए फ़ायदे के लिए नहीं।
क्या soft 404 और 404 एक ही चीज़ हैं?
नहीं। 404 ईमानदार जवाब है: स्टेटस कहता है कि पेज मौजूद नहीं। Soft 404 में स्टेटस 200 कहता है और सामग्री उसका उलटा।
मुझे 404 भेजना चाहिए या 410?
दोनों 4xx त्रुटि वाले स्टेटस हैं, और दोनों पर Google उस URL की सामग्री इस्तेमाल नहीं करता। “नहीं मिला” का आम जवाब 404 है। 410 का मतलब है “हमेशा के लिए गया”, इसलिए यह उन पेजों पर बैठता है जिन्हें आपने जान-बूझकर हटाया।
क्या मैं अपना ख़ुद का 404 पेज रख सकता हूँ?
हाँ, और रखना भी चाहिए। उसे जैसा चाहें डिज़ाइन कीजिए, होम पेज या खोज का लिंक जोड़िए, पर पक्का कीजिए कि स्टेटस 404 हो।
पूरी साइट कैसे जाँचूँ?
मुफ़्त स्कैन चलाइए, यह देखने के लिए कि आपका सर्वर अनजान पतों का जवाब कैसे देता है, और Search Console रिपोर्ट में वे URL देखिए जिन पर Google ने निशान लगाया है। एक चीज़ हाथ से भी देखिए: वे पेज जिन पर सिर्फ़ एक छोटी-सी सूचना है।
आपका अगला कदम
अपनी ही साइट पर किसी ऐसे पते के लिए curl चलाइए जो हो नहीं सकता। अगर 404 न मिले, तो पहले उसे ठीक कीजिए। फिर SEOgrinder से मुफ़्त स्कैन चलाइए, “Google पर पेज” टैब के “इंडेक्सिंग” कार्ड में soft 404 वाली पंक्ति ढूँढिए, और बदलाव के बाद दोबारा जाँचें दबाकर नया नतीजा देखिए। पूरी साइट के बाक़ी बिंदुओं के लिए SEO audit checklist भी काम आएगी।