
به اشتراک بگذارید

به اشتراک بگذارید
سئو | بلاگ وبداده
ریدایرکت ۳۰۱ و تغییر مسیر لینکها در وردپرس
Redirect 301 به فایل .htaccess در آپاچی؛ سریعترین روش اجرا.wp_safe_redirect در فایل functions.php برای کنترل کامل..htaccess تعریف کنید. این روش چون در سطح سرور اجرا میشود، سریعتر از افزونه است. فایل .htaccess را از طریق فایلمنیجر هاست یا FTP باز کنید و خطوط زیر را پیش از بخش # BEGIN WordPress اضافه کنید. ویرایش این فایل در پنلهایی مثل هاست سیپنل با فایلمنیجر بهسادگی ممکن است:# ریدایرکت 301 در آپاچی — به فایل .htaccess اضافه کنید
# این خطوط را پیش از بخش «# BEGIN WordPress» قرار دهید
# ۱) انتقال یک صفحهی مشخص به صفحهی جدید
Redirect 301 /old-page/ https://example.com/new-page/
# ۲) انتقال کل دامنهی قدیمی به دامنهی جدید
Redirect 301 / https://newdomain.com/
# ۳) انتقال گروهی با الگو (مثلاً همهی آدرسهای /blog/ به /news/)
RedirectMatch 301 ^/blog/(.*)$ https://example.com/news/$1Apachewp_safe_redirect همراه با کد ۳۰۱ داخل اکشن template_redirect، آدرسهای مشخصی را به مقصد جدید میفرستد. این کد را در فایل functions.php قالبِ فرزند قرار دهید تا با بهروزرسانی قالب پاک نشود:<?php
// ریدایرکت 301 دستی با کد — در functions.php قالبِ فرزند
add_action( 'template_redirect', 'webdade_custom_301_redirect' );
function webdade_custom_301_redirect() {
if ( empty( $_SERVER['REQUEST_URI'] ) ) {
return;
}
// مسیر قدیمی => مسیر جدید
$redirects = array(
'/old-page/' => '/new-page/',
'/old-article/' => '/blog/new-article/',
);
$request = untrailingslashit( strtok( $_SERVER['REQUEST_URI'], '?' ) );
foreach ( $redirects as $from => $to ) {
if ( $request === untrailingslashit( $from ) ) {
// wp_safe_redirect برای آدرسهای داخلی امنتر است
wp_safe_redirect( home_url( $to ), 301 );
exit;
}
}
}PHPwp_safe_redirect امنتر از wp_redirect است، چون فقط به دامنههای مجاز اجازهی انتقال میدهد. فراموش نکردن exit بعد از ریدایرکت هم ضروری است.# راستیآزمایی ریدایرکت 301 با curl
curl -I https://example.com/old-page/
# در خروجی باید این دو خط دیده شود:
# HTTP/1.1 301 Moved Permanently
# location: https://example.com/new-page/Bash| معیار | افزونه (Redirection) | فایل htaccess | کد functions.php |
|---|---|---|---|
| سطح دانش لازم | مبتدی | متوسط | حرفهای |
| نیاز به کدنویسی | ندارد | کمی (یک خط) | دارد |
| سرعت اجرا | خوب (سطح PHP) | عالی (سطح سرور) | خوب (سطح PHP) |
| مدیریت و لاگ 404 | دارد | ندارد | ندارد |
| ریسک خرابی سایت | کم | زیاد (حساس به سینتکس) | متوسط |
| مناسب برای Nginx | بله | خیر | بله |
| بهترین کاربرد | بیشتر کاربران | هاست آپاچی و حجم بالا | ریدایرکتهای سفارشی |

wp_old_slug_redirect() «نامک قدیمی را به پیوند یکتای درست هدایت میکند و تلاش میکند آدرس فعلی را از میان نامکهای گذشته پیدا کند.» همین یعنی وردپرس بهصورت توکار از شکستن لینکها هنگام تغییر آدرس جلوگیری میکند. منبع: WordPress Developer — wp_old_slug_redirect().ریدایرکت ۳۰۱ یعنی انتقال «دائمی» و تقریباً تمام اعتبار سئوی صفحهی قدیمی را به آدرس جدید منتقل میکند. ریدایرکت ۳۰۲ (و ۳۰۷) یعنی انتقال «موقت» و برای زمانی بهکار میرود که قرار است بعداً به آدرس اصلی برگردید. اگر تغییر آدرس همیشگی است، حتماً از ۳۰۱ استفاده کنید.
خیر، اگر درست انجام شود. ریدایرکت ۳۰۱ دقیقاً برای حفظ سئو هنگام تغییر آدرس طراحی شده و اعتبار صفحه را منتقل میکند. آسیب زمانی رخ میدهد که ریدایرکتهای زنجیرهای یا حلقهای بسازید یا همهچیز را بهجای صفحهی مرتبط به صفحهی اصلی بفرستید.
افزونهی رایگان Redirection با بیش از ۲ میلیون نصب فعال محبوبترین گزینه است و علاوه بر ساخت ریدایرکت، خطاهای 404 را هم ردیابی میکند. اگر افزونهی سئویی مثل Rank Math یا AIOSEO نصب دارید، میتوانید از بخش مدیریت ریدایرکت همان افزونه استفاده کنید و افزونهی جداگانه نصب نکنید.
نه همیشه. وقتی فقط نامک یک نوشتهی منتشرشده را تغییر میدهید، وردپرس بهصورت خودکار آدرس قدیمی را با کد ۳۰۱ به آدرس جدید ریدایرکت میکند. اما برای تغییر دامنه، جابهجایی گروهی صفحات یا حذف یک صفحه، باید ریدایرکت را خودتان با افزونه، htaccess یا کد بسازید.
اگر دسترسی به فایلها دارید، سرعت برایتان مهم است و سایت روی آپاچی اجرا میشود، روش htaccess سریعتر است چون در سطح سرور اجرا میشود. اما اگر با کد راحت نیستید یا تعداد زیادی ریدایرکت دارید که باید مدیریت شوند، افزونه سادهتر و کمریسکتر است.
حلقهی ریدایرکت زمانی رخ میدهد که آدرس A به B و دوباره B به A (یا به خودش) ریدایرکت شود؛ نتیجه پیام «صفحه بهدرستی ریدایرکت نشد» و از دسترس خارجشدن صفحه است. برای رفع آن، قانونهای ریدایرکت متناقض را در افزونه یا فایل htaccess پیدا و حذف کنید و کش مرورگر را پاک کنید.
میتوانید آدرس قدیمی را در مرورگر باز کنید و ببینید به آدرس جدید میرود. برای بررسی دقیقتر، با دستور curl -I یا تب Network مرورگر، کد وضعیت پاسخ را ببینید؛ باید «301 Moved Permanently» و هدر location با آدرس جدید نمایش داده شود.
هر ریدایرکت کمی تأخیر اضافه میکند، چون مرورگر باید یک درخواست اضافی بفرستد. یک ریدایرکت ساده تأثیر محسوسی ندارد، اما ریدایرکتهای زنجیرهای (چند ریدایرکت پشتسرهم) سرعت را بهوضوح کم میکنند. ریدایرکت سطح سرور (htaccess) معمولاً سریعتر از ریدایرکت افزونه است.