وب سایت ها ساختار را تغییر می دهند، صفحات را حذف می کنند و اغلب از یک دامنه به دامنه دیگر منتقل می شوند. مدیریت صحیح تغییر مسیرها برای از دست ندادن رتبه بندی موتورهای جستجو و درک موتورهای جستجو از تغییراتی که انجام داده اید بسیار مهم است.
تغییر مسیرها دارای یک کد وضعیت هستند که با شماره سه شروع می شود (یعنی 3XX). 100 کد وضعیت مختلف ممکن وجود دارد اما تنها تعداد کمی برای حمل اطلاعات خاص پیاده سازی شده اند.
در این راهنما، ریدایرکت های 3XX مرتبط با سئو را پوشش خواهیم داد.
301: برای همیشه جابجا شده است (Moved Permanently)
این تغییر مسیر معروف به کاربر نشان میدهد که منبع به مکان دیگری تغییر کرده است و باید از URL جدید برای درخواستهای بعدی استفاده کند. وقتی موتورهای جستجو ریدایرکت 301 را می بینند، رتبه صفحه قدیمی را به صفحه جدید منتقل می کنند.
قبل از ایجاد تغییر، هنگام تصمیم گیری برای استفاده از تغییر مسیر 301 باید مراقب باشید. این به این دلیل است که اگر بعداً نظر خود را تغییر دهید و تصمیم به حذف ریدایرکت 301 بگیرید، ممکن است URL قدیمی شما دیگر رتبه ای نداشته باشد.
حتی اگر تغییر مسیرها را عوض کنید، به شما کمک نمی کند صفحه قدیمی را به موقعیت رتبه بندی قبلی خود برگردانید. بنابراین نکته اصلی که باید به خاطر داشته باشید این است که هیچ راهی برای لغو تغییر مسیر 301 وجود ندارد.
(* برای مبتدیانی که ممکن است با نام عمومی اشتباه گرفته شوند، به جای مرورگر از کلاینت استفاده می شود زیرا نه تنها مرورگرها می توانند URL ها را مرور کنند، بلکه ربات های موتورهای جستجو را که مرورگر نیستند نیز می توانند مرور کنند.)
307: تغییر مسیر موقت (Temporary Redirect)
در HTTP 1.1، تغییر مسیر 301 به این معنی است که منبع به طور موقت منتقل شده است و کاربر باید از URL منبع اصلی برای درخواست های بعدی استفاده کند.
برای سئو، این بدان معناست که کاربر باید یک تغییر مسیر را دنبال کند اما موتورهای جستجو نباید پیوندهای خود را در SERP به صفحه جدید و موقت به روز کنند.
در ریدایرکت 307، بر خلاف ریدایرکت 301، رتبه صفحه از منبع اصلی به منبع جدید منتقل نمی شود.
302: مسیر پیدا شد (Found)
این بدان معناست که منبعی که کاربر به دنبال آن است در URL دیگری در نسخه HTTP 1.1 یافت شده است اما به طور موقت در HTTP 1.0 منتقل شده است.
302 در مقابل 307
تقریباً در همه موارد، ریدایرکت های 302 و 307 یکسان خواهند بود. اما کد وضعیت 302 لزوماً به این معنی نیست که کاربر باید یک تغییر مسیر را دنبال کند و اگر تصمیم به ماندن در آنجا داشته باشد خطا محسوب نمی شود.
کاربران مدرن به احتمال زیاد مقصد جدید را دنبال خواهند کرد، اما برخی از کاربران قدیمی ممکن است به اشتباه در همان URL باقی بمانند.
بر خلاف کد وضعیت 302، کد وضعیت 307 تضمین می کند که روش درخواست تغییر نخواهد کرد. برای مثال، درخواست GET باید به GET و POST به POST ادامه یابد.
با کد وضعیت 302، برخی از کاربران قدیمی یا باگ ممکن است روش را تغییر دهند که ممکن است باعث رفتار غیرمنتظره شود.
برای تغییر مسیرهای موقت، می توانید از 302 یا 307 استفاده کنید - اما من 307 را ترجیح می دهم.
برای کارهای تغییر مسیر معمولی، بسته به نوع تغییری که در وب سایت خود اعمال می کنید، باید از کدهای وضعیت 301 (تغییر مسیر دائمی) و 307 (تغییر مسیر موقت) استفاده شود. در هر دو مورد، نحوه تغییر مسیرها تغییر نمی کند.
میتوانید از طریق فایلهای پیکربندی سرور .htaccess در Apache، فایل example.conf در Nginx، یا از طریق افزونهها، اگر از وردپرس استفاده میکنید، هدایت کنید.
در همه موارد، آنها دستور یکسانی برای نوشتن قوانین تغییر مسیر دارند. آنها فقط با دستورات مورد استفاده در فایل های پیکربندی متفاوت هستند. به عنوان مثال، تغییر مسیر در آپاچی به شکل زیر خواهد بود:
Options +FollowSymlinks
RewriteEngine on
RedirectMatch 301 ^/oldfolder/ /newfolder/
در سرورهای Nginx به صورت زیر خواهد بود:
rewrite ^/oldfolder/ /newfolder/ permanent;
دستورات مورد استفاده برای گفتن کد وضعیت سرور تغییر مسیر و دستور عمل متفاوت است. برای مثال:
کد وضعیت تغییر مسیر سرور: "301" در مقابل "Permanent"
دستور عمل: "RedirectMatch" در مقابل "Rewrite".
اما نحوه تغییر مسیر (^/oldfolder/ /newfolder/) برای هر دو یکسان است.
در آپاچی، مطمئن شوید که ماژولهای mod_rewrite و mod_alias (که مسئول مدیریت تغییر مسیرها هستند) در سرور شما فعال هستند.
از آنجایی که پرکاربردترین انواع سرور Apache است، در اینجا نمونه هایی برای فایل های apache .htaccess آورده شده است. مطمئن شوید که فایل htaccess دارای این دو خط است:
Options +FollowSymlinks
RewriteEngine on
قوانین را در زیر قوانین تغییر مسیر قرار دهید.
برای درک مثال های زیر، می توانید به جدول زیر مراجعه کنید.
* = صفر یا چند بار
+ = یک یا چند بار
. = هر کارکتر واحد
? = صفر یا یک بار
^ = شروع رشته
$ = انتهای رشته
a|b = OR operadn "|" a یا b
(z) = مطابقت را به خاطر می آورد تا هنگام فراخوانی $1 استفاده شود
یک URL واحد را تغییر دهید
رایج ترین و پرکاربردترین نوع تغییر مسیر که هنگام حذف صفحات یا تغییر آدرس صفحات استفاده می شود. برای مثال، فرض کنید URL را از /old-page/ به /new-page/ تغییر داده اید. قانون تغییر مسیر خواهد بود:
RewriteRule ^old-page(/?|/.*)$ /new-page/ [R=301,L]
یا
RedirectMatch 301 ^/old-page(/?|/.*)$ /new-page/
تنها تفاوت این دو روش این است که روش اول از ماژول Apache mod_rewrite و روش دوم از mod_alias استفاده می کند. با استفاده از هر دو روش قابل انجام است.
عبارت منظم "^" به این معنی است که URL باید با "/old-page" شروع شود، در حالی که (/?|/.*)$ نشان می دهد که هر چیزی که پس از "/old-page/" با اسلش "/" یا بدون تطابق دقیق باشد، باید هدایت شود به /new-page/.
ما همچنین میتوانیم از (.*) به طور مثال ^/old-page(.*) استفاده کنیم، اما مشکل اینجاست که اگر صفحه دیگری با URL مشابه مانند /old-page-other/ دارید، زمانی که ما تغییر مسیر دهیم، این صفحه نیز هدایت میشود. فقط می خواهم /old-page/ را تغییر مسیر دهم.
URL های زیر مطابقت دارند و به صفحه جدیدی هدایت می شوند:
old-page/
/new-page/
/old-page
/new-page/
/old-page/?utm_source=facebook.com
/new-page/?utm_source=facebook.com
/old-page/child-page/
/new-page/
هر تغییری از URL صفحه را به یک آدرس جدید هدایت می کند. اگر از ریدایرکت به شکل زیر استفاده کنیم:
Redirect 301 /old-page/ /new-page/
...بدون عبارات منظم، سپس تمام URL هایی که دارای رشته پرس و جوی UTM هستند، به عنوان مثال. /old-page?utm_source=facebook.com (که رایج است زیرا URL ها برای اشتراک گذاری در شبکه های اجتماعی استفاده می شوند)، در نهایت به 404 تبدیل می شود.
حتی /old-page بدون اسلش انتهایی "/" به 404 ختم می شود.
تغییر مسیر All Except
فرض کنید ما مجموعه ای از URL ها مانند /category/old-subcategory-1/، /category/old-subcategory-2/، /category/final-subcategory/ داریم و می خواهیم همه زیر شاخه ها را در /category/final-subcategory/ ادغام کنیم. ما در اینجا به قانون "همه به جز" نیاز داریم.
RewriteCond %{REQUEST_URI} !/category/final-subcategory/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(category/). /category/final-subcategory/ [R=301,L]
در اینجا، میخواهیم همه را در زیر /category/ در خط سوم تغییر مسیر دهیم، به جز اگر /category/final-subcategory/ در خط چهارم باشد. همچنین در خط دوم قانون "!-f" داریم که به معنای نادیده گرفتن هر فایلی مانند تصاویر، CSS یا فایل های جاوا اسکریپت است.
در غیر این صورت، اگر دارایی هایی مانند "/category/image.jpg" داشته باشیم، به "/final-subcategory/" نیز هدایت می شود و باعث شکستن تصویر می شود.
تغییر دایرکتوری
در صورتی که تغییر ساختار دستهبندی را انجام دادهاید و میخواهید همه چیز را در پوشه قدیمی به فهرست جدید منتقل کنید، میتوانید از قانون زیر استفاده کنید.
RewriteRule ^old-directory$ /new-directory/ [R=301,NC,L]
RewriteRule ^old-directory/(.*)$ /new-directory/$1 [R=301,NC,L]
من از $1 در هدف استفاده کردم تا به سرور بگویم که باید همه چیز را در URL که پس از /old-directory/ (یعنی /old-directory/subdirectory/) قرار دارد به خاطر بسپارد و آن را (یعنی "/subdirectory/" ) به آدرس ارسال کند. مقصد در نتیجه به /new-directory/subdirectory/ هدایت می شود.
برای این کار از دو قانون استفاده کردم: یک مورد بدون اسلش انتهایی و دیگری با اسلش انتهایی.
من میتوانم آنها را در یک قانون با استفاده از (/?|.*)$ RegExp در انتها ترکیب کنم، اما زمانی که URL درخواستی بدون اسلش دنبالهای دارای یک رشته جستجو باشد، مشکل ایجاد میکند و اسلش «//» را به انتهای URL اضافه میکند. (به عنوان مثال، "/old-directory?utm_source=facebook" به "/new-directory//?utm_source=facebook" هدایت می شود).
یک کلمه را از URL حذف کنید
فرض کنید 100 تا URL در وب سایت خود با نام شهر "chicago" دارید و می خواهید آن را حذف کنید.
به عنوان مثال، برای URL http://yourwebiste.com/example-chicago-event/، قانون تغییر مسیر به این صورت خواهد بود:
RewriteRule ^(.*)-chicago-(.*) http://%{SERVER_NAME}/$1-$2 [NC,R=301,L]
اگر URL مثال به شکل http:// yourwebiste.com/example/chicago/event/ باشد، تغییر مسیر به صورت زیر خواهد بود:
RewriteRule ^(.*)/chicago/(.*) http://%{SERVER_NAME}/$1/$2 [NC,R=301,L]
متعارف سازی
داشتن URL های متعارف مهمترین بخش سئو است.
در صورت عدم وجود، ممکن است وب سایت خود را با مشکلات محتوای تکراری به خطر بیندازید زیرا موتورهای جستجو URL های دارای نسخه های "www" و "non-www" را به عنوان صفحات مختلف با محتوای مشابه در نظر می گیرند.
بنابراین، اجباری است که مطمئن شوید وب سایت را فقط با یک نسخه که انتخاب می کنید اجرا می کنید.
اگر می خواهید وب سایت خود را با نسخه www اجرا کنید، از این قانون استفاده کنید:
RewriteCond %{HTTP_HOST} ^yourwebsite\.com [NC]
RewriteRule ^(.*)$ http://www.yourwebsite.com/$1 [L,R=301]
برای نسخه "غیر www":
RewriteCond %{HTTP_HOST} ^www\.yourwebsite\.com [NC]
RewriteRule ^(.*)$ http://yourwebsite.com/$1 [L,R=301]
اسلش انتهایی نیز بخشی از متعارف سازی است زیرا آدرس های اینترنتی با اسلش در انتها یا بدون آن به طور متفاوتی رفتار می کنند.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])$ /$1/ [L,R=301]
با این کار مطمئن می شوید /example-page به /example-page/ هدایت می شود. می توانید به جای اضافه کردن، اسلش را حذف کنید، سپس به قانون دیگر زیر نیاز خواهید داشت:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
تغییر مسیر HTTP به HTTPS
پس از ابتکار گوگل برای تشویق صاحبان وب سایت به استفاده از SSL، مهاجرت به HTTPS یکی از تغییر مسیرهای رایج است که تقریباً هر وب سایتی دارد.
قانون بازنویسی زیر را می توان برای تحمیل HTTPS در هر وب سایت مورد استفاده قرار داد.
RewriteCond %{HTTP_HOST} ^yourwebsite\.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www\.yourwebsite\.com [NC]
RewriteRule ^(.*)$ https://www.yourwebsite.com/$1 [L,R=301,NC]
اساساً، میتوانید با استفاده از آن، تغییر مسیر www یا non-www را در یک قانون تغییر مسیر HTTPS ترکیب کنید.
تغییر مسیر از دامنه قدیمی به جدید
این نیز یکی از پرکاربردترین تغییر مسیرها در زمانی است که تصمیم به تغییر برند دارید و باید دامنه خود را تغییر دهید. قانون زیر old-domain.com را به new-domain.com هدایت می کند.
RewriteCond %{HTTP_HOST} ^old-domain.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.old-domain.com$
RewriteRule (.*)$ http://www.new-domain.com/$1 [R=301,L]
از دو حالت استفاده میکند: یکی با نسخه «www» URLها و دیگری «غیر www» زیرا هر صفحهای به دلایل تاریخی ممکن است پیوندهای ورودی به هر دو نسخه داشته باشد.
اکثر صاحبان سایت از وردپرس استفاده می کنند و ممکن است نیازی به استفاده از فایل htaccess. برای تغییر مسیر نداشته باشند، اما در عوض از یک افزونه استفاده کنند.
مدیریت تغییر مسیرها با استفاده از افزونه ها ممکن است کمی متفاوت از آنچه در بالا توضیح دادیم باشد و ممکن است لازم باشد اسناد آنها را بخوانید تا بتوانید RegExp را به درستی برای پلاگین خاص مدیریت کنید.
از پلاگین های موجود، من یک افزونه رایگان به نام Redirection را توصیه می کنم که دارای پارامترهای زیادی برای کنترل قوانین تغییر مسیر و بسیاری از اسناد مفید است.
تغییر مسیر رویه های نامناسب
1.هدایت همه ی URL های 404 به صفحه اصلی
این مورد اغلب زمانی اتفاق میافتد که برای بررسی همه URLهای 404 خود زمان ندارید و آنها را به صفحه مناسب نگاشت میکنید.
به گفته گوگل، هنوز هم همه آنها به عنوان 404 در نظر گرفته می شوند.
بله، این یک روش عالی نیست (کاربران را گیج می کند)، و به هر حال ما اکثراً آنها را به عنوان 404 در نظر می گیریم (آنها Soft 404 هستند)، بنابراین هیچ چیز مثبتی وجود ندارد. و به این معنی نیست که شرایط نامناسب است، اما پیچیدگی بیشتری بدون دلیل موجه دارد؛ در عوض یک صفحه 404 بهتر بسازید.
جان مولر- 8 ژانویه 2019
اگر صفحات زیادی از این دست دارید، باید به فکر ایجاد صفحات زیبای 404 باشید و کاربران را به مرور بیشتر یا یافتن چیزی غیر از آنچه که به دنبال آن بودند با نمایش یک گزینه جستجو دعوت کنید.
اکیداً توسط گوگل توصیه می شود که محتوای صفحه تغییر مسیر داده شده باید معادل صفحه قدیمی باشد. در غیر این صورت ممکن است چنین تغییر مسیری به عنوان Soft 404 در نظر گرفته شود و رتبه آن صفحه را از دست بدهید.
2.تغییر مسیرهای خاص اشتباه در صفحه موبایل
اگر URL های مختلفی برای وب سایت های دسکتاپ و تلفن همراه دارید (یعنی «yoursite.com» برای دسکتاپ و «m.yoursite.com» برای تلفن همراه)، باید مطمئن شوید که کاربران را به صفحه مناسب نسخه موبایل هدایت می کنید.
صحیح: «yoursite.com/sport/» به «m.yoursite.com/sport/»
اشتباه: «yoursite.com/sport/» به «m.yoursite.com»
همچنین، باید مطمئن شوید که اگر یک صفحه روی دسکتاپ 404 باشد، در موبایل نیز باید 404 باشد.
اگر نسخه موبایلی برای صفحه ای ندارید، می توانید از تغییر مسیر به نسخه موبایل خودداری کنید و آنها را در صفحه دسکتاپ نگه دارید.
3.استفاده از Meta Refresh
امکان تغییر مسیر با استفاده از تگ متا رفرش مانند مثال زیر وجود دارد:
اگر این تگ را در /old-page/ وارد کنید، کاربر بلافاصله به /new-page/ هدایت می شود. این تغییر مسیر توسط گوگل منع نشده است اما آنها به وضوح استفاده از آن را توصیه نمی کنند.
یک تغییر مسیر از نوع متا رفرش فقط باید کار کند. ما آن را به دو دلیل توصیه نمیکنیم: UX (صفحه را در تاریخچه مرورگر نگه میدارد، afaik) و زمان پردازش (برای دیدن آن باید صفحه را تجزیه کنیم). پس از پردازش، درست مانند تغییر مسیر است.
جان مولر - 2 مارس 2018
به گفته جان مولر، موتورهای جستجو ممکن است نتوانند آن نوع تغییر مسیر را به درستی تشخیص دهند. همین امر در مورد تغییر مسیرهای جاوا اسکریپت نیز صادق است.
4.تغییر مسیرهای خیلی زیاد
این پیغام زمانی نمایش داده میشود که شما یک عبارت منظم اشتباه تنظیم کردهاید و در یک حلقه بینهایت ختم میشود.
معمولاً این اتفاق زمانی می افتد که شما یک زنجیره تغییر مسیر دارید.
فرض کنید صفحه 1 را خیلی وقت پیش به صفحه 2 هدایت کرده اید. اکنون ممکن است فراموش کرده باشید که صفحه 1 تغییر مسیر داده است و تصمیم بگیرید که صفحه 2 را دوباره به صفحه 1 هدایت کنید.
در نتیجه، شما با یک قانون مانند زیر مواجه خواهید شد:
RewriteRule ^page1 /page2 [R=301,NC,L]
RewriteRule ^page2 /page1 [R=301,NC,L]
این یک حلقه بی نهایت ایجاد می کند و خطای نشان داده شده در بالا را ایجاد می کند.
نتیجه
هنگامی که یک تغییر مسیر دائمی را شروع می کنید، نمی توان آن را به راحتی تغییر داد (کلمه دائمی به معنای واقعا دائمی و همیشگی است).
این به این دلیل است که هنگامی که گوگل چنین تغییر مسیری را تشخیص دهد، PageRank را به صفحه جدید منتقل می کند و URL موجود در SERP ها را برای استفاده از صفحه جدید تغییر می دهد.
در صورتی که یک وب سایت بزرگ با ده ها هزار صفحه از یک دامنه قدیمی به یک دامنه جدید یا حتی از HTTP به HTTPS مهاجرت می کنید، توصیه می شود ابتدا یک تغییر مسیر موقت 302 انجام دهید و مطمئن شوید که همه قوانین تغییر مسیر به درستی کار می کنند و به گوگل نگاه کنید. داده های تجزیه و تحلیل برای اطمینان از اینکه هیچ نتیجه غیرمنتظره ای وجود ندارد (به طور مثال برخی از خطاهای ناشناخته که باعث ایجاد تعداد صفحات زیادی با خطای 404 می شود) سپس تغییر مسیر 302 را به 301 دائمی تغییر دهید.
در صورتی که با مقصد تغییر مسیر دائمی 301 اشتباه کرده اید و می خواهید به URL دیگری تغییر مسیر دهید، توصیه می شود از تغییر مسیرهای زنجیره ای خودداری کنید و همه پیوندها را به URL جدید تغییر دهید.