چگونه کدهای HTTP سرور را بررسی کنیم؟
کد HTTP 200 یا وضعیت Ok چیست؟
کد خطای 404، صفحه مورد نظر پیدا نشد!
چگونه کد خطای 404 HTTP را تنظیم کنیم؟
تنظیم خطای 404 با دستورات فایل htaccess.
تنظیم خطای 404 با برنامه نویسی PHP
خطای Soft 404 چیست؟
کد 301 HTTP ریدایرکت چیست؟
تنظیم کد 301 ریدایرکت با دستورات فایل htaccess.
تنظیم کد 301 ریدایرکت با برنامه نویسی PHP
مقایسه خطای 404 و کد 301 ریدایرکت (Redirect)

یکی از مهم ترین مسائل در دانش سئو (SEO مخفف Search Engine Optimization و به معنی بهینه سازی صفحات وب برای موتورهای جستجو) این است که در پاسخ درخواست موتورهای جستجو برای دریافت محتوای URL چه کد HTTP ای باید از طرف سرور تنظیم شود، شاید برای کاربران عادی سایت ها و وبلاگ ها این مسئله چندان فرقی نکند و مهم صفحه و محتوایی باشد که نمایش داده می شود، اما از نظر موتورهای جستجو اینکه یک سرور در پاسخ به درخواست دریافت URL چه کد HTTP ای برمی گرداند می تواند نقش تعیین کننده ای در نحوه عملکرد آنها داشته باشد، بعضا مشاهده می شود که به دلیل اشتباه یا ناآگاهی از نحوه عملکرد کدهای HTTP حتی کلیه محتوای یک سایت که در ظاهر مشکلی نداشته از لیست نتایج جستجو حذف شده است، از جمله مهم ترین این اشتباهات استفاده نادرست از کد خطای 404 به جای کد 301 ریدایرکت است، به همین دلیل در این مطلب می خواهیم این دو کد را با هم مقایسه کنیم تا با کاربردها و تفاوت های آنها بیشتر آشنا شویم.
چگونه کدهای HTTP سرور را بررسی کنیم؟
ممکن است برایمان این سوال مطرح باشد که چگونه می توانیم مطمئن شویم سرور در پاسخ درخواست ها چه کد وضعیت HTTP را برمی گرداند؟
در پاسخ باید گفت در مرورگرهایی نظیر فایرفاکس، گوگل کروم و... معمولا قسمتی تحت عنوان Web Developer، Developer Tools، Web Console یا عباراتی شبیه به این وجود دارد که در آنها ابزارهای بسیار خوبی برای برنامه نویسان وب و مدیران سایت ها ارائه می شود، به طور مثال هنگام ورود به یک سایت یا صفحه وب جزئیات کاملی از پاسخ های سرور نمایش داده می شود.

نکته: معمولا با زدن دکمه F12 صفحه کلید در مرورگرها قسمت مربوط به بررسی کدهای وضعیت HTTP و سایر امکانات خطایابی در دسترس قرار می گیرد.
علاوه بر این گوگل نیز در ابزار وبمستر خود امکانی تحت عنوان Fetch as Googlebot دارد که با آن می توانیم صفحات خود را با ربات گوگل دریافت و از کارکرد صحیح آنها اطمینان حاصل کنیم، این خدمات گوگل در آدرس
https://www.google.com/webmasters
ارائه می شود.کد HTTP 200 یا وضعیت Ok چیست؟
قبل از اینکه بخواهیم خطای 404 را با کد 301 ریدایرکت مقایسه کنیم باید اول ببینیم که پاسخ سرور در حالت عادی چگونه است و اصلا این کدها به چه معنی هستند؟!
طبق پروتکل های وب و از جمله پروتکل HTTP در تعامل بین واسط کاربری (User-agent) و سرور (Server) به طور مثال تعامل بین مرورگر کاربر و سرور یک سایت کدهایی از طرف سرور به عنوان پاسخ به درخواست مرورگر ارسال می شود که وضعیت منبع درخواست شده را تعیین می کند، به فرض اگر منبع درخواستی از URL یک فایل تصویر بوده:
http://example.com/images/tree.png
و این فایل قبلا حذف شده یا تغییر نام داده باشد کد 404 به عنوان عدم پیدا شدن منبع درخواستی یا کد 301 به عنوان تغییر نام یا تغییر محل نگهداری تصویر به مرورگر ارسال می شود، به همین صورت این کد در حالتی که همه چیز روبه راه و به اصطلاح وضعیت Ok باشد با عدد 200 ارسال می شود که نشان دهنده مرتب بودن اوضاع و بدون مشکل بودن سرور و منبع درخواستی است.Request URL: http://example.com/images/tree.png
Request Method: GET
Status Code: 200 OK
همان طور که گفتیم گاهی خواسته یا ناخواسته ممکن است مشکلی وجود داشته باشد و سرور نتواند منبع مورد نظر را به درستی در پاسخ درخواست ارسال کند و در اینجاست که اهمیت کدهای خطای HTTP مشخص می شود، شاید کاربر عادی (انسان) برایش چندان فرقی نکند که چه کدی از طرف سرور ارسال شده است اما موتورهای جستجو به دلیل ماهیتشان نمی توانند مثل انسان ها اوضاع را تجزیه تحلیل کنند و تنها به کدی که به عنوان پاسخ برگردانده می شود اهمیت می دهند، فرض کنیم سایتی دچار مشکل شده است و نمی تواند منبع درخواست شده را پیدا کند اما با این وجود در مقابل درخواست ربات جستجوگر کد 200 HTTP یا وضعیت Ok را برگرداند، واضح است که در چنین شرایطی ربات تصور می کند همه چیز مرتب است و صفحه دارای مشکل که بعضا ممکن است فاقد محتوا یا پیغام خطا در آن نشان داده شده باشد را ایندکس (ذخیره) می کند، از این وضعیت بدتر اینکه ممکن است منبع درخواستی در سرور وجود داشته باشد اما با ارسال کد HTTP نادرست (به فرض 404) ربات تصور کند که محتوای مد نظرش حذف شده و در دسترس نیست!برای جلوگیری از بروز اینگونه مشکلات باید در هر وضعیت از کد خطای 404 و 301 ریدایرکت متناسب آن استفاده کنیم که البته هر کدام موارد استفاده جداگانه ای دارند که در ادامه به آنها اشاره خواهیم کرد.
کد خطای 404، صفحه مورد نظر پیدا نشد!
کد خطای 404 یا Not Found به این معنی است که سرور نمی تواند منبع درخواستی (اعم از صفحه وب، فایل و...) را پیدا کند و دلیل خطای 404 یا Not Found معمولا حذف مطلب یا فایل و یا تغییر نام آنها است، گاهی مواقع برای اینکه به ربات های جستجوگر بگوییم که محتوای مد نظر آنها دیگر وجود ندارد و آن را از لیست جستجو حذف کنند، باید با کد 404 HTTP به درخواست آنها پاسخ دهیم، معمولا سرورها در حالت عادی این کار را برای لینک ها و فایل هایی که واقعا وجود ندارند به صورت خودکار انجام می دهند اما گاهی نیاز است که به صورت آگاهانه این کد خطا را تنظیم کنیم، به طور مثال برای دایرکتوری هایی که از نظر ما حساس هستند و نمی خواهیم ربات آنها را پیدا کند (به فرض دایرکتوری پنل مدیریت سایت) و یا در مورد لینک های داینامیک ناقص که ممکن است برنامه سمت سرور به جای خطای 404 صفحه اصلی سایت را نمایش دهد، در این حالت ها لازم است که به صورت دستی کد خطای 404 تنظیم کنیم و خواهیم دید که خزنده های جستجوگر بعد از چند بار مراجعه و درخواست محتوا، نهایتا منصرف شده و آن لینک را به عنوان لینک مُرده برچسب گذاری می کنند.
چگونه کد خطای 404 HTTP را تنظیم کنیم؟
تنظیم کد خطای 404 HTTP بسته به اینکه هدفتان چه باشد می تواند کار ساده و در عین حال حساسی باشد، اشتباه در این کار می تواند به قیمت حذف سایت یا صفحه از لیست نتایج جستجو تمام شود، با این وجود برای انجام این کار معمولا دو راه پرکاربرد وجود دارد:
استفاده از دستورات فایل htaccess. و یا استفاده از زبان های برنامه نویسی سمت سرور مانند PHP یا ASP که در مثال های زیر روش استفاده از دستورات فایل htaccess. و برنامه نویسی PHP را بررسی می کنیم.
تنظیم خطای 404 با دستورات فایل htaccess.
در سرورهای Apache معمولا می توانیم با ایجاد فایلی با نام htaccess. در ریشه سایت (فولدر www یا public_html) بر روی اینگونه عملکردهای سرور کنترل داشته باشیم (در صورت نیاز در این رابطه باید از پشتیبانی هاستمان سوال کنیم)، این فایل در صورت عدم وجود دقیقا به همین صورت صرفا با پسوند htaccess و بدون نام باید ساخته شود.
همانطور که گفتیم سرورها در حالت معمول به طور خودکار خطای 404 را برای صفحات و فایل هایی که به هر دلیل در دسترس نباشند نمایش خواهند داد، اما برای تنظیم صفحه ای سفارشی که کاربر را پس از دریافت خطا با اطلاعات مد نظرمان راهنمایی کند یا او را به آدرس دیگری منتقل نماید، می توان از دستوری مشابه نمونه دستور زیر استفاده کرد:
ErrorDocument 404 /404errorpage.html
کافی است دستور بالا را در فایل htaccess. قرار دهیم (اگر این فایل در سرور وجود ندارد می توانیم در محیط مدیر فایل سرور یا با کپی از فایل های موجود آن را بسازیم)، از این به بعد سرور به جای نمایش صفحه پیش فرض صفحه موجود در ریشه سایت با نام 404errorpage.html را نمایش خواهد داد، همچنین می توانیم این صفحه را در یک فولدر دیگر نیز قرار دهیم:ErrorDocument 404 /error/404errorpage.html
دقت کنیم که حتما آدرس ها باید به شکل بالا در یک خط و به صورت دایرکتوری تنظیم شده باشند، به فرض تنظیم به صورتhttp://www.example.com/error/404errorpage.html
صحیح نیست، از طرفی می توانیم درون صفحه 404 سفارشی از متاتگ های robots و مقادیر noindex استفاده کنیم تا از عدم ذخیره صفحه توسط ربات ها مطمئیم شویم.<meta name="robots" content="noindex">
این متاتگ را باید در قسمت header صفحه 404 بین تگ های head قرار دهیم.تنظیم خطای 404 با برنامه نویسی PHP
علاوه بر دستورات htaccess می توانیم با برنامه نویسی سمت سرور و کدهای PHP نیز خطاهای 404 را مدیریت کنیم، برای این کار کافی است با استفاده از توابع header در PHP کد 404 HTTP را در پاسخ درخواست کاربر از سرور به مرورگر (یا هر واسط کاربری دیگری) ارسال کنیم:
<?php
header('HTTP/1.0 404 Not Found');
?>
دقت کنیم که دستورات مربوط به header در PHP باید قبل از چاپ هر نوع خروجی متنی یا HTML اجرا شوند در غیر این صورت با خطا ی Warning: Cannot modify header information - headers already sent
مواجه خواهیم شد.خطای Soft 404 چیست؟
علاوه بر خطای 404 حقیقی که با دریافت کد 404 در سربرگ های HTTP مشخص می شود، نوعی خطای عدم پیدا شدن منبع درخواستی با عنوان Soft 404 error وجود دارد که در این حالت فقط صفحه ظاهری خطا نمایش داده می شود بدون اینکه واقعا کد 404 HTTP در Header پاسخ از طرف سرور تنظیم و ارسال شود (به جای کد 404 کد 200 و وضعیت Ok ارسال می شود)، هرچند این کار می تواند در مواقع خیلی ضروری که نیاز به غیر فعال کردن موقت یک منبع (صفحه، فایل و...) صرفا از دید کاربران (و نه موتورهای جستجو) است مفید باشد اما باید دقت کنیم که در صورت مراجعه ربات های جستجوگر و دریافت پاسخ 200، محتویات فعلی منبع جایگزین محتویات از پیش ایندکس شده آن خواهند شد و بدیهی است که ایندکس شدن محتوای صفحه خطا تاثیر منفی بر SEO را در پی خواهد داشت.
باید سعی کنیم تا حد امکان از عدم وجود خطاهای Soft 404 در کل سایتمان اطمینان حاصل کنیم و در صورتی که نیاز به استفاده از این نوع خطا داشتیم در حداقل زمان ممکن وضعیت را به حالت عادی برگردانیم.
کد 301 HTTP ریدایرکت چیست؟
گفتیم خطای 404 برای لینک هایی مناسب است که می خواهیم از لیست جستجو حذف شوند یا دیگر مورد درخواست ربات های خزنده قرار نگیرند، اما فرض کنیم به تازگی سایت خود را از دامنه قبلی به آدرس جدیدی منتقل یا تغییراتی در ساختار لینک های آن اعمال کرده باشیم، مسلم است که اگر بدون اطلاع موتورهای جستجو این کار را انجام دهیم تمام تلاش هایمان و اعتبار کسب شده برای آن سایت و لینک های قبلی به هدر خواهد رفت، اما اگر کد 301 HTTP ریدایرکت (Redirect 301) را به درستی تنظیم کنیم موتورهای جستجو و کاربران به راحتی و بدون از دست رفتن اعتبار قبلی به آدرس جدید محتوای مد نظرشان هدایت می شوند، در مورد موتورهای جستجو وقتی آنها در پاسخ درخواست کد 301 را دریافت می کنند، آدرس جدید را جایگزین لینک قدیمی کرده و تمام ویژگی ها، رنک و امتیازات را از آدرس قبلی به آدرس جدید انتقال می دهند (البته معمولا این کار مدت زمان کوتاهی طول می کشد)، در مورد کاربران نیز مرورگرها به طور خودکار به آدرس جدید هدایت می شوند (حتی ممکن است سرعت انتقال در حدی باشد که متوجه این فرآیند نشویم).
نکته: تنظیم کد 301 ریدایرکت شیوه توصیه شده موتورهای جستجو از جمله گوگل جهت انتقال از آدرس های قبلی به آدرس جدید است.
تنظیم کد 301 ریدایرکت با دستورات فایل htaccess.
مانند خطای 404 می توانیم کد 301 ریدایرکت را هم با دستوراتی در فایل htaccess. تنظیم کنیم و برای این کار از Flag [R] استفاده می کنیم، در مثال زیر این کار برای فایل index.html انجام شده است و کاربر در صورت درج عبارت index.html در آدرس URL به صفحه اصلی سایت هدایت می شود.
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.html
RewriteRule ^index.html$ https://webgoo.ir [R=301,L]
دقت کنیم که ممکن است برخی سرورها قابلیت کنترل با دستورات فایل htaccess. را غیرفعال کرده باشند (معمولا این قابلیت فعال است)، در اینگونه موارد باید با پشتیبان هاست خود موضوع را مطرح کنیم.نکته: برای اطمینان از فعال بودن فایل htaccess. در سرور کافی است در این فایل یک دستور ناقص مانند کد زیر درج کنیم:
.htaccess Test!
اگر با اجرای سایت خطای 500 Internal Server Error
دریافت کنیم یعنی سایت تنظیمات فایل htaccess. را پردازش کرده و این قابلیت فعال است، در غیر این صورت باید موضوع را جهت فعال سازی به پشتیبانی هاست اطلاع دهیم.تنظیم کد 301 ریدایرکت با برنامه نویسی PHP
با استفاده از تابع header در PHP و تنظیم آدرس URL جدید جهت انتقال، می توانیم لینک را به اصطلاح برای همیشه (Permanently) منتقل کنیم، به طور مثال:
<?php
header('HTTP/1.1 301 Moved Permanently');
header('Location: https://webgoo.ir');
die();
?>
همان طور که دیدیم شرایط و موقعیت های استفاده از خطای 404 با 301 ریدایرکت متفاوت است و باید هوشمندانه و به جا از این کدها در برنامه مدیریت سایتمان استفاده کنیم.
نحوه استفاده از فایل robots.txt در سایت
دوباره نویسی آدرس های وب (URL Rewrite) در htaccess
چگونه سایت یا وبلاگ را برای موتورهای جستجو بهینه سازی کنیم؟
مشکلات رایج در کدنویسی معتبر و رفع آنها
پیج رنک چیست و چگونه می توان آن را افزایش داد؟


آقا باز من برگشتم با یه سوال فنی دیگه دنبال یه کد ریدایرکت میگردم که یجای سایت بزارم که لینک دانلود رو اصلاح کنه یعنی این رو:
https://france.van-movie.ir/3/2021/3/Kate.2021.480p.Bluray.mkv
که الان قطع شده توی سایت تبدیل کنه به:https://dl2.van-movie.ir/3/2021/3/Kate.2021.480p.Bluray.mkv
که وصلههدفم اینه که کسی لینک دانلود واقعی رو نتونه کپی کنه به این راحتی یعنی من توی سایت با سابدامین https://france.van-movie.ir لینک ها رو مینویسم اما دانلود از آدرس https://dl2.van-movie.ir انجام بشه
میشه چنین کاری کرد؟
RewriteEngine On
RewriteCond %{HTTP_HOST} ^old\.example\.com$ [NC]
RewriteRule ^(.*) https://new.example.com/$1 [L]
قاعدتا به جای old و new و example.com باید اطلاعات سایت و ساب دامین ها را جایگزین کنید، فایل htaccess را در ساب دامین قرار دهید، اگر مشکلی بود در ریشه سایت هم تست کنید.فقط صفحه اصلیم منتقل میشه اونم چون که از توی وردپرس و قسمت تنظیمات آدرس جدید رو وارد کردم توش ولی مطالب نمیشه
الان این لینک
https://music-1.ir/%D9%85%D9%88%D8%B2%DB%8C%DA%A9-%D9%88%DB%8C%D8%AF%DB%8C%D9%88-%D8%AC%D8%AF%DB%8C%D8%AF-%D8%A7%D9%85%DB%8C%D8%B1-%D8%AE%D9%84%D9%88%D8%AA-%D8%AA%D8%A7-%D8%A2%D8%AE%D8%B1/
وقتی بازش میکنی با همین دامین باز میکنه و جدیدرو نمیاره!یه کد ریدایرکت میخوام برای انتقال یک سایت به سابدامین یک سایت دیگه یعنی میخوام آدرس های
https://music-1.ir
منتقل بشه به ساب دامین https://music.van-movie.ir
از این کد استفاده کردم هیچ اتفاقی توی صفحش نمیفته:writeEngine on
RewriteCond %{HTTP_HOST} ^music-1.ir [NC,OR]
RewriteCond %{HTTP_HOST} ^www.music-1.ir [NC]
RewriteRule ^(.*)$ https://music.van-movie.ir/$1 [L,R=301,NC]
ممنون مثل همیشه کمک کردی. برای شروع ssl رو از سی پنل پاک کردیم. گوگل فقط صفحه اول رو https ایندکس کرده و بقیه http هستند.
به نظر شما کد رو اعمال کنم؟ یا خود سیستم گوگل طی چند روز آینده خودش صفحه اول رو تصحیح میکنه؟
این ssl هم داستانش اینه که خودش به سی پنلم اضافه شده بود و خودش هم زمانش تمام شد و بعد ما فهمیدیم :)
آقا اگه بخواهیم https رو ریدایرکت کنیم با همان http باز بشه فقط جای کدها عوض میشه؟
در ضمن میشه در htaccess از چند کد ریدایرکت 301 استفاده کرد چون من چند سال پیش طبق همین آموزشت بدون www رو گذاشتم سایت روی آدرس کامل با http www باز بشه.
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
البته اگر گواهی سایت منقضی شده و سایت با https فراخوانی شود ممکن است مرورگر (قبل از پردازش فایل htaccess در سرور) پیام هشدار نمایش دهد، همچنین ممکن است نیاز به غیرفعال سازی گواهی منقضی شده در سرور از طریق پشتیبانی هاست باشد.در مورد بخش دوم سوال به شرطی که دستورات با هم تداخل نداشته باشند و از فلگ L (Last یا آخرین دستور) استفاده کنیم می توانیم هر تعداد دستور مجزا در یک فایل htaccess داشته باشیم.
چون سایت 1 آنچنان بازدیدی نداره ولی پست های اندک پربازدیدی داره و مورد دوم مبدا ریدایرکت همیشه باید وجود داشته باشه اگر بعد از 5 ماه پاک شد قدرت ریدایرکت 301 در سایت مقصد از بین میره؟
مرسی
در مورد بخش دوم سوال، در صورت عدم وجود مبدا ریدایرکت، در واقع کد 404 برای موتور جستجو دریافت می شود که به معنی عدم وجود منبع اصلی است، این هم مانند یک خطای 404 معمول پردازش می شود و آدرس اولیه پس از مدتی در لیست 404 موتور جستجو قرار خواهد گرفت (معمولا این آدرس ها رفته رفته ارزش و اعتبار سئو خود را از دست می دهند اما به دفعات کمتر و در فواصل طولانی تری توسط ربات موتورهای جستجو بازبینی می شوند).
حالا ميخوام ريدايركت كنم. مشكلم اينه كه چجوري اينكارو انجام بدم.
مثلاً
لينك قبلي :
/old/index.php?option=com_content&view=article&id=43&Itemid=54
لينك جديد :mydomain.com/new/
و لينك قبلي : /old/index.php?option=com_content&view=frontpage&Itemid=53
لينك جديد :mydomain.com/new/contact/
با كد هاي فعلي تموم بخشاي مختلف به صورت :mydomain.com/new/?option=com_content&view=frontpage&Itemid=53
وmydomain.com/new/?option=com_content&view=article&id=43&Itemid=54
ديده ميشود و هر دو در واقع به صفحه mydomain.com/new/
مي رود .چه بايد كرد . ممنون ميشم جواب بدين .
سایت بنده یک سایت وردپرسی هستش و با کد پی اچ پی ریدایرکت 301 زدم رو سایت وردپرسی دیگه که تازه باز شده (سایتی که ریدایرکت زدم فیلتر شده و میخام دامینش عوض بشه) تمام کارهای وبمستر هم به درستی انجام شده.
الان بعد از 4 روزه که بعضی وقتا ادرس جدید میاد بالا و بعضی وقتا میره!!!
میخواستم ببینم مشکلش چیه؟
و اینکه چه کارهایی باعث سرعت بخشیدن به ریدایرکت میشه؟
چه چیزی باعث میشه ریدایرکت ۳۰۱ زده شده که از وبمستر هم چند اف ادرس زده شده سریع تر صورت بگیره؟
شنیدم وقتی مثال دامین فیلتر میشه و ریدایرکت میزنیم اگر برای دامین فیلترمون ای پی بخریم (ای پی بدیم بهش) سریعتر ریدایرکت میشه اگر میشه راهنمایی کنید که چجوری میشه کاری کرد که دامین کمتر از ۲ روز ریدایرکتش انجام بشه
یا اینکه سریعتر باشه ریدایرکت
ممنون میشم کمک کنید بهم
برای مثال یک وب سایت دارم
میخوایم به طور دائم با آدرس همراه با www باز بشه برای اینکار باید چیکار کنیم یعنی هرکس آدرس
http://test.com
رو زد http://www.test.com
باز شه و همه ی صفحاتشم با www باز بشه ..لطفا کمک کنید خیلی واجبه ممنون از سایت خوبتون ...
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
اگر از HTTPS استفاده می کنید:RewriteEngine On
RewriteCond %{HTTPS}s ^on(s)|
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http%1://www.%{HTTP_HOST}/$1 [R=301,L]
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.