آموزش تغییر وضعیت صفحات 404 به 410 در وردپرس
اگر در گوگل سرچ کنسول خود با تعداد زیادی خطای 404 مواجه شدهاید که مربوط به صفحاتی است که قبلاً در سایت شما وجود داشتهاند اما حالا حذف شدهاند، یا اگر سایت شما مورد حمله هکری قرار گرفته و صفحات اسپم زیادی به آن اضافه شده است (مانند حملات معروف هک ژاپنی یا هک فارسی) که با پاکسازی آنها، تعداد زیادی خطای Not Found در سرچ کنسول ایجاد شده، این مقاله مخصوص شماست. در این آموزش از مجموعه مقالات آموزشی وردپرس، به شما نشان میدهیم که چگونه با استفاده از یک کد اختصاصی در فایل functions.php، وضعیت تمام صفحات 404 را به 410 Gone تغییر دهید تا به موتورهای جستجو بفهمانید که این صفحات به طور دائمی حذف شدهاند و دیگر نیازی به خزش آنها نیست. این کار به بهبود سئو، پاکسازی ایندکس گوگل و مدیریت خطاهای سرچ کنسول کمک شایانی میکند و در شرایط بحرانی مانند هک گسترده، میتواند بودجه خزش سایت شما را نجات دهد.
تفاوت وضعیت 404 و 410 و تأثیر آن بر سئو و بودجه خزش
پیش از آنکه به سراغ کد برویم، بهتر است با مفهوم این دو وضعیت HTTP آشنا شویم. وضعیت 404 Not Found به موتورهای جستجو و مرورگرها میگوید که صفحه درخواستی در سرور یافت نشد، اما این وضعیت لزوماً به معنای حذف دائمی نیست و ممکن است صفحه در آینده بازگردد. در مقابل، وضعیت 410 Gone یک سیگنال قویتر و قطعیتر است که به صراحت به موتورهای جستجو اعلام میکند که صفحه درخواستی قبلاً وجود داشته اما اکنون به طور دائمی و عمدی حذف شده است و هرگز باز نخواهد گشت. تفاوت اصلی این دو وضعیت در سرعت خروج از ایندکس گوگل است. صفحاتی که وضعیت 410 دریافت میکنند، سریعتر از صفحاتی که وضعیت 404 دارند، از ایندکس گوگل حذف میشوند. اگرچه جان مولر از گوگل اعلام کرده است که تفاوت این دو وضعیت از نظر سئو بسیار ناچیز است، اما استفاده از وضعیت 410 برای صفحاتی که واقعاً و برای همیشه حذف شدهاند، از نظر فنی دقیقتر و صحیحتر است. به ویژه در شرایطی که با حجم بالایی از صفحات اسپم یا حذف شده مواجه هستید، استفاده از 410 میتواند به پاکسازی سریعتر ایندکس گوگل کمک کند و از اتلاف بودجه خزش جلوگیری نماید.
راهکار تغییر وضعیت 404 به 410 در وردپرس
برای تغییر وضعیت تمام صفحات 404 به 410 در وردپرس، دو روش کلی وجود دارد: استفاده از افزونههای آماده مانند Gone Response یا 410 Response Manager، و یا استفاده از کد اختصاصی در فایل functions.php. استفاده از افزونه برای کاربرانی که آشنایی با کدنویسی ندارند، گزینه مناسبی است، اما اگر به دنبال یک راهکار سبکتر، سریعتر و قابل شخصیسازی هستید، کد اختصاصی بهترین انتخاب است. کدی که در این مقاله ارائه میشود، با استفاده از هوک template_redirect و تابع status_header()، وضعیت تمام صفحاتی که به صفحه 404 هدایت میشوند را به 410 Gone تغییر میدهد. این کد بسیار سبک است و هیچ بار اضافی بر روی سایت وارد نمیکند و با تمامی قالبهای وردپرس سازگاری دارد.
کد کامل تغییر وضعیت 404 به 410 در وردپرس
در زیر کد کامل و بهینهشده برای تغییر وضعیت 404 به 410 در وردپرس آورده شده است. این کد را در انتهای فایل functions.php قالب فرزند خود قرار دهید.
/*
* Change WordPress 404 Status to 410 Gone for All Missing Pages
* Sends 410 HTTP status for all 404 errors to signal permanent removal to search engines
* Mahdi Jafarzadeh
* https://www.wpwm.ir/
*/
function wp_convert_404_to_410() {
global $wp_query;
// Check if current page is a 404
if (is_404()) {
// Set HTTP status to 410 Gone
status_header(410);
// CRITICAL: Uncomment the line below ONLY if you have thousands of spam/404 pages
// and want to completely avoid loading any template (saves crawl budget)
// $wp_query->is_404 = false;
}
}
add_action('template_redirect', 'wp_convert_404_to_410');نحوه عملکرد کد به صورت گام به گام
در این بخش، هر بخش از کد را به صورت دقیق بررسی میکنیم و نحوه عملکرد آن را توضیح میدهیم:
- تعریف تابع
wp_convert_404_to_410()(خطوط ۸ تا ۱۸): این تابع هسته اصلی کد است و وظیفه تغییر وضعیت صفحات 404 به 410 را بر عهده دارد. نام تابع به صورت استاندارد و مرتبط با عملکرد آن انتخاب شده است. - دسترسی به شیء
$wp_queryسراسری (خط ۹): با استفاده از دستورglobal $wp_query;به شیء سراسری استعلام وردپرس دسترسی پیدا میکنیم. این شیء حاوی اطلاعات کامل درباره درخواست فعلی و وضعیت آن است. - بررسی وضعیت 404 با
is_404()(خط ۱۲): با استفاده از تابع شرطیis_404()بررسی میکنیم که آیا صفحه درخواستی یک خطای 404 است یا خیر. اگر شرط برقرار باشد، وارد بدنه شرط میشویم. - تنظیم وضعیت 410 با
status_header(410)(خط ۱۴): با استفاده از تابعstatus_header()، هدر HTTP پاسخ را به 410 Gone تغییر میدهیم. این تابع وظیفه ارسال کد وضعیت صحیح را به مرورگر و موتورهای جستجو بر عهده دارد. - خط ۱۸ (بسیار مهم) –
$wp_query->is_404 = false;: این خط در کد به صورت کامنت شده است و توضیح آن نیاز به دقت ویژه دارد. در نسخههای قدیمیتر این کد، این خط به صورت فعال وجود داشت و وضعیت 404 را به false تغییر میداد. اما این کار دو پیامد متفاوت دارد:- حالت اول (خط کامنت شده – پیشفرض): اگر این خط را کامنت نگه دارید، وردپرس همچنان صفحه را به عنوان یک 404 تشخیص میدهد و تمپلیت 404 قالب شما (فایل
404.php) بارگذاری میشود. با این حال، هدر HTTP که به مرورگر و موتورهای جستجو ارسال میشود، 410 خواهد بود. در این حالت، کاربران همچنان پیام صفحه پیدا نشد را مشاهده میکنند و تجربه کاربری حفظ میشود، در حالی که موتورهای جستجو وضعیت 410 را دریافت میکنند. این حالت برای اکثر سایتها مناسب است. - حالت دوم (خط فعال): اگر این خط را از حالت کامنت خارج کنید (یعنی
$wp_query->is_404 = false;فعال شود)، وردپرس دیگر صفحه را به عنوان 404 تشخیص نمیدهد و در نتیجه تمپلیت 404 بارگذاری نمیشود. در عوض، صفحه کاملاً خالی بارگذاری میشود و تنها هدر 410 به موتورهای جستجو ارسال میگردد. این حالت در شرایط خاصی مانند زمانی که سایت شما با هک گسترده مواجه شده و هزاران صفحه اسپم به آن اضافه شده است، بسیار مفید است. زیرا بارگذاری تمپلیت 404 برای هزاران درخواست، میتواند منابع سرور را به شدت مصرف کرده و بودجه خزش سایت را به هدر دهد. با فعال کردن این خط، فقط یک پاسخ 410 خالص ارسال میشود که سبکترین و بهینهترین حالت ممکن است و به کاهش بار سرور و بهینهسازی بودجه خزش کمک میکند.
- حالت اول (خط کامنت شده – پیشفرض): اگر این خط را کامنت نگه دارید، وردپرس همچنان صفحه را به عنوان یک 404 تشخیص میدهد و تمپلیت 404 قالب شما (فایل
- افزودن به هوک
template_redirect(خط ۱۹): با استفاده ازadd_action('template_redirect', 'wp_convert_404_to_410');تابع ما را به هوکtemplate_redirectمتصل میکنیم. این هوک درست قبل از بارگذاری قالب صفحه اجرا میشود و زمان مناسبی برای تغییر وضعیت HTTP است.
نکات مهم
در این بخش به نکات کلیدی و مهم درباره تغییر وضعیت 404 به 410 در وردپرس اشاره میکنیم که باید به آنها توجه ویژهای داشته باشید:
- استفاده از قالب فرزند: کد را در فایل
functions.phpقالب فرزند قرار دهید تا با بروزرسانی قالب اصلی، تغییرات شما از بین نرود. - تشخیص صفحات واقعاً حذف شده: وضعیت 410 باید فقط برای صفحاتی استفاده شود که قبلاً وجود داشتهاند و به طور دائمی حذف شدهاند. استفاده از 410 برای آدرسهایی که هرگز وجود نداشتهاند، از نظر فنی صحیح نیست و ممکن است پیامدهای منفی داشته باشد.
- تست پس از اعمال کد: پس از افزودن کد، حتماً یک صفحه 404 را در مرورگر باز کنید و با استفاده از ابزارهای بررسی هدر مانند httpstatus.io، وضعیت دریافتی را بررسی کنید.
- سازگاری با افزونههای کش: برخی از افزونههای کش ممکن است پاسخ 410 را به عنوان 404 ذخیره کنند. پس از اعمال کد، حتماً کش سایت خود را پاک کنید.
- جایگزین: استفاده از افزونه: اگر با کدنویسی آشنایی ندارید، میتوانید از افزونههای آماده مانند Gone Response استفاده کنید که همین کار را بدون نیاز به کدنویسی انجام میدهند.
- مدیریت گزینشی: این کد تمام صفحات 404 را به 410 تبدیل میکند. اگر نیاز به کنترل دقیقتری دارید و میخواهید فقط برخی از آدرسها به 410 تبدیل شوند، از افزونههایی مانند 410 Response Manager استفاده کنید که امکان مدیریت گزینشی را فراهم میکنند.
- تأثیر بر تجربه کاربری: در حالت پیشفرض (خط
$wp_query->is_404 = false;کامنت شده)، تغییر وضعیت به 410 تأثیری بر محتوای نمایش داده شده به کاربران ندارد و همچنان صفحه 404 قالب شما نمایش داده میشود. تنها هدر HTTP تغییر میکند. - شرایط بحرانی و هک گسترده: اگر سایت شما مورد هک قرار گرفته و هزاران صفحه اسپم (مانند هک ژاپنی) به آن اضافه شده است، فعال کردن خط
$wp_query->is_404 = false;میتواند یک راهکار نجاتبخش باشد. زیرا با این کار، به ازای هر درخواست به صفحات حذفشده، تنها یک پاسخ خالی با هدر 410 ارسال میشود و هیچ تمپلیتی بارگذاری نمیشود. این کار علاوه بر کاهش بار سرور، به موتورهای جستجو نیز اعلام میکند که این صفحات به طور کامل حذف شدهاند و نیازی به خزش مجدد ندارند.
جمعبندی
در این مقاله از سری مقالات آموزشی وردپرس، به بررسی کامل روش تغییر وضعیت صفحات 404 به 410 پرداختیم. با استفاده از کد ارائه شده در این مقاله، میتوانید به موتورهای جستجو اعلام کنید که صفحات درخواستی به طور دائمی حذف شدهاند و دیگر نیازی به خزش آنها نیست. این کار به پاکسازی ایندکس گوگل، کاهش خطاهای سرچ کنسول و بهبود سئو سایت شما کمک میکند. همچنین با درک تفاوت بین دو حالت فعال یا غیرفعال بودن خط $wp_query->is_404 = false;، میتوانید بهترین تصمیم را برای شرایط خاص خود بگیرید. در شرایط عادی، نمایش تمپلیت 404 همراه با هدر 410 گزینه مناسبی است، اما در شرایط بحرانی مانند هک گسترده و وجود هزاران صفحه اسپم، غیرفعال کردن کامل بارگذاری تمپلیت میتواند بودجه خزش سایت شما را نجات دهد و بار سرور را به شدت کاهش دهد.
امیدواریم این آموزش برای شما مفید بوده باشد. اگر سوالی درباره تغییر وضعیت 404 به 410، نحوه استفاده از کد یا هر بخش دیگری از آن دارید، لطفاً در بخش نظرات مطرح کنید. همچنین اگر تجربهای در برخورد با خطاهای 404 در سرچ کنسول یا هک سایت دارید یا روش دیگری برای مدیریت صفحات حذف شده سراغ دارید، خوشحال میشویم آن را با ما و سایر کاربران به اشتراک بگذارید.
