ریدایرکت لینک یا تغییر مسیر نشانی وب به فرآیندی گفته میشود که در آن یک آدرس وب سایت مخاطب را به نشانی دیگری هدایت میکند.
ریدایرکت چیست؟
ریدایرکت لینک روشی برای هدایت کاربران و موتورهای جستجو به آدرسهای دیگر از جایی که در ابتدا در خواست شده، می باشد. رایج ترین ریدایرکتهای استفاده شده انواع 301، 302 و متا تگ رفرش (Meta Refresh) هستند. این ریدایرکتها به طور خلاصه به صورت زیر هستند:
- ریدایرکت 301 در این روش کاربر به طور کاملا به دامنه اصلی هدایت میشود. این روش برای بهینه سازی موتورهای جستجو یا سئو توصیه میشود.
- ریدارکت 302 در این روش کاربر موقتا به دامنه مورد نظر هدایت میشود.
- متا تگ رفرش
ریدایرکت 301 یا انتقال دائم
ریدایرکت 301 به ریدایرکتی دائمی گفته میشود که در آن چیزی بیش از نود درصد از ارزش لینک (قدرت رتبه بندی) به صفحه نهایی منتقل میشود. 301 به وضعیت کد HTTP (HTTP status code) که در این نوع ریدایرکت استفاده میشود اشاره میکند. در بیشتر موارد، ریدایرکت 301 بهترین روشی است که میتوان برای وب سایتها مورد استفاده قرار داد.
ریدایرکت 302
بعضی از کارکنان گوگل اطلاعاتی را منتشر کرده اند که نشان میدهند در بعضی موارد تفاوتی میان ریدایرکت 301 با 302 وجود ندارد، اما شواهد نشان میدهند که موتورهای جستجو و مرورگرها در زمانی که میخواهید به طور دائمی به انتقال دامنه بپردازید، اعتبار بیشتری به استفاده از ریدایرکت 301 میدهند.
اینترنت بر روی پروتکلی فعالیت میکند که پروتکل امن انتقال ابرمتن (HTTPS) نام دارد، این پروتکل نحوه عملکرد آدرسهای وب را مشخص میکند. این پروتکل دو نسخه اصلی دارد، 1.0 و 1.1. در نسخه اول، ریدایرکت 302 به کد وضعیت (status code) انتقال موقت اشاره دارد. این موضوع در پروتکل 1.1 به وضعیت یافت شد تغییر یافته است.
ریدایرکت 307 یا انتقال موقت (تنها در نسخه HTTP 1.1)
ریدایرکت 307 جایگزین ریدایرکت 301 در پروتکل 1.1 محسوب میشود. در حالی که بیشتر کراولرها (رباتهای موتورهای جستجو) در بعضی موارد با ریدایرکت 307 برخوردی مشابه ریدایرکت 302 دارند، در بیشتر موارد بهتر است از ریدایرکت 301 برای انتقال استفاده شود.
تنها زمانی بهتر است از ریدایرکت 307 استفاده شود که محتوا تنها به صورت موقتی منتقل میشود (نظیر زمان تعمیرات وب سایت) و سرور توسط موتورهای جستجو در حال حاضر به صورت منطبق با پروتکل 1.1 شناسایی شده باشد.
از آن جایی که تعیین این که موتورهای جستجو صفحه وب را به صورت منطبق با پروتکل تشخیص داده باشند یا خیر امری غیر ممکن است، به طور کلی توصیه میشود از ریدایرکت 302 برای محتوایی که میخواهید به طور موقت منتقل کنید استفاده شود.
متا تگ رفرش (Meta Refresh)
متا تگ رفرش به نوعی از ریدایرکت گفته میشود که در سطح صفحات (و نه سطح سرور) اتفاق میافتد. این نوع ریدایرکت معمولا کند تر است و در تکنیکهای سئو توصیه نمی شوند.
این نوع ریدایرکت معمولا با شمارش پنج ثانیه ای و نوشتههایی همراه میشود که میگویند در صورتی که ظرف پنج ثانیه به صفحه مورد نظر هدایت نشدید بر این لینک کلیک کنید.
متا تگ رفرشها نیز میزانی از ارزش لینک را منتقل میکنند، اما به عنوان یک تاکتیک سئو بهینه توصیه نمی شوند زیرا کاربرد آنها دشوار است و ارزش کامل لینک منتقل نمیشود.
بهترین روش ریدایرکت لینک برای سئو
هدایت یک صفحه وب به صفحه دیگر اقدام رایجی در وب سایتها محسوب میشود. در زمان انجام این کار، توجه به بهترین راه کارهای سئو برای حفظ ارزش سئو اهمیت دارد.
مصداق اول از این موضوع با یک سناریو ساده همراه میشود: یک نشانی نیاز به هدایت دائمی به یک نشانی دیگر دارد.
در این جا چندین گزینه برای مدیران وب سایت وجود دارد، اما به طور معمول، ریدایرکت 301 برای کاربران و موتورهای جستجو ترجیح دارد.
استفاده از ریدایرکت 301 به این معنی است که مرورگر و رباتهای موتور جستجو در مییابند که صفحه به طور دائم جابجا شده است.
موتورهای جستجو این مسئله را به دو شکل تعبیر میکنند، ابتدا این که موقعیت صفحه تغییر کرده است، اما محتوا یا نسخه بروزرسانی شده از آن در آدرس جدید قابل دست یابی است.
موتورهای جستجو هر وزن لینکی که صفحه اصلی داشته است را در آدرس جدید و به صورت نمودار زیر دریافت میکنند:
بدانید زمانی که به جابجایی یک صفحه از یک آدرس به آدرس دیگر میپردازید، موتورهای جستجو زمانی را صرف کشف ریدایرکت 301، شناسایی آن و اعتبار دهی به صفحه جدید با تکیه بر رتبه بندی و اعتماد بر صفحه پیشین میکنند.
این فرآیند زمانی طولانی تر میشود که عنکبوتهای موتورهای جستجو (منظور رباتهای کراولر) به ندرت به سراغ صفحه وب پیشین رفته باشند یا آدرس جدید به خوبی بارگذاری نشود.
گزینههای دیگر برای ریدایرکت، نظیر ریدایرکت 302 و متا تگ رفرش، جایگزینهای ضعیف تری هستند، زیرا این روشها به طور کامل رتبه بندی و ارزش صفحه برای موتورهای جستجو را منتقل نمی کنند و از این نظر از ریدایرکت 301 ضعیف تر هستند.
انتقال محتوا زمانی پیچیده تر میشود که یک سایت به طور کامل دامنه خود را تغییر میدهد یا محتوا از یک دامنه به دیگری منتقل میشود.
راهنمای عملی انواع ریدایرکت
در ادامه، به صورت عملی و بر اساس مثال واقعی، نحوه ریدایرکت کردن برگه ها و دامنه را در شرایط مختلف آموزش می دهیم. این بخش از مقاله از سایت Moz.com برداشته شده و تجربیات واقعی این برند است.
ریدایرکتهای 301 در آپاچی
زمانی که ما اولین وب سایت خود با عنوان seomoz.org را منتشر کردیم، این وب سایت در آدرس www.socengine.com/seo/ میزبانی میشد و بر روی این دامنه میزبانی انجام نمی گرفت. زمانی که توسعه دهندههای اصلی سایت را به سرور اختصاصی خود منتقل میکردند، تمایل داشتند که این سایت به جای زیرمجموعه سایت socengine از طریق دامنه خود قابل دست یابی باشد.
توسعه دهندههای تیم ما تمایل داشتند بازدید کنندهها با مراجعه به سایت www.socengine.com/seo/ به آدرس www.seomoz.org ریدایرکت شوند. این هدایت نیاز به همگام سازی چندین فایل و نام فولدر و انجام ریدایرکت 301 برای تحقق اهداف سئو داشت. همچنین نیاز بر این بود که http://seomoz.org نیز هدایت شود، این موضوع برای اهداف زیبایی شناختی سایت و جلوگیری از خطاهای کانونی سازی (canonicalization) اهمیت داشت.
راه حل
ساده ترین رویکرد انجام این پروژه افزودن ریدایرکتهای 301 به کد PHP پشتیبان seomoz.org با استفاده از عملگر هدر (header) بود. با این اوصاف، تیم توسعه دهنده با استفاده از قدرت ماژول بازنویسی ماد آپاچی (apache module mod_rewrite)، توانست الگوهای ویژه را برای تمامی فولدرها منطبق سازد و آنها را بدون نیاز به دستکاری در تمام اسکریپتهای PHP به آدرسهای جدید خود هدایت کند.
کد ریدایرکت 301
برای انجام این کار، نیاز به نصب ماژول بازنویسی ماد آپاچی (apache module mod_rewrite) در وب سرور بود. بیشتر نصبهای آپاچی به طور پیش فرض بازنویسی ماد (mod_rewrite) را در خود دارند. سرور اصلی SEOmoz نیز با لینکوس نسخه distribution FreeBSD عمل میکرد و بازنویسی ماد (mod_rewrite) به طور پیش فرض بر روی آن قرار داشت.
برای این که بررسی کنیم این ماژول در سرور وجود دارد، دولوپر میتواند با اضافه کردن خط زیر به فایل تنظیمات (configuration) آپاچی یا یک فایل .htaccess قابل اجرا، از عملکرد درست آن مطمئن شود:
RewriteEngine On
زمینه (Context)
ماژول بازنویسی ماد (mod_rewrite) در هر سرور یا هر پوشه عمل میکند. زمینه هر سرور نیازمند این است که توسعه دهنده فایل تنظیمات (configuration) آپاچی (httpd.conf) را تغییر دهد. زمینه پوشه از فایلهای .htaccess ای استفاده میکند که در هر فولدر وجود دارند و کاربر میخواهد به تغییر آنها بپردازد. اگر وب مستر قادر به دست یابی به httpd.conf نباشد، میتواند از فایلهای .htaccess استفاده کند.
Regular Expressions (aka Regexes)
در ویکی پدیا بیان مسئل زیر در مورد regular expression گفته شده است:
regular expression به رشته ای گفته میشود که به توصیف یا مطابقت مجموعه ای از رشتهها (strings) بر اساس مجموعه قواعد ترکیب (syntax) مشخص میپردازد. regular expression توسط ادیتورهای متنی و ابزارهای مختلف برای جستجو و دست کاری بدنه متن بر اساس الگوهای مشخص به کار میروند.
استفاده از regular expression مهارتی ارزشمند برای برنامه نویسها و مدیران سیستمها محسوب میشود. برای ریدایرکت آدرس بر اساس مثالی که پیش از این شرح دادیم، درک مفاهیم بنیادین Regex ها اهمیت زیادی دارد.
فهرست بعدی لیستی از کاراکترها و اپراتورهایی ارائه میدهد که در Regex های مربوط به حل مشکل فوق به کار رفته اند:
- dot . تطابق پریودها در هر چیز
- Star * تطابق ستاره در صفر مورد یا بیشتر از کاراکترهای پیشین
- Plus + تطابق علامت جمع در یک مورد یا بیشتر از کاراکترهای پیشین
- parentheses () بسته بودن پرانتزها ، بسته بودن پرانتزها باعث میشود مقادیری (Values) که در پرانتز هستند به ذخیره سازی چیزی بپردازند که از نظر متغیری که در آینده استفاده میشود هماهنگ هستند، این موضوع با نام ارجاع به قبل (back-reference) شناخته میشود
- Line (|) بسته بودن (value1|value2)، بستن دو یا چند مقدار (Value) در پرانتز و جدا سازی آنها با کاراکتر | مشابه این است که بگوییم "مقدار یک یا مقدار 2 را منطبق سازیم (matching)".
ریدایرکت فایلها یا فولدرها از یک دامنه به دامنه دیگر
توسعه دهنده اصلی در Moz نیازمند ریدایرکت کردن از سرور قدیمی به سرور جدید با حفظ نامهای پیشین بود.
مثال
Redirect: http://www.socengine.com/seo/s… To: /somefile.php
راه حل
برای انجام این کار کافی است دستور بعدی را به فایلهای موجود در سرور socengine.com اضافه کنید:
RedirectMatch 301 /seo/(.*) /$1
توضیح
در این جا از Regex به صورت /seo/(.*) استفاده شده است، این دستور به آپاچی میگوید که فولدر سئو با صفر مورد یا بیشتر از کاراکترهای پیشین انطباق دهد. دقت کنید که در اطراف .* از پرانتز استفاده شد، این موضوع به آپاچی میگوید که رشته (string) انطباق یافته را به صورت یک مرجع پیشین (back-reference) ذخیره کند. این مرجع پیشین در انتهای آدرسی قرار میگیرد که آدرس اولیه به آن هدایت شده است و در این جا به صورت $1 نمایش داده شده است.
ریدایرکت نام های میزبان کانونیکال (Canonical)
توسعه دهنده اصلی سایت Moz نیاز به ریدایرکت هر درخواستی داشت که با نام دامنه www.seomoz.org آغاز نمی شد، تا بدین ترتیب دامنههایی که در آنها www قرار نداشت نیز لحاظ شوند. این اقدام تنها برای افزایش زیبایی انجام نگرفت، بلکه برای جلوگیری از خطاهای کانونی سازی (canonicalization) نیز ضرورت داشت.
Redirect: http://seomoz.org/
To: http://www.seomoz.org/
Redirect: http://mail.seomoz.org/
To: http://www.seomoz.org
Redirect: http://seomoz.org/somefile.php
To: http://www.seomoz.org/somefile
راه حل
کافی است برای رفع مشکل دستورات بعدی اضافه شوند:
RewriteCond %{HTTP_HOST} *!^www*.seomoz\.org [NC]
RewriteRule (.*) http://www.seomoz.org/$1 [L,R=301]
توضیح
این دستور به آپاچی میگوید به بررسی میزبانی بپردازد که بازدیدکننده میخواهد به آن دسترسی پیدا کند و اگر این میزبان با www.seomoz.org برابر نبود، به آن ریدایرکت کند.
علامت تعجب موجود (!) پیش از نام سایت، مقایسه را بی اثر میکند و میگوید: “اگر میزبان آدرس www.seomoz.org نیست، آن گاه عمل RewriteRule را انجام بده”. در مورد ما، RewriteRule آدرسهای اشتباه را به www.seomoz.org هدایت میکند، در حالی که این عمل همان فایلی را که در مرجع پیشین (back-reference) درخواست شده است را در اختیار قرار میدهد.
ریدایرکت بدون حفظ نام فایل
چندین فایلی که در سرور قدیمی وجود داشته اند، در سرور جدید حاضر نخواهند بود. به جای حفظ نامهای فایل در ریدایرکت (که موجب خطای 404- یافت نشد در سرور جدید میشود)، فایلهای قدیمی باید در آدرس اصلی (root) دامنه جدید ریدایرکت شوند.
Redirect: http://www.socengine.com/seo/s
To: http://www.seomoz.org
راه حل
برای انجام این کار کافی است دستور بعدی افزوده شود:
RedirectMatch 301 /seo/someoldfile.php http://www.seomoz.org
توضیح
با حذف تمامی پرانتزها، تمامی درخواستهای /seo/someoldfile.php باید به آدرس root از http://www.seomoz.org ریدایرکت شوند.
ریدایرکت GET String
در بعضی از اسکریپتهای PHP نامهای متفاوتی وجود دارند و با این حال GET String ثابت باقی میماند. توسعه دهندههای Moz نیاز به ریدایرکت بازدیدکنندهها به اسکریپت PHP جدید ضمن حفظ این GET stringها داشتند. GET string به مجموعه از کاراکترها گفته میشود که بعد از یک نام فایل در آدرس قرار میگیرند و برای انتقال اطلاعات به یک صفحه وب به کار میروند. مثالی از GET string در آدرس /myfile.php?this=that&foo=bar به صورت ?this=that&foo=bar خواهد بود.
Redirect: http://www.socengine.com/seo/c…
To: http://www.seomoz.org/artcat.p…
راه حل
برای حل این مسئله کافی است دستور زیر را اضافه کنید:
RedirectMatch 301 /seo/categorydetail.php(.*) http://www.seomoz.org/artcat.php$1
توضیح
بار دیگر در این دستور Regexی به صورت (.*) مشاهده میکنید، این Regex به آپاچی میگوید به انطباق صفر مورد یا بیشتر از هر کاراکتر بپردازد و سپس آن را به صورت یک مرجع پیشین (back-reference) $1 ذخیره کند. از آن جایی که یک $1 بعد از /seo/categorydetail.php وجود دارد، اکنون Get string به این فایل PHP جدید ریدایرکت میشود.
ریدایرکت زمانی که پسوندهایس فایل را تغییر میدهید
در سناریو اصلی، پوشه یا فایلهایی وجود دارند که در سرور قبلی هستند و از ترکیبی از HTML و PHP ساخته شده اند. در سرور جدید، این فایلها کاملا PHP خواهند بود و نیاز به ریدایرکت منطق دارند تا نشانیهای پیشین به طور کامل به افزونه جدید تغییر یابد.
Redirect: http://www.socengine.com/seo/g…
To: http://www.seomoz.org/articles…
Redirect: http://www.socengine.com/seo/g…
To: http://www.seomoz.org/articles…
راه حل
برای حل این مسئله کافی است دستور زیر را اضافه کنید:
RedirectMatch 301 /seo/guide/(.*)\.(php|html) http://www.seomoz.org/articles/$1.php
توضیح
(.*) به تطبیق صفر مورد یا بیشتر از هر کاراکتر و ذخیره سازی آن به صورت یک مرجع پیشین (back-reference) $1 میپردازد. \.(php|html) به آپاچی میگوید که به انطباق یک دوره چه با پسوندهای PHP و چه Html بپردازد و آن را به صورت مرجع پیشین (back-reference) $2 ذخیره کند (اگر چه این موضوع در این مثال استفاده نشده است).
به پریود گریخته با \ دقت کنید. این دستور برای حصول اطمینان از عدم تفسیر پریود به صورت هر کاراکتر توسط آپاجی اضافه شده است، و در واقع به یک پریود واقعی اشاره ندارد. بستن عبارت PHP یا Html و جدا کردن آنها با کاراکتر “|” به این معنی است که به هماهنگ سازی هر کدام از مقادیر (values) پرداخته شود. بنابراین، اگر (php|html|css|js|jpg|gif) ، Regex به این معنی است که تطابق برای هر فایلی با دامنههای موجود در پرانتز انجام گیرد.
نتیجه گیری
با بهره برداری از قدرت mod_rewrite و استفاده از جادوی Regular Expressionها، توسعه دهندههای اصلی Moz توانستند به توسعه مجموعه ای از قواعد ساده برای ریدایرکت کردن صفحات وب بپردازند. با استفاده از ریدایرکتهای 301، آنها این عمل را به شکل پیاده ساختند که مطابق نیازمندیهای موتورهای جستجو باشد.