ریدایرکت 301 چیست و چه زمانی لازم است؟

یاسین
1405/7/14
12 دقیقه
154 بازدید
ریدایرکت 301 چیست و چه زمانی لازم است؟

پاسخ کوتاه: ریدایرکت 301 یک پاسخ سرور است که به مرورگر و به گوگل می گوید «این آدرس برای همیشه به نشانی تازه منتقل شده است». با این کار بازدیدکنندهٔ صفحه های قدیمی به جای خطای 404 به صفحهٔ درست می رسد و اعتبار و رتبهٔ آن صفحه ها هم به نشانی تازه منتقل می شود. اگر انتقال موقتی است، جای 301 باید 302 بگذارید، وگرنه به گوگل دروغ گفته اید. یک خط تنظیم روی سرور این کار را انجام می دهد، ولی اگر جا بماند، همان صفحه ها بی صدا از گوگل حذف می شوند.

ریدایرکت 301 چیست؟

هر بار که مرورگر یک نشانی را باز می کند، سرور یک عدد سه رقمی برمی گرداند که «کد وضعیت» نام دارد. کد 200 یعنی صفحه سالم است، کد 404 یعنی چنین صفحه ای وجود ندارد، و کد 301 یعنی «این صفحه بود، ولی از این پس جای دیگری است». کد 301 با خودش یک آدرس مقصد هم می آورد و مرورگر خودش آن آدرس را باز می کند. کاربر چیزی نمی بیند جز یک لحظه تأخیر.

نکتهٔ اصلی این است که 301 فقط برای مرورگر نیست. گوگل هم همین کد را می خواند و از آن یک نتیجه می گیرد: صفحهٔ قدیمی بازنشسته شده و صفحهٔ تازه جانشین آن است. یعنی هم بازدیدکنندهٔ ذخیره شده در نتایج گوگل به مقصد درست می رسد، هم لینک هایی که سال ها به صفحهٔ قدیمی داده شده بودند، اعتبارشان به صفحهٔ تازه منتقل می شود. اگر این کد را نگذارید، آن لینک ها به صفحهٔ ناموجود می رسند و بیهوده می شوند.

چرا ریدایرکت 301 انجام می دهیم؟

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

همین موضوع در تغییر دامنه هم تکرار می شود: اگر نشانی سایت عوض شود و آدرس های قدیمی پاسخ ندهند، تمام تاریخ سایت از صفر شروع می شود. توضیح کامل این حالت در راهنمای تغییر و نگهداری دامنه سایت آمده است.

دوراهی ریل قطار که یک مسیر به دو مسیر تقسیم می شود؛ نمادی از انتخاب کد ریدایرکت
انتخاب کد ریدایرکت هم مثل یک دوراهی است: مسیر پس از تقسیم، دیگر به نقطهٔ قبلی برنمی گردد.

جدول تصمیم: 301 یا 302 یا 307 یا 308؟

بیشتر راهنماها فقط «301 در برابر 302» را می گویند و دو کد دیگر را رها می کنند. تفاوت این چهار کد در دو پرسش خلاصه می شود: آیا انتقال دائمی است؟ و آیا کد وضعیت باید روش درخواست (مثل فرم) را تغییر بدهد یا حفظ کند؟

کدمعنیروش درخواستکِی استفاده کنیم
301انتقال دائمیتبدیل به درخواست سادهتغییر همیشگی نشانی صفحه، دامنه، یا ساختار آدرس
302انتقال موقتیتبدیل به درخواست سادهصفحهٔ موقت، تعمیر کوتاه، آزمایش پیش از تصمیم
307انتقال موقتیحفظ می شودفرم یا فایلی که نباید روش درخواستش عوض شود
308انتقال دائمیحفظ می شودهمان کار 301، ولی برای درخواست های دارای بدنه

همین چهار کد، جدول را تمام می کند. برای سایت محتوایی، در ۹۹ درصد موارد پاسخ همان 301 است. تنها جایی که 302 لازم می شود، انتقال موقتی است: مثلا کارزار تبلیغاتی ده روزه یا صفحه ای که برای بازسازی بسته شده. اگر برای چنین حالتی 301 بگذارید، گوگل صفحهٔ قدیمی را برای همیشه بازنشسته می کند و بازگرداندنش کار سختی است.

چهار نشانه ای که یعنی به ریدایرکت 301 نیاز دارید

  • تغییر دامنه یا جابجایی از پرتوی www به ریشه: همهٔ آدرس های قدیمی باید به معادل تازهٔ خودشان برسند، نه فقط صفحهٔ اصلی. در سایت خودمان هر دو حالت را اندازه گرفتیم: آدرس www.codeyas.com با کد 301 به ریشهٔ دامنه می رود، و یک نشانی قدیمی تو در تو هم با 301 به نشانی تازهٔ مسطح می رسد.
  • تغییر ساختار آدرس: اگر مثلا از /blog/old-name به /blog/new-name می روید، رفتن با یک آدرس و ماندن دیگری یعنی از دست دادن یک صفحه.
  • ادغام دو صفحه: دو مقاله که یک موضوع را می گویند با هم رقابت می کنند. یکی را به دیگری 301 می دهید و صفحهٔ کم اثر را از فهرست گوگل بیرون می آورید.
  • حذف صفحه ای که جانشین دارد: اگر صفحه ای دیگر لازم نیست ولی مفهومش برای کاربر لازم است، جانشین را معرفی کنید؛ حذف بی جانشین همان 404 است.
سوئیچ شبکه با چند کابل که به درگاه های آن وصل شده اند؛ نمادی از قاعده ای که ترافیک را به مقصد تازه می فرستد
قاعدهٔ ریدایرکت همان کاری را می کند که این کابل ها: هر درخواست را به مقصد درست هدایت می کند.

چگونه ریدایرکت 301 انجام دهیم؟

روش کار به سرور شما بستگی دارد، ولی شکل تنظیم در همه یکی است: یک شرط «آدرس قدیمی» و یک مقصد. در آپاچی و انجینکس دستور را دستی می نویسیم و در وردپرس و لاراول ابزار آماده تری هست.

فایل htaccess چیست؟

در سرورهای آپاچی، فایل .htaccess یک فایل متنی است در پوشهٔ اصلی سایت که تنظیمات را برای همان پوشه تعیین می کند. کد زیر را در فایل .htaccess بنویسید و ذخیره کنید؛ خط اول یک نشانی ثابت را جابجا می کند و خط های بعد همهٔ آدرس های یک پوشه را الگو می گیرند:

Redirect 301 /old-page https://codeyas.com/new-page

RewriteEngine On
RewriteRule ^old-blog/(.*)$ /blog/$1 [R=301,L]

خط RewriteRule می گوید: هر آدرسی که با old-blog/ شروع شود، با همان ادامهٔ اسم به پوشهٔ تازه فرستاده شود. علامت [R=301,L] یعنی کد وضعیت 301 باشد و همین قانون پایانی است، نه اولین.

دسترسی و ویرایش آن

فایل .htaccess با یک نقطه شروع می شود، پس در پنل مدیر فایل پنهان است و اول باید نمایش فایل های پنهان را روشن کنید. برای دیدن فایل، دستور ls -la | grep htaccess را در ترمینال اجرا کنید و پیش از هر ویرایش با دستور cp .htaccess .htaccess.bak از آن نسخهٔ پشتیبان بگیرید؛ یک خط اشتباه در همین فایل می تواند کل سایت را از دسترس خارج کند.

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

روی انجینکس

اگر سرور انجینکس است، فایل .htaccess را فراموش کنید؛ آنجا تنظیم در فایل پیکربندی سرور نوشته می شود. کد زیر را در بلوک سرور بنویسید و بعد انجینکس را دوباره بارگذاری کنید:

location = /old-page {
    return 301 https://codeyas.com/new-page;
}

در وردپرس

در وردپرس اگر می خواهید یک نوشته را به نشانی تازه ببرید، کمترین کار تغییر «نامک» نوشته است؛ وردپرس خودش آدرس قدیمی را با 301 به آدرس تازه می فرستد. برای انتقال صفحه های زیاد، افزونه های ریدایرکت کار را جدول بندی می کنند: آدرس قدیمی، آدرس تازه، نوع کد. اگر افزونه نصب نمی کنید، همان خط های فایل .htaccess بالا در وردپرس هم کار می کند.

در لاراول

در لاراول لازم نیست سرور را دست بزنید؛ مسیر قدیمی را در فایل مسیرها نگه دارید و به مقصد تازه اشاره بدهید. کد زیر را در فایل routes/web.php بنویسید:

Route::redirect('/old-page', '/new-page', 301);

در سایتی که با مدیر محتوا کار می کند، بهتر است مسیرهای قدیمی همه یک جا جمع باشند تا شش ماه بعد کسی نداند کدام آدرس کجا می رود.

راهرویی با سه درگاه باز پشت سر هم؛ نمادی از زنجیرهٔ ریدایرکت که نباید بیشتر از یک پله باشد
هر درگاه باز یک پرش است؛ ریدایرکت سالم فقط یک در باز دارد، نه سه تا.

چطور بفهمیم ریدایرکت درست کار می کند؟

ساده ترین راه این است که خودتان از سرور بپرسید. دستور زیر را اجرا کنید تا پاسخ سرور را بدون باز کردن مرورگر ببینید:

curl -sI https://codeyas.com/old-page | head -3

در خط دوم باید HTTP/2 301 ببینید و در ادامهٔ پاسخ خطی با نام Location که مقصد را نشان می دهد. اگر آنجا 200 دیدید، یعنی هنوز صفحه سر جایش است و ریدایرکت اعمال نشده؛ اگر 404 دیدید، یعنی آدرس را اشتباه نوشته اید یا قاعده روی آن پوشه اثر نکرده است.

برای چند نشانی، نوشتن یک دستور برای هر کدام وقت تلف کردن است. نشانی های قدیمی را در فایلی به نام old-urls.txt بگذارید، هر کدام در یک خط، و حلقهٔ زیر را در ترمینال اجرا کنید:

while read u; do
  curl -sI -o /dev/null -w "%{http_code} $u\n" "$u"
done < old-urls.txt

خروجی، فهرستی از کد وضعیت ها می شود: هر خطی که با 301 شروع شود درست است و هر 200 یا 404 یعنی همان یک نشانی جا مانده است.

زنجیره و حلقهٔ ریدایرکت

اگر ریدایرکت را چند بار پشت سر هم بگذارید، یک «زنجیره» ساخته می شود؛ مثل وقتی که آدرس الف به ب، و ب به ج می رود. هر پرش یک درخواست تازه است و زمان بارگذاری را بالا می برد. گوگل هم زنجیره های بلند را دیرتر دنبال می کند و در گزارش پوشش صفحه هایش، آدرس واسطه را چندان جدی نمی گیرد. راه سنجشش این است که به همان دستور بررسی خودتان گزینهٔ -L اضافه کنید تا زنجیره را دنبال کند و در پایان با -w "%{num_redirects}" تعداد پرش ها را چاپ کند.

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

یک نمونهٔ واقعی از سایت خودمان: نشانی تو در توی یک مقالهٔ قدیمی با 301 به نشانی تازه می رود و همان جا می ایستد؛ زنجیرهٔ دو پرشی در این حالت درست نیست، چون پرش دوم بیهوده است.

بهترین روش ریدایرکت برای سئو

بهترین روش، «نزدیک ترین جانشین» است: آدرس قدیمی را به صفحه ای بفرستید که همان موضوع را می گوید. سه کار که نتیجه را خراب می کند: فرستادن همهٔ آدرس های قدیمی به صفحهٔ اصلی (گوگل این را ریدایرکت بی ربط می خواند و آن صفحه را جانشین نمی داند)، فرستادن آدرس قدیمی به صفحهٔ دسته بندی به جای نوشتهٔ خودش، و ساختن زنجیرهٔ چند پرشی به جای یک پرش.

دو کار دیگر هم فراموش می شود: نشانی های قدیمی در نقشهٔ سایت باید به روز شوند، و صفحه های حذف شده باید از نقشهٔ سایت بیرون بیایند. توضیح رفتار کد وضعیت ها در بازرسی گوگل در راهنمای خطای 404 و کدهای وضعیت آمده است.

کجا ریدایرکت 301 غلط است؟

  • انتقال موقتی با کد دائمی: فروشگاه بسته شده، صفحه ده روز دیگر برمی گردد، ولی 301 گذاشته شده. گوگل صفحهٔ قدیمی را کنار گذاشته است.
  • ۴۰۴ نرم: صفحه ای که با کد 200 پاسخ می دهد ولی روی آن نوشته «صفحه پیدا نشد». این بدترین حالت است، چون گوگل فکر می کند صفحه سالم است و کاربر به صفحهٔ بی ارزش می رسد.
  • ریدایرکت به صفحه ای که خودش 404 است: قاعده درست است ولی مقصد وجود ندارد؛ نتیجه برای کاربر همان خطای قبلی است.
  • تداخل با آدرس اصلی (کانونیکال): اگر درون صفحه یک آدرس به عنوان نسخهٔ اصلی معرفی شده و ریدایرکت جای دیگری می فرستد، دو سیگنال متناقض به گوگل می رود.
  • گذاشتن 301 روی صفحه های نیازمند ورود: فرم ورود و سبد خرید را ریدایرکت نکنید؛ کاربر پشت صفحهٔ ورود گیر می کند.

همچنین اگر تغییر آدرس برنامه ریزی شده است، پیش از آن یک فهرست از نشانی های قدیمی بسازید. بدون این فهرست، ریدایرکت ناقص می ماند و هیچ وقت نمی فهمید کدام آدرس جا مانده است.

هزینه ریدایرکت 301 چقدر است؟

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

برای کسی که خودش می خواهد انجام بدهد، همان مسیر مقالهٔ مدیریت مسیرها در لاراول نقطهٔ شروع خوبی است.

چک لیست پذیرش پس از تغییر آدرس

این فهرست همان چیزی است که یک کار تمام شده را از کار نیمه تمام جدا می کند. هر خط را با اندازه گیری تأیید کنید، نه با اطمینان.

  1. هر نشانی قدیمی با دستور curl -sI بررسی شد و کد 301 داد.
  2. هیچ نشانی به زنجیرهٔ بیشتر از یک پرش نمی رود.
  3. هیچ حلقه ای وجود ندارد و فرم ورود و سبد خرید ریدایرکت نشده اند.
  4. نشانی های تازه در نقشهٔ سایت هستند و نشانی های قدیمی از آن بیرون رفته اند.
  5. نشانی های تازه در سرچ کنسول ثبت شدند و پوشش صفحه ها هفتهٔ بعد دوباره بررسی می شود.
  6. لینک های داخلی سایت به نشانی های قدیمی اشاره نمی کنند.

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

جمع بندی

ریدایرکت 301 یک خط تنظیم است که هم بازدیدکننده و هم اعتبار صفحه را از آدرس قدیمی به آدرس تازه می برد. برای انتقال دائمی از 301، برای انتقال موقتی از 302 استفاده کنید و پس از هر تغییر با یک دستور ساده تأیید کنید که کار کرده است. آزمودن پس از کار، از نوشتن قاعده مهم تر است.

اشتراک‌گذاری مقاله:

سوالات متداول

نظرات کاربران

ارسال نظر جدید

حداقل ۱۰ و حداکثر ۱۰۰۰ کاراکتر

هنوز نظری ثبت نشده است

اولین نفری باشید که دیدگاه خود را می‌نویسد!

مطالب مرتبط

مقالات مشابه که ممکن است برایتان جالب باشد