ریدایرکت 301 چیست؟ تفاوت 301 و 302 و آموزش پیادهسازی

اگر میپرسید ریدایرکت 301 چیست، پاسخ این است: یک تغییر مسیر دائمی در سطح HTTP که کاربر و خزنده را از URL قدیمی به URL جدید میفرستد. وقتی صفحهای برای همیشه جابهجا میشود، آدرس دامنه تغییر میکند، چند صفحه ادغام میشوند یا ساختار URL بازطراحی میشود، 301 به مرورگر و موتور جستوجو میگوید مقصد جدید جایگزین دائمی مقصد قبلی است. این پیام با canonical، تگ noindex و ریدایرکت موقت 302 یکسان نیست و انتخاب اشتباه آن میتواند تجربه کاربر و سیگنالهای سئو را خراب کند.
در این راهنمای جامع، تفاوت 301 و 302، کاربرد ریدایرکت در تغییر دامنه و URL، روش پیادهسازی در Apache، Nginx، وردپرس و Next.js، ریدایرکت زنجیرهای و حلقهای، خطاهای رایج و چکلیست تست قبل و بعد از انتشار را بررسی میکنیم. اگر هدف شما مدیریت URLهای تکراری است، مقاله تگ کنونیکال چیست مکمل این بحث است؛ canonical صفحه را باز میگذارد اما ریدایرکت کاربر را به مقصد دیگری منتقل میکند.
«ریدایرکت دائمی به گوگل میگوید صفحهای برای همیشه به مکان جدید منتقل شده است و ریدایرکت موقت نشان میدهد تغییر مسیر فقط برای مدت کوتاهی برقرار است.»
ریدایرکت 301 چیست و چه زمانی استفاده میشود؟
کد وضعیت 301 در پروتکل HTTP به معنای «Moved Permanently» یا انتقال دائمی است. سرور با دیدن درخواست URL قدیمی، پاسخ 301 و نشانی مقصد را در هدر Location میفرستد. مرورگر سپس کاربر را به مقصد میبرد و خزنده نیز متوجه میشود که نسخه جدید باید جایگزین URL قبلی شود. ریدایرکت 301 برای تغییر دائمی طراحی شده و نباید بهعنوان راهحل عمومی هر خطای صفحه استفاده شود.
موارد رایج استفاده شامل تغییر slug مقاله، ادغام دو صفحه مشابه، انتقال HTTP به HTTPS، یکسانسازی www و non-www، تغییر دامنه، حذف تاریخ از URL، انتقال محصول یا خدمت به ساختار جدید و جایگزینی یک صفحه قدیمی با نسخه کاملتر است. در همه این موارد، مقصد باید تا حد ممکن همان نیت و محتوای صفحه قبلی را ادامه دهد. انتقال همه URLها به صفحه اصلی فقط برای راحتی پیادهسازی، معمولاً سیگنال ضعیف و تجربه بدی ایجاد میکند.
تفاوت ریدایرکت 301 و 302 چیست؟
301 برای زمانی است که تصمیم قطعی گرفتهاید و URL قدیمی قرار نیست به حالت قبل برگردد. 302 برای تغییر موقت است؛ مثلاً صفحهای را برای تعمیر کوتاهمدت به نسخه جایگزین میفرستید یا یک کمپین محدود دارید و قصد ندارید مقصد جدید را نسخه دائمی معرفی کنید. گوگل میتواند در شرایط مختلف سیگنالهای هر دو نوع را ارزیابی کند، اما شما باید کد وضعیت را بر اساس واقعیت کسبوکار انتخاب کنید، نه با این تصور که 301 همیشه رتبه را «منتقل» میکند.
| ویژگی | 301 دائمی | 302 موقت |
|---|---|---|
| معنای اصلی | صفحه برای همیشه جابهجا شده است | تغییر مسیر موقتی است |
| نمونه کاربرد | تغییر URL، مهاجرت دامنه، ادغام محتوا | تعمیر کوتاهمدت یا تست محدود |
| نسخه ترجیحی در جستوجو | مقصد جدید معمولاً نامزد اصلی میشود | مبدأ ممکن است همچنان نسخه اصلی بماند |
| ریسک استفاده اشتباه | حذف ناخواسته سیگنالهای URL قدیمی | ادامه حضور URL قدیمی و انتقال ناقص هدف |
اگر هنوز نمیدانید صفحه به حالت قبل برمیگردد یا نه، پیش از انتخاب کد با تیم محصول و فنی تصمیم را روشن کنید. استفاده طولانی از 302 برای تغییری که عملاً دائمی شده، معماری را مبهم نگه میدارد. برعکس، استفاده از 301 برای آزمایش چندروزه میتواند موتور جستوجو و کش مرورگر را به مسیری هدایت کند که بعداً قصد بازگرداندنش را دارید.
تأثیر ریدایرکت 301 بر سئو و اعتبار لینک
ریدایرکت 301 سیگنالهای URL قدیمی را به مقصد منتقل میکند، اما این انتقال یک دکمه فوری و تضمین جایگاه نیست. گوگل باید redirect را بخزد، مقصد را بررسی کند، ارتباط محتوایی را بفهمد و در نهایت دادههای ایندکس را بهروزرسانی کند. بخشی از ارزش لینکها و سیگنالها در طول این فرایند حفظ میشود، اما اگر مقصد موضوعی متفاوت، ضعیف، noindex یا چند مرحلهای باشد، انتظار انتقال کامل منطقی نیست.
قبل از تغییر URL، بکلینکها، ترافیک ارگانیک، لینکهای داخلی، تبدیل و ارزش تجاری صفحه را بررسی کنید. صفحهای که هیچ ترافیک یا لینک معتبری ندارد، ریسک کمتری برای تغییر دارد؛ اما URL قدیمی رتبهدار باید با نگاشت دقیق به نزدیکترین نسخه جدید هدایت شود. بعد از redirect، sitemap و لینکهای داخلی را به مقصد تغییر دهید و اجازه ندهید سایت برای رسیدن به صفحه نهایی همچنان از URL قدیمی عبور کند.
تفاوت 301 با canonical و noindex
ریدایرکت 301 و canonical هر دو میتوانند به انتخاب یک URL اصلی کمک کنند، اما رفتارشان متفاوت است. در 301، کاربر URL مبدأ را نمیبیند و مستقیماً به مقصد منتقل میشود؛ در canonical، صفحه مبدأ باز میماند و فقط به گوگل پیشنهاد میدهید مقصد نسخه ترجیحی باشد. canonical برای نسخههای بسیار مشابهی مناسب است که کاربر هنوز باید بتواند آنها را ببیند، مثل یک URL دارای پارامتر مرتبسازی. 301 برای جایگزینی دائمی مناسب است.
noindex نیز میگوید همان صفحه در نتایج جستوجو نمایش داده نشود، اما صفحه را برای کاربر باز نگه میدارد. اگر URL قدیمی معادل معتبر ندارد و باید حذف شود، ممکن است 410 یا 404 انتخاب بهتری باشد. برای تصمیم درست، هدف URL را مشخص کنید: «این صفحه به مقصد جدید منتقل شده؟» 301؛ «این نسخه تکراری است اما باید باز بماند؟» canonical؛ «این صفحه نباید در نتایج باشد اما برای کاربر وجود دارد؟» noindex.
آموزش ریدایرکت 301 در Apache و فایل htaccess
در سرور Apache، فایل .htaccess معمولاً در ریشه سایت قرار میگیرد و میتواند قواعد redirect را تعریف کند. قبل از ویرایش از فایل نسخه پشتیبان بگیرید و مطمئن شوید mod_rewrite روی سرور فعال است. قواعد را کم و دقیق نگه دارید؛ یک الگوی اشتباه میتواند همه URLها را به یک مقصد بفرستد یا باعث خطای 500 شود.
# انتقال یک URL قدیمی به صفحه جدید
Redirect 301 /old-page https://example.com/new-page
# تغییر slug یک مقاله با mod_rewrite
RewriteEngine On
RewriteRule ^old-blog-slug/?$ https://example.com/new-blog-slug [R=301,L]
# انتقال www به non-www روی HTTPS
RewriteCond %{HTTP_HOST} ^www\\.example\\.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
در محیط واقعی، نسخههای www، non-www، HTTP و HTTPS را با دقت تست کنید تا دو قانون همزمان روی هم نیفتند. در مهاجرت دامنه، redirect را صفحهبهصفحه بنویسید و فقط همه URLها را به homepage نفرستید. اگر وردپرس یا پنل هاست قواعد دیگری تولید میکند، ترتیب اجرای آنها را بررسی کنید؛ تداخل افزونه کش، افزونه redirect و htaccess از علتهای رایج حلقه و 500 است.
ریدایرکت 301 در Nginx
در Nginx، redirect معمولاً در بلوک server با دستور return 301 یا با rewrite نوشته میشود. مزیت return این است که برای تغییر مسیرهای ساده خواناتر و کمریسکتر است. پس از تغییر فایل کانفیگ باید syntax را بررسی و سرویس را با روش امن reload کنید؛ restart بدون تست میتواند دسترسی کل سایت را مختل کند.
server {
listen 80;
server_name www.example.com;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
location = /old-page {
return 301 https://example.com/new-page;
}
}
در ریدایرکتهای متعدد، فایل نگاشت جداگانه داشته باشید و قبل از انتشار آن را با URLهای نمونه تست کنید. مقصدها باید پاسخ مستقیم 200 داشته باشند و به redirect دیگری وابسته نباشند. اگر سایت پشت CDN است، ببینید redirect در لایه CDN اجرا میشود یا origin؛ دو لایه متفاوت میتوانند وضعیتهای غیرمنتظره ایجاد کنند.
ریدایرکت 301 در وردپرس
در وردپرس میتوانید از افزونههای مدیریت redirect مانند Redirection یا امکانات افزونههای سئو استفاده کنید. برای چند redirect محدود، افزونه سادهتر و قابل مدیریتتر است؛ برای هزاران URL یا مهاجرت کامل، بهتر است قواعد در وبسرور یا CDN اجرا شوند تا هر درخواست مجبور به اجرای PHP نباشد. مقصد، مبدأ، نوع کد و تاریخ ایجاد هر redirect را مستند کنید و بعد از تغییر permalink، لینکهای داخلی را نیز اصلاح کنید.
از redirect خودکار بر اساس حدس slug با احتیاط استفاده کنید. اگر افزونه هر URL اشتباه را به نزدیکترین صفحه موجود میفرستد، ممکن است soft 404 و تجربه گمراهکننده بسازد. مقصد باید از نظر موضوع و نیت، ادامه منطقی مبدأ باشد. قبل از فعالسازی قواعد گسترده، روی staging و چند URL دارای پارامتر، اسلش انتهایی، حروف فارسی و نسخه www تست کنید.
ریدایرکت 301 در Next.js
در Next.js App Router، برای redirectهای ثابت میتوانید از next.config.ts استفاده کنید. این روش در لایه سرور اجرا میشود و برای مهاجرت URLهای قدیمی مناسب است. برای مسیرهای شرطی یا مبتنی بر داده، میتوان از تابع redirect در Server Component یا Route Handler استفاده کرد؛ اما مراقب باشید redirect داخل صفحه باعث حلقه یا کندی غیرضروری نشود.
// next.config.ts
import type { NextConfig } from 'next';
const nextConfig: NextConfig = {
async redirects() {
return [
{
source: '/old-blog/:slug*',
destination: '/blog/:slug*',
permanent: true, // 308 در Next.js؛ برای مهاجرت دائمی
},
];
},
};
export default nextConfig;
یک نکته مهم این است که Next.js در تنظیمات permanent: true معمولاً پاسخ 308 تولید میکند، نه الزاماً 301. هر دو در دسته redirect دائمی هستند، اما اگر زیرساخت یا ابزار مانیتورینگ شما صراحتاً 301 میخواهد، پاسخ واقعی production را تست و انتخاب مناسب را با تیم فنی هماهنگ کنید. در هر حال، اصل اصلی ثابت است: مقصد مرتبط، مسیر مستقیم و بهروزرسانی لینکهای داخلی.
ریدایرکت زنجیرهای و حلقهای چیست؟
وقتی URL A به B و B به C redirect شود، زنجیره redirect ساختهاید. یک زنجیره کوتاه شاید کار کند، اما زمان پاسخ را زیاد میکند، خزش را هدر میدهد و احتمال از دسترفتن بخشی از سیگنال را افزایش میدهد. وقتی A به B و B دوباره به A برگردد، حلقه redirect شکل میگیرد و کاربر یا خزنده هیچوقت به صفحه نمیرسد. حلقه معمولاً از تعارض قوانین www/HTTPS، افزونهها یا بازنویسی URL ایجاد میشود.
بعد از هر مهاجرت، جدول مبدأ و مقصد را به URL نهایی resolve کنید و مطمئن شوید هر URL قدیمی با یک پاسخ مستقیم به صفحه نهایی میرود. ابزارهای crawl مانند Screaming Frog یا Sitebulb، گزارش redirect chain و loop میدهند. در سرچ کنسول نیز خطاهای Page indexing و بررسی URLهای نمونه میتواند سرنخ بدهد، اما تست HTTP مستقل را جایگزین نکنید.
ریدایرکت 301 هنگام تغییر دامنه
تغییر دامنه یکی از حساسترین سناریوهای 301 است. پیش از روز انتقال، فهرست URLهای ایندکسشده، پربازدید، دارای بکلینک و درآمدزا را استخراج کنید. برای هر URL قدیمی نزدیکترین URL جدید را در یک redirect map بنویسید. دامنه قدیمی باید برای مدتی فعال و redirectها باید پایدار باقی بمانند؛ همزمان sitemap دامنه جدید، canonicalها، لینکهای داخلی، ایمیلها و پروفایلهای بیرونی را بهروزرسانی کنید.
پس از انتشار، نسخههای مختلف دامنه و پروتکل را تست کنید، Search Console را برای هر property بررسی کنید و داده ترافیک و خطاها را روزانه در روزهای نخست پایش کنید. افت کوتاهمدت همیشه به معنی شکست مهاجرت نیست، اما افت شدید باید سریع بررسی شود. اگر مقصدها به homepage رفتهاند، canonical دامنه قدیمی هنوز زنده است یا زنجیره redirect دارید، اصلاح را در اولویت بگذارید. برای حفظ مسیرهای جستوجو، مهاجرت را بدون برنامه و در فصل اوج فروش انجام ندهید.
چطور ریدایرکت 301 را تست و ممیزی کنیم؟
تست را با چند گروه URL انجام دهید: یک صفحه قدیمی مقاله، محصول، دسته، URL حذفشده، نسخه دارای اسلش، نسخه www، پروتکل HTTP و URL دارای query. برای هرکدام وضعیت HTTP، header Location، تعداد hop، مقصد نهایی و پاسخ مقصد را ثبت کنید. ابزارهای مرورگر، curl، Screaming Frog و گزارشهای CDN به شما کمک میکنند، اما مهم است تست را روی production و از شبکهای خارج از سرور انجام دهید.
# بررسی کد وضعیت و زنجیره ریدایرکت با curl
curl -I https://example.com/old-page
# دنبالکردن تمام hopها تا مقصد نهایی
curl -IL https://example.com/old-page
در پایان، لینکهای داخلی را دوباره crawl کنید تا لینک مستقیم به URL قدیمی باقی نمانده باشد. اگر URL قدیمی در sitemap است، آن را با مقصد نهایی جایگزین کنید. از canonical مقصد، پاسخ 200، نبود noindex و هماهنگی hreflang مطمئن شوید. برای صفحات مهم، از URL Inspection سرچ کنسول نیز استفاده کنید تا user-declared و Google-selected canonical را بعد از بازخزش مقایسه کنید.
اشتباهات رایج ریدایرکت
- استفاده از 302 برای تغییر دائمی URL یا برعکس
- فرستادن همه صفحات قدیمی به صفحه اصلی بدون ارتباط محتوایی
- ساخت زنجیره چندمرحلهای هنگام چند بار تغییر slug
- ایجاد حلقه بین HTTP/HTTPS، www/non-www یا دو افزونه redirect
- قرار دادن URLهای redirectشده در sitemap
- نگهداشتن لینکهای داخلی روی URL قدیمی و وابستگی به redirect
- فراموشکردن پارامترهای مهم، حروف فارسی یا اسلش انتهایی در redirect map
- تغییر دامنه بدون ثبت و پایش همزمان Search Console
- ریدایرکت صفحه حذفشده به صفحه نامرتبط بهجای 410 یا 404 مناسب
- اعمال قواعد گسترده در htaccess بدون نسخه پشتیبان و تست پاسخ 500
چکلیست اجرای ریدایرکت 301
- هدف تغییر را مشخص کنید: دائمی، موقت، ادغام، حذف یا مهاجرت.
- URLهای قدیمی دارای ورودی، بکلینک، ایندکس و درآمد را استخراج کنید.
- برای هر مبدأ، یک مقصد مرتبط و نهایی تعریف کنید.
- کد 301 یا redirect دائمی معادل را در لایه مناسب پیاده کنید.
- URLهای نمونه را با بررسی header و همه hopها تست کنید.
- مطمئن شوید مقصد پاسخ مستقیم 200، قابل ایندکس و دارای محتوای مرتبط است.
- لینکهای داخلی، sitemap، canonical و hreflang را به مقصد نهایی تغییر دهید.
- زنجیره، حلقه، redirect به homepage و soft 404 را crawl کنید.
- پس از انتشار، سرچ کنسول، لاگ سرور، ترافیک و تبدیل را پایش کنید.
- redirectهای مهم را مستند و تا بعد از تثبیت مهاجرت حفظ کنید.
جمعبندی: 301 باید مقصدی مرتبط و مستقیم بسازد
ریدایرکت 301 برای انتقال دائمی URL است و زمانی درست عمل میکند که مقصد جدید ادامه منطقی صفحه قدیمی باشد. آن را با 302، canonical و noindex اشتباه نگیرید؛ هرکدام پیام و کاربرد متفاوتی دارند. در Apache، Nginx، وردپرس و Next.js راههای مختلفی برای پیادهسازی وجود دارد، اما کیفیت نتیجه به map دقیق، مسیر مستقیم، پاسخ 200 مقصد و هماهنگی sitemap و لینک داخلی وابسته است.
قبل از تغییر URL یا دامنه، داده و ارزش صفحه را ثبت کنید و بعد از انتشار با crawl، header، Search Console و آمار کسبوکار نتیجه را بسنجید. اگر مهاجرت بزرگ، بازطراحی یا ادغام چند سایت در پیش دارید، ممیزی تکنیکال و خدمات سئو و تولید محتوای روبینش میتواند نقشه redirect و کنترل ایندکس را در کنار هم پیش ببرد. برای شروع بررسی نیز از صفحه تماس روبینش درخواست مشاوره بفرستید.
سؤالات متداول
ریدایرکت 301 چیست؟
کد وضعیت HTTP برای انتقال دائمی کاربر و خزنده از URL قدیمی به URL جدید است. از آن برای تغییر slug، ادغام صفحات، انتقال دامنه یا تغییر دائمی ساختار URL استفاده میشود.
تفاوت ریدایرکت 301 و 302 چیست؟
301 برای تغییر دائمی و 302 برای تغییر موقت است. در 301 مقصد جدید معمولاً نسخه ترجیحی میشود، اما در 302 ممکن است URL قدیمی همچنان نسخه اصلی باقی بماند.
آیا ریدایرکت 301 اعتبار سئو را منتقل میکند؟
ریدایرکت دائمی میتواند سیگنالها و بخشی از ارزش لینکهای URL قدیمی را به مقصد مرتبط منتقل کند، اما نتیجه فوری و تضمینی نیست. مقصد باید مرتبط، قابل ایندکس و دارای پاسخ مستقیم 200 باشد.
آیا باید همه خطاهای 404 را با 301 به صفحه اصلی بفرستیم؟
خیر. فقط URLهایی را با 301 منتقل کنید که مقصد مرتبط و ادامه منطقی دارند. برای URL بدون جایگزین، 404 یا 410 معتبر بهتر از redirect به homepage نامرتبط است.
ریدایرکت 301 در Next.js چگونه انجام میشود؟
برای redirectهای ثابت میتوان از redirects در next.config.ts استفاده کرد و مقدار permanent را true گذاشت. پاسخ واقعی production را تست کنید، چون Next.js معمولاً redirect دائمی 308 تولید میکند.