موارد کاربرد و استفاده از دستورات ریدایرکت
یکی از موارد رایج استفاده از ریدارکت زمانی است که آدرس تمام یا برخی صفحات سایت تغییر یافته و خزنده های موتورهای جستجوگر و کاربران سایت به آدرس های قدیمی وارد می شوند و ما می خواهیم آن ها را به آدرس های جدید هدایت کنیم. یکی دیگر از موارد رایج، استفاده از دستورات ریدایرکت زمانی است که برای یک صفحه از سایت، چندین آدرس متفاوت وجود داشته باشد و به دلیل مشکل محتوای چندگانه یا Duplicate Content در سئو ، مجبوریم آدرس های اضافی را بر روی آدرس اصلی ریدایرکت کنیم.
لازم به ذکر است، ریدایرکت صفحات را می توان به دو حالت کلی طبقه بندی نمود. در حالت نخست، تمام صفحات سایت به آدرس های جدید تغییر یافته اند. نظیر زمانی که سایت به دامنه جدیدی منتقل شده یا ساختار پیوند یکتای تمام لینک های سایت را تغییر داده ایم. در این حالت با استفاده از یک دستور کلی، تمام صفحات سایت را به آدرس های جدید منتقل می کنیم. در حالت دوم، تنها یک یا برخی از آدرس های صفحات سایت تغییر یافته است که در این حالت باید برای هر آدرس، یک دستور ریدایرکت مجزا تعریف شود.
انواع ریدایرکت – تفاوت ریدایرکت ۳۰۱ و ۳۰۲
ریدایرکت انواع متفاوتی دارد که از هر نوع آن هدف خاصی دنبال می شود. در این آموزش از میان انواع رایج ریدایرکت، فقط به دو نوع کاربردی و مفید آن یعنی ریدایرکت ۳۰۱ و ریدایرکت ۳۰۲ می پردازیم. هر دو نوع ریدایرکت ۳۰۱ و ریدایرکت ۳۰۲ ، مشابه هم عمل می کنند و در هر دو نوع، هم کاربر و هم خزنده های موتورهای جستجوگر از آدرس قدیم به آدرس جدید منتقل می شوند. اما ریدایرکت ۳۰۱ به معنی انتقال دائم و همیشگی است در حالی که ریدایرکت ۳۰۲ به معنی انتقال موقت است.
فرض کنید آدرس یکی از صفحات سایت شما که روزانه بازدیدهای زیادی از گوگل و سایر موتورهای جستجوگر به آن وارد می شود تغییر می کند. در این حالت با استفاده از ریدایرکت ۳۰۱ ، آدرس قدیم را بر روی آدرس جدید ریدایرکت می کنیم تا هم بازدیدکنندگان و خزنده های موتورهای جستجوگر را به آدرس جدید هدایت کنیم و هم اینکه به موتورهای جستجوگر بفهمانیم که آدرس قدیمی برای همیشه به آدرس جدید تغییر کرده است و باید ارزشی که برای آدرس قدیم قائل بوده اند را به آدرس جدید منتقل کنند و در دیتابیس شان، آدرس جدید را جایگزین آدرس قدیمی کنند.
در مثال بعدی، فرض کنید به دلایلی مجبورید برای مدت کوتاهی یکی از صفحات ارزشمند سایتتان را از دسترس خارج کنید. در این صورت ورودی های گوگل به آن صفحه و همچنین خزنده های گوگل، به ارور ۴۰۴ (به معنی حذف شدن صفحه از سایت) مواجه می شوند و موتورهای جستجوگر پس از مدت بسیار کوتاهی، لینک آن صفحه را از دیتابیس خود حذف می کنند. بعد از آنکه دوباره آن صفحه را فعال کنید، آن صفحه ارزشمند، ارزش خود را نزد موتورهای جستجوگر از دست داده و دیگر به ارزش اول خود و ورودی هایی که به همراه داشت باز نمی گردد!
برای پیشگیری از بروز چنین اتفاقاتی، کافیست زمانی که یک صفحه از سایت را بطور موقت از دسترس خارج می کنید، آن صفحه را بر روی آدرس دیگری ریدایرکت ۳۰۲ کنید. در این صورت کاربران و خزنده هایی که به آن صفحه وارد می شوند، به صفحه ای که شما معین کرده اید منتقل می شوند اما به دلیل استفاده از ریدایرکت ۳۰۲، به موتورهای جستجوگر فهمانده اید که این صفحه بطور موقت به آدرس دیگری منتقل شده. پس ارزش صفحه در خود آن صفحه باقی می ماند و به آدرسی که بر روی آن ریدایرکت شده منتقل نمی گردد و هر زمان که آن صفحه دوباره آنلاین شود، ارزش قدیم خود را حفظ نموده است.
تذکرات مهم در ارتباط با تفاوت ریدایرک ۳۰۱ و ۳۰۲
هیچ گاه نباید این دو نوع ریدایرکت را بجای هم استفاده نمود. اگر صفحه ای از سایت شما برای همیشه حذف می شود، به هیچ عنوان نباید از ریدایرکت ۳۰۲ استفاده کنید. استفاده از ریدایرکت ۳۰۲ سبب می شود که ارزش صفحه ای که حذف شده به صفحه ای که بر روی آن ریدایرکت شده منتقل نگردد و پس از مدتی موتورهای جستجوگر به دلیل آنکه آن صفحه دیگر آنلاین نشده، آن را از دیتابیس شان حذف می کنند و آن صفحه و ارزشی که دارد برای همیشه از بین می رود! در حالی که می توانستید با استفاده از ریدایرکت ۳۰۱ ، بخشی از ارزشش را به یک صفحه دیگر از سایت منتقل کنید.
همچنین باید تذکر جدی دهم که نباید صفحه خطای ۴۰۴ سایت را ریدایرکت کنید. یکی از اشتباهات رایج بسیاری از وبمستران این است که از طریق کدهای اچ تی اکسس یا دستورات پی اچ پی یا نصب افزونه، صفحه خطای ۴۰۴ سایت را بر روی ایندکس یا هر آدرس دیگری ریدایرکت ۳۰۱ می کنند. این اشتباه بسیار بسیار بزرگی است و به سئوی سایت شما صدمه می زند. هرگز دچار چنین اشتباهی نشوید و هرگز نگذارید طراح یا مشاور سئوی سایت شما چنین دستوراتی بر روی سایت شما اضافه کرده یا افزونه ای با این مضمون برای شما نصب کند.
همچنین دقت کنید که ریدایرکت صفحات حذف شده بر روی ایندکس هم اشتباه بزرگی است. نخست اینکه موتورهای جستجوگر هوشمند شده اند و ارزش صفحه ای که حذف شده را به ایندکس سایت منتقل نمی کنند. ارزش گذاری ایندکس سایت شرایط بسیار خاصی دارد و موتورهای جستجوگر به همین سادگی ارزش ایندکس سایت را کم یا زیاد نمی کنند! با انجام این کار فقط ارزش صفحه حذف شده را به هدر می دهید. دوم آنکه ورودی های گوگل به دنبال محتوای خاصی در آن صفحه از سایت شما هستند. با ریدایرکت ۳۰۱ صفحه حذف شده بر روی صفحه ای مشابه با همان مضمون، بخشی از ارزش صفحه قدیمی را به صفحه جدید منتقل می کنید و در عین حال کاربری که وارد شده را به صفحه ای مشابه با همان مضمون هدایت می کنید و کاربر را در سایت حفظ می کنید. در حالی که اگر کاربر از صفحه حذف شده به ایندکس منتقل شود، بلافاصله سایت را بسته و در نتایج جستجو به دنبال سایت دیگری می رود.
تفاوت ریدایرکت ۳۰۲ و ریدایرکت ۳۰۷
اینترنت بر پایه پروتکل HTTP سر واژه عبارت HyperText Transfer Protocol بنا نهاده شده است که نحوه عملکرد لینک ها در فضای مجازی را دیکته می کند. این پروتکل دارای دو ورژن ۱.۰ و ۱.۱ است. ریدایرکت ۳۰۲ در دو ورژن عمل می کند. در ورژن ۱.۰ به صورت کد وضعیت “Moved Temporarily” به معنی انتقال موقت و در ورژن ۱.۱ به صورت کد وضعیت “Found” به معنای یافت شده در مکان دیگر به صورت موقت، به درخواست ارسالی توسط مرورگر پاسخ می دهد. اما ریدایرکت ۳۰۷ فقط در ورژن ۱.۰ عمل کرده و به صورت کد وضعیت “Moved Temporarily” به درخواست ارسالی پاسخ می دهد. به عبارت دیگر ریدایرکت ۳۰۷ در واقع نیمی از ریدارکت ۳۰۲ است و بهتر است همیشه از ریدایرکت ۳۰۲ استفاده کنید.
Redirect 302 : Found (HTTP 1.1) / Moved Temporarily (HTTP 1.0)
Redirect 307 : Moved Temporarily (HTTP 1.1 Only)
انتقال ارزش سایت با ریدایرکت ۳۰۱
در ارتباط با انتقال ارزش با ریدایرکت ۳۰۱ ، مباحث مهمی برای مطرح کردن هست و طبق معمول، به دلیل وجود آموزش های نادرست در ایران، باورهای اشتباهی در این ارتباط در بین وبمستران ایرانی وجود دارد. پیش از هر چیز باید دانست “ارزش صفحات سایت” چیست؟ در گذشته این ارزش، همان فاکتور رنکینگ گوگل بود. رنک یک عدد بین بازه ۰ تا ۱۰ بود که هر صفحه از سایت (من جمله ایندکس سایت) از سمت گوگل رنک مجزایی دریافت می کرد که از تاریخ نگارش این مقاله در آموزشگاه دی بی اس تم، بیش از یک سال است که گوگل در سیستم رنکینگ خود تغییرات بزرگی انجام داده و آنرا به یک معیار بسیار پیچیده تبدیل کرده است و امتیازی که امروز بر روی آن بحث می کنیم، همین امتیاز است. امتیازی که در سیستم رنکینگ جدید گوگل به صفحات سایت داده می شود و همچنان نام مشخصی ندارد.
در مرحله بعد باید به روشنی مطرح کرد که هرگز نمی توان ارزش یک صفحه از سایت را به طور کامل به صفحه دیگری منتقل کرد. انتقال ارزش با ریدایرک ۳۰۱ به شدت “مفهومی” است. مفهومی بدین معنا که انتقال ارزش یک صفحه از سایت به دیگری، به میزان تشابه دو صفحه بستگی دارد. باید بدانید حتی در شرایطی که آدرس یک صفحه عوض شود و آدرس قدیمی را بر روی آدرس جدید ریدایرکت کنید، فقط ۸۵ درصد ارزش آدرس قدیمی به آدرس جدید منتقل می شود!
عدد ۸۵% به نقل از یکی از ویدئوکست های مت کاتز (Matt Cutts) مدیر تیم مبارزه با اسپم گوگل و به تأیید یک آزمایش و مقاله آموزشی در وب سایت معتبر moz.com و یک مصاحبه اختصاصی سایت معتبر searchengineland.com با مت کاتز، در این آموزش در سایت دی بی اس تم مطرح می گردد و کاملاً معتبر و قابل اتکا است. پس حتی در شرایطی که صفحه قدیمی و صفحه جدید دارای محتوای ۱۰۰% مشابه و متاهای کاملاً یکسان باشند (تغییر آدرس صفحه به آدرس جدید)، فقط ۸۵ درصد ارزش لینک قدیم به لینک جدید منتقل می گردد و به هر میزان که این تشابه کاهش یابد، ارزش منتقل شده از صفحه قدیمی به صفحه جدید کاهش می یابد.
به عبارت دیگر اگر صفحات حذف شده سایت را بر روی صفحه ای نظیر ایندکس یا صفحات غیر مرتبط دیگر ریدایرکت کنید، هیچ ارزشی از صفحات حذف شده به صفحه مقصد منتقل نمی گردد. به هر میزان که تشابه صفحه حذف شده با صفحه هدف ریدایرکت ۳۰۱ بیشتر باشد (که این تشابه به محتوا و متاهای صفحات مربوط است)، میزان انتقال ارزش صفحه حذف شده به صفحه جدید افزایش می یابد و به عدد ۸۵% نزدیک تر می شود.
ریدایرکت صفحات سایت به آدرس جدید بعد از تغییر دامنه
تغییر آدرس دامنه سایت به آدرس جدید یک مسئله رایج در محیط وب است. وبمستران بسیاری برای شروع با دامنه های نامناسبی سایت خود را آغاز می کنند و پس از مدتی تصمیم به کوچ به دامنه جدید می گیرند. همچنین در ایران، فیلترینگ یکی دیگر از دلایل انتقال دامنه به آدرس جدید است. پس از تغییر دامنه سایت به آدرس جدید، باید آدرس قدیم را بر آدرس جدید ریدایرکت کنید. مسئله مهم، ریدایرکت صحیح تمام صفحات سایت بر روی آدرس جدیدشان است. برای انجام این کار وارد پنل مدیریت هاست خود بشید و در پوشه دامنه قدیمی سایت خود یک فایل با نام .htaccess ایجاد کرده سپس کدی که در ادامه آمده است را در فایل .htaccess قرار دهید.
# options+FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^olddomain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.olddomain\.com$
RewriteRule ^(.*)$ "http\:\/\/www\.newdomain\.com\/$1" [R=301,L]
بجای olddomain نام دامنه قدیم و بجای newdomain نام دامنه جدید خود را بنویسید.
کد ریدایرکت یک صفحه بر روی صفحه دیگر
برای ریدایرکت کردن یک صفحه از سایت به صفحه ای دیگر از طریق دستورات .htaccess باید مشابه راهنمای تصویری زیر، دستور ریدایرکت را ایجاد و در فایل .htaccess موجود در ریشه سایت خود کپی کنید.
RedirectMatch 301 /old-address http://isatisserver.ir/new-address
به عنوان نمونه به مثال زیر در ارتباط با ریدایرکت لینک ۱ بر روی لینک ۲ توجه کنید:
Link1: http://isatisserver.ir/old-address
Link2: http://isatisserver.ir/new-address
حذف www از ابتدای دامنه
برای حذف www از ابتدای آدرس دامنه، باید آدرس با www را بر روی آدرس بدون www ریدایرکت کنید. برای انجام این کار کافیست قطعه کد زیر را در فایل .htaccess موجود در ریشه سایتتان کپی کنید.
RewriteEngine On
RewriteBase \
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%۱/$۱ [R=۳۰۱,L]
اگر در وب سایت خود از پروتکل امنیتی ssl یا همان https استفاده می کنید بجای کد فوق از کد زیر استفاده کنید.
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
حذف اسلش / از انتهای لینک های سایت
در استفاده از این کد نهایت دقت را داشته باشید. در برخی سیستم های مدیریت محتوی (cms) نظیر وردپرس، به ویژه پس از نصب افزونه های سئو ساز، همواره علامت اسلش / در انتهای لینک صفحات سایت قرار دارد و الزامی به حذف آن نیست اما در برخی ئی کامرس های اپن سورس نظیر پرستاشاپ و مجنتو، وجود علامت اسمش / در انتهای لینک سبب می شود تا با صفحه خطای ۴۰۴ مواجه شوید. از این رو با ریدایرکت کردن آدرس با اسلش بر روی آدرس بدون اسلش، از بروز چنین مشکلاتی پیشگیری می کنیم. برای انجام این کار، کافیست کد زیر را در فایل .htaccess موجود در ریشه سایتتان کپی کنید.
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !\.(gif|jpg|png|jpeg|css|js)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} !^\.localhost$ [NC]
RewriteRule ^(.+[^/])/$ http://%{HTTP_HOST}/$1 [R=301,L]
در کد فوق، فرمت های gif|jpg|png|jpeg|css|js از حذف اسلش از انتهای لینک استثناء قائل شده است. در صورت نیاز می توانید فرمت های بیشتر را اضافه نمایید.
کد ریدایرکت ساب دامنه بر روی دامنه اصلی
اگر می خواهید یکی از ساب دامنه های سایتتان را بر روی دامنه اصلی ریدایرکت کنید، کد دستوری زیر را پس از ویرایش های لازم در آدرس دامنه، در فایل .htaccess موجود در ریشه سایتتان کپی کنید.
#Options +FollowSymlinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^sub.isatisserver.ir$ [OR]
RewriteCond %{HTTP_HOST} ^www.sub.isatisserver.ir$
RewriteRule (.*)$ http://isatisserver.ir/$1 [R=301,L]
کد ریدایرکت دامنه اصلی بر روی ساب دامنه
اگر می خواهید دامنه سایتتان را بر روی یک ساب دامنه ریدایرکت کنید، کد دستوری زیر را پس از ویرایش های لازم در آدرس دامنه، در فایل .htaccess موجود در ریشه سایتتان کپی کنید.
Options +SymLinksIfOwnerMatch
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?isatisserver\.ir$ [NC]
RewriteRule ^ http://sub.isatisserver.ir[R,L]
کد ریدایرکت یک ساب دومین بر روی دیگری
Options +SymLinksIfOwnerMatch
RewriteEngine on
RewriteCond %{HTTP_HOST} ^sub1\.isatisserver\.ir$ [OR]
RewriteCond %{HTTP_HOST} ^www\.sub1\.isatisserver\.ir$
RewriteRule ^/?$ "http\:\/\/sub2\.isatisserver\.ir" [R=301,L]
ریدایرکت یک پسوند خاص صفحات سایت به پسوند دیگر
اگر می خواهید یک پسوند خاص به عنوان مثال HTML را بر روی پسوند دیگری نظیر PHP ریدایرکت کنید، کد دستوری زیر را پس از ویرایش های لازم در آدرس دامنه، در فایل .htaccess موجود در ریشه سایتتان کپی کنید.
RedirectMatch 301 (.*)\.html$ http://isatisserver.ir$1.php
با این کد، صفحاتی نظیر http://isatisserver.ir/Page.html به http://isatisserver.ir/Page.php ریدایرکت ۳۰۱ می شود.
ریدایرکت صفحات سایت یا وبلاگ با کد HTML
کد ریدایرکت html بیشتر برای سایت های استاتیک ساخته شده با HTML و صاحبان وبلاگ های سرویس های وبلاگدهی رایگان مناسب است که دسترسی به هاست ندارند. با قرار دادن کد زیر در کنار متاهای هدر بعد از تگ <head> می توانید بازدیدکنندگان سایت یا وبلاگ را به مسیر دیگری ریدایرکت کنید.
<meta http-equiv="refresh" content="3; url=http://isatisserver.ir">
عدد ۳ در کد فوق بدین معناست که ریدایرکت پس از ۳ ثانیه انجام خواهد شد. اگر می خواهید بازدیدکنندگان بلافاصله به مسیر دلخواه شما ریدایرکت شوند، مقدار آن را به ۰ تغییر دهید.
کد ریدایرکت تمام پست های سایت قدیمی به ادرس جدید
# Turn On ReWrite Engine
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/(index|isatisserver)\.php
RewriteRule . site2.php [NC,L]
در خط سوم به جای آدرس هایی که میخواهید استثناء قائل بشوید مثل index.php و dbstheme.php و غیره را وارد کنید و در خط چهارم به جای site2.php آدرس سایت مقصد رو بنویسید.
کد ریدایرکت کردن قسمتی از سایت
مثلا اگر بخواهیم صرفاً تگ محصولات رو ریدایرکت ۳۰۱ بکنیم به این صورت که تمام تگهایی که با www. domain1.com/product-tag شروع میشوند تبدیل بشوند به www. domain2.com/product-tag
RedirectMatch 301 /product-tag/(.*) http://www.domain.ir/product-tag/$1
کد ریدایرکت کردن تمامی صفحات به جز برخی صفحات
# Turn On ReWrite Engine
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/(index|isatisserver)\.php
RewriteRule . site2.php [NC,L]
در خط سوم می توانید آدرس هایی که میخواهید استثناء قائل بشوند مثل index.php و isatisserver.php و غیره رو وارد کنید و در خط چهارم جای site2.php آدرس سایت مقصد را بنویسید.
کد ریدایرکت یک ip بر روی یک آدرس اینترنتی
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^10\.10\.10\.100$
RewriteRule ^(.*)$ http://www.isatisserver.ir/$1 [L,R=301]
کد ریدارکت کردن یک رنج آی پی
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^46\.200\.300\.$ [OR]
RewriteRule ^(.*)$ fa.html [R,L]
RewriteCond %{REMOTE_ADDR} ^46\.300\.200\.$ [OR]
RewriteRule ^(.*)$ en.html [R,L]
</IfModule>
بر طبق دستور بالا، کاربر وارد هر صفحه از سایت شما که بشود اگر آی پی شبیه به ۴۶.۲۰۰.۳۰۰.۱۰۰ داشته باشد (یعنی در رنج تعریف شده باشد)، به صفحه fa.html هدایت شده و اگر آی پی شبیه به ۴۶.۳۰۰.۲۰۰.۱۰۰ داشته باشد (در رنج تعریف شده دوم میشود)، به صفحه en.html هدایت میشود.
دقت فراوان کنید در کد بالا کاربر وارد هر صفحه ای از سایت بشود این ریدایرکت رخ میدهد. اگر میخواید فقط کاربرانی که وارد یک صفحه خاص میشوند عمل ریدایرکت انجام گیرد، باید در کد فوق بجای متغیر ^(.*)$ آدرس صفحه مورد نظر را بنویسید. مثلاً index.php
به این صورت:
RewriteRule index.html fa.html [R,L]