یک صبح یک ایمیل از مشتری می‌رسد: «نیمی از لینک‌های سایت من کار نمی‌کند.» وارد Google Search Console می‌شوم، بخش Coverage را باز می‌کنم و ده‌ها خطای 404 به چشم می‌خورد؛ همه از یک دستهٔ مقالاتی که دو ماه پیش، بی‌سروصدا از ساختار پیوند سایت حذف شده. تجربه‌ام می‌گوید پشت هر موج خطای 404 در وردپرس، یکی از پنج علت مشخص قرار دارد. اگر این پنج علت را بشناسید، رفع مشکل معمولاً کمتر از یک ساعت طول می‌کشد؛ اگر نشناسید، ممکن است روزها به دنبال مقصر بگردید و در همین فاصله، رتبه‌هایتان در گوگل آب برود.

خطای 404 در وردپرس دقیقاً چیست؟

وقتی مرورگر صفحه‌ای را از سرور درخواست می‌کند، سرور با یک کد وضعیت (Status Code) پاسخ می‌دهد. این کدها بخشی از پروتکل HTTP (HyperText Transfer Protocol) هستند؛ همان پروتکلی که تبادل داده در وب روی آن بنا شده. کد 200 یعنی «یافتم و آوردم»، کد 301 یعنی «محتوا جابه‌جا شده و به نشانی تازه برو»، و کد 404 یعنی «این نشانی روی سرور من وجود ندارد». تعریف رسمی این کدها در RFC 9110 نگهداری می‌شود و همهٔ سرورها موظف به پیروی از آن هستند.

نکته‌ای که در جلسه‌های مشاوره زیاد تکرار می‌کنم: خطای 404 در وردپرس فقط «یک پیام تزئینی» نیست؛ یک سیگنال مستقیم به گوگل و به کاربر است. از نگاه کاربر، صفحه‌ای که باز نمی‌شود حس «سایت خراب است» را منتقل می‌کند. از نگاه گوگل، هر 404 یعنی «بودجه خزش (Crawl Budget) هدر رفت» و اگر انبوه شود، رتبه‌های موجود را هم می‌خورد — این رابطه در سئو تکنیکال چیست با جزئیات بیشتر باز شده است.

وردپرس هوشمندانه رفتار می‌کند: اگر فایلی روی سرور نباشد، خود مرورگر پیام عمومی نشان می‌دهد؛ اما اگر پیوند یک نوشته یا برگه حذف شده باشد، وردپرس قالب 404.php قالب فعال را برای نمایش صفحه پیدا نشد فراخوانی می‌کند. این صفحه در اکثر قالب‌های آماده واقعاً زشت و بی‌فایده است؛ فقط می‌گوید «چیزی یافت نشد» و لینکی به خانه نمی‌گذارد. یکی از اولین کارهایی که در بهینه‌سازی هر سایت پیشنهاد می‌کنم، بازنویسی همین فایل است.

تفاوت 404 با 410 و آنچه Soft 404 نامیده می‌شود

پیش از رفتن سراغ علت‌ها، تفکیک سه مفهوم لازم است؛ چون در نود درصد پروژه‌ها، این سه با هم قاطی می‌شوند و درمان را خراب می‌کنند.

  • 404 Not Found: صفحه امروز نیست، ولی ممکن است فردا برگردد. مثلاً نوشته‌ای که موقتاً برداشته شده.
  • 410 Gone: صفحه برای همیشه حذف شده و قصد بازگرداندنش نیست. تفاوت ظریفش با 404 این است که گوگل سریع‌تر نشانی را از فهرستش می‌اندازد. برای محتوایی که واقعاً برای همیشه رفته، 410 انتخاب مؤدبانه‌تری است.
  • Soft 404: بدترین نوع. صفحه با کد 200 به کاربر نشان داده می‌شود، ولی محتوا خالی یا خطای واقعی است. گوگل در گزارش‌ها آن را «خطای نرم» علامت می‌زند چون کاربر را فریب می‌دهد. اگر در Search Console گزینهٔ «Soft 404» را دیدید، مشکل معمولاً از قالب است نه از سرور.

یک اشتباه رایج: بعضی مدیران سایت، با افزونه‌های سئو همهٔ 404 ها را به صفحهٔ اصلی ریدایرکت می‌کنند. این کار در نگاه اول «مشکل را حل می‌کند»، ولی در واقع سیگنال اشتباهی به گوگل می‌فرستد — چون به گوگل می‌گویید «همهٔ این نشانی‌ها در واقع یک صفحه هستند». نتیجه‌اش کاهش اعتماد و افت رتبه است. برای درک چرایی، مقالهٔ سئو چیست و چگونه به رشد سایت کمک می‌کند را بخوانید.

404 پاسخ درست به یک محتوای نبوده است؛ 410 پاسخ محترمانه به محتوایی است که دیگر نیست. تفاوت این دو را در سیاست محتوایی سایتتان مشخص کنید تا گوگل هم بفهمد.

پنج علت رایج خطای 404 در وردپرس

در تجربه‌ام، این پنج علت بیشترین سهم را دارند:

  1. خرابی پیوندهای یکتا (Permalinks): اگر فایل .htaccess بازنویسی نشده یا قواعد آن پاک شده باشد، تمام نشانی‌ها به‌جز صفحهٔ اصلی 404 می‌شوند. سریع‌ترین تشخیص: در پیشخوان به تنظیمات ← پیوندهای یکتا بروید و بدون تغییر، روی «ذخیره تغییرات» کلیک کنید. در نود درصد موارد، مشکل همین‌جا حل می‌شود.
  2. تغییر ساختار URL: اگر نامک نوشته‌ها را از حالت پیش‌فرض ?p=123 به «نام نوشته» تغییر داده‌اید و لینک قدیمی ریدایرکت نشده، همهٔ نشانی‌های قدیمی 404 می‌شوند.
  3. حذف برگه یا نوشته بدون ریدایرکت: ساده‌ترین و شایع‌ترین علت. کاربری محتوایی را که در گوگل رتبه داشته پاک می‌کند، بدون آنکه به صفحهٔ معادل ریدایرکت بزند.
  4. جابه‌جایی دسته‌بندی یا تغییر نامک دسته: ساختار نشانی دسته‌بندی را در تنظیمات عوض کرده‌اید و آرشیوهای قدیمی 404 می‌شوند.
  5. مسائل سطح سرور و DNS: اگر حتی صفحهٔ اصلی هم 404 می‌شود، مشکل از وردپرس نیست. مسئله در سطح سرور، پیکربندی Nginx/Apache یا DNS (Domain Name System) است — مسیر عیب‌یابی در عیب‌یابی مشکلات DNS آمده است.

جدول زیر برای تشخیص سریع، در جلسه‌های عیب‌یابی کمک زیادی کرده است:

نشانهمحتمل‌ترین علتاولین اقدام
همه صفحات 404 می‌شوندپیوندهای یکتا یا .htaccessذخیرهٔ مجدد تنظیمات پیوندهای یکتا
فقط نوشته‌ها و برگه‌ها 404 می‌شوندتغییر نامک یا حذف محتواثبت ریدایرکت 301 از URL قدیمی به جدید
فقط آرشیو دسته‌بندی‌ها 404 می‌شودتغییر اسلاگ دستهریدایرکت آرشیو یا بازگرداندن اسلاگ
حتی صفحهٔ اصلی 404 استپیکربندی سرور یا DNSبررسی .htaccess و لاگ سرور
خطای «Soft 404» در Search Consoleمشکل قالب یا صفحهٔ خالیبازبینی 404.php و برگه‌های خالی

چطور 404 ها را پیدا کنیم؟

رفع خطا بدون داشتن نقشهٔ دقیق، مثل درمان بیماری بدون تشخیص است. سه ابزار در جعبه‌ابزار من همیشه حاضرند:

  • Google Search Console: بخش Indexing ← Pages دقیق‌ترین گزارش 404 را می‌دهد، چون بر پایهٔ داده‌های واقعی خزش گوگل است. رایگان، سریع و مؤثق.
  • Screaming Frog SEO Spider: نسخهٔ رایگانش تا ۵۰۰ نشانی را می‌خزد. برای پیدا کردن 404 های داخلی، بهترین ابزار است.
  • افزونهٔ ریدایرکت: یک افزونهٔ مدیریت ریدایرکت مثل Redirection یا Safe Redirect Manager، همهٔ خطاها را در لحظه ثبت می‌کند. انتخاب درست در بهترین افزونه‌های ریدایرکت وردپرس تحلیل شده است.

یک عادت مفید: هر شنبه، ده دقیقهٔ اول کاری را به مرور گزارش 404 اختصاص دهید. در چند پروژه دیده‌ام که با همین عادت کوچک، از افت‌های بزرگ جلوگیری شده؛ چون قبل از آنکه مسئله انبوه شود، یک ریدایرکت ساده مشکل را می‌بندد.

یک 404 که در لحظه ثبت شود، یک ریدایرکت پنج‌ثانیه‌ای است؛ همان 404 اگر سه ماه بی‌مراقب بماند، به یک پروژهٔ بازسازی محتوا تبدیل می‌شود.

رفع خطای 404: راه‌حل‌های گام‌به‌گام

بسته به علت، یکی از این چهار مسیر را انتخاب کنید:

روش اول: ذخیرهٔ مجدد پیوندهای یکتا

ساده‌ترین و مؤثرترین درمان برای 404 های سراسری. مسیر: پیشخوان ← تنظیمات ← پیوندهای یکتا ← ذخیره تغییرات. این کار قواعد بازنویسی را در دیتابیس بازتولید می‌کند و فایل .htaccess را دوباره می‌نویسد. اگر مشکل حل شد، مقصر پیکربندی بوده؛ اگر حل نشد، سراغ فایل .htaccess بروید و مطمئن شوید بلوک وردپرس در آن وجود دارد (بلوکی که با # BEGIN WordPress شروع و با # END WordPress تمام می‌شود).

روش دوم: ریدایرکت 301

برای محتوایی که از یک نشانی به نشانی دیگری جابه‌جا شده، ریدایرکت 301 (Moved Permanently) استانداردِ درست است. با افزونهٔ ریدایرکت انجام دهید — نه با کدی که بعد از مدتی فراموش می‌شود. الگوی کلی: نشانی قدیم ← نشانی جدید، کد 301، بدون هیچ استثنا. اگر تعداد ریدایرکت‌ها زیاد است و می‌خواهید در فایل .htaccess بنویسید، الگو این است:

Redirect 301 /old-article/ https://example.com/new-article/

در ریدایرکت‌ها، سه اصل را رعایت کنید: به نشانی مقصدِ دقیق اشاره کنید (نه به صفحهٔ اصلی)، از زنجیرهٔ چند پله‌ای (A به B، B به C) خودداری کنید، و ریدایرکت‌های موقت را با کد 302 از دائمی جدا نگه دارید.

روش سوم: بازگردانی از بکاپ

اگر محتوایی که حذف شده ارزش سئویی بالایی دارد و جایگزین معقولی برایش نیست، بازگردانی از بکاپ منطقی‌تر از ریدایرکت است. مسیر امن در چگونه از سایت وردپرسی بکاپ بگیریم گام‌به‌گام آمده است. یک هشدار: هرگز کل دیتابیس را برای بازگرداندن یک نوشته روی سایت زندهٔ فعال بازنمی‌گردانید؛ فقط جدول مربوط به نوشته‌ها را بازیابی یا نوشته را دستی بازسازی کنید.

روش چهارم: بازنویسی .htaccess

اگر حتی صفحهٔ اصلی 404 می‌دهد، احتمالاً فایل .htaccess خراب شده یا پاک شده است. قبل از هر تغییر، نسخهٔ پشتیبان بگیرید. سپس محتوای پیش‌فرض وردپرس را با احتیاط جایگزین کنید — فقط بلوک وردپرس را، نه کل فایل. تغییرات را از مسیر «ابزارها ← سلامت سایت» یا با مرور صفحهٔ اصلی، تأیید کنید.

اگر پس از همهٔ این مراحل باز هم مشکل پابرجا بود، احتمال تعارض افزونه یا قالب وجود دارد. مسیر عیب‌یابی این حالت در روش پیدا کردن افزونه یا قالب مشکل‌ساز توضیح داده شده و چک‌لیست جامع خطاهای وردپرس در راهنمای جامع رفع خطاهای رایج وردپرس آماده است. اگر 404 پس از تغییر قالب ظاهر شد، پروتکل بازگشت امن در تغییر قالب وردپرس بدون آسیب توضیح داده شده است.

اشتباهات رایج در مواجهه با 404

سه اشتباه که در پروژه‌های واقعی مکرر دیده‌ام و هر کدامشان می‌تواند یک مشکل کوچک را به بحران تبدیل کند:

  • ریدایرکت همهٔ 404 ها به صفحهٔ اصلی: همان‌طور که پیش‌تر گفتم، این کار سیگنال اشتباه به گوگل می‌دهد و Soft 404 می‌سازد.
  • استفاده از ریدایرکت 302 برای جابه‌جایی دائمی: کد 302 یعنی «موقت»، و گوگل وزن نشانی قدیمی را به مقصد جدید منتقل نمی‌کند. این خطا در پروژه‌های بازطراحی بسیار شایع است.
  • زنجیرهٔ ریدایرکت چندپله‌ای: اگر نشانی A به B، و B به C ریدایرکت شود، هر کلیک دو پرش دارد. این هم تجربهٔ کاربر و هم بودجهٔ خزش را می‌سوزاند.

و یک اشتباه ظاهراً بی‌ربط اما مهم: فراموش‌کردن اینکه خطای 404 فقط یک «بعد سئویی» ندارد. اگر در بلاگ خودتان، لینک‌های داخلی به 404 اشاره کنند، همهٔ آن‌ها بودجهٔ خزش را می‌خورند. عادت سالم این است که پیش از هر انتشار، لینک‌های داخلی را یک بار تست کنید. راهنمای رفع خطای لینک‌های وردپرس دقیقاً همین موضوع را دنبال می‌کند.

پیشگیری از 404 های آینده

سه عادت ساده که در پروژه‌هایم همیشه اجرا می‌کنم:

  1. قبل از تغییر نامک، بررسی لینک‌های ورودی: در Search Console، بخش Performance، روی نوشته‌ای که می‌خواهید نامکش را عوض کنید کلیک کنید و ببینید چند بازدید ارگانیک دارد. اگر بالا بود، برایش ریدایرکت بگذارید و بعد نامک را تغییر دهید.
  2. نصب افزونهٔ مانیتورینگ 404 از روز اول: یک افزونهٔ سبک که خطاها را ثبت کند و هفته‌ای یک بار به آن سر بزنید.
  3. طراحی صفحهٔ 404 کاربردی: به‌جای «چیزی یافت نشد»، کادر جستجو، لینک به نوشته‌های اخیر و دعوت به تماس بگذارید — همان چیزی که در مقالهٔ امکانات یک قالب حرفه‌ای به‌عنوان یکی از نشانه‌های قالب بالغ معرفی کرده‌ام.

و یادآوری همیشگی: هر تغییر در ساختار پیوند، هر جابه‌جایی محتوا و هر حذف برگه، یک ریسک 404 است. عادت کنید پیش از هر تغییر، یک فهرست مقدماتی از ریدایرکت‌های لازم روی کاغذ بنویسید. این کار در پروژه‌ای که برایش راهنمای انتخاب قالب برای سایت‌های مختلف را تهیه کرده بودم، تفاوت بین مهاجرت بدون افت و مهاجرت با افت ده‌درصدی ترافیک بود.

پایان این پرونده

خطای 404 در وردپرس، به‌خودی‌خود فاجعه نیست؛ فاجعه آن است که ماه‌ها بی‌مراقب بماند. با شناخت پنج علت رایج، سه ابزار تشخیص و چهار مسیر رفع، هر موج 404 در کمتر از یک ساعت به وضعیت پایدار برمی‌گردد. اگر در سمت مقابل ایستاده‌اید — یعنی خطای 404 ای داشته‌اید که با هیچ‌کدام از این روش‌ها حل نشده — احتمالاً با یکی از موارد نادرِ سطح سرور طرفید؛ آن تجربه را در دیدگاه بنویسید تا در نسخه‌های بعدی همین راهنما، به آن الگوی خاص هم بپردازیم. 🔍