میلاد رئیسی
سه شنبه 30 مرداد 1397, 08:27 صبح
میدانیم بهینهسازی موتورهای جستجو (به انگلیسی: Search engine optimization (SEO)) که گاهی در فارسی به آن سئو نیز گفته میشود، عملیاتی است برای بهبود دید یک وبگاه یا یک صفحهٔ وب، در صفحه نتایج موتورهای جستجو که میتواند طبیعی و یا الگوریتمی باشد. این عملیات برای وبمسترها یکی از عوامل مهم و حیاتی بدست آوردن کاربران جدید از موتورهای جستجو است.
اگر چک لیستهای SEO وب سایت ها (http://www.webconfs.com/15-minute-seo.php) را مشاهده کنیم، میتوانیم آنها را در دو دستهی کلی بهینه سازی درونی و برونی وب سایت (http://1admin.ir/on-page-of-page-optimization.html) در نظر بگیریم:
Off-Page Optimization یا برونی ، که بیشتر بر دوش مشاوران سئو و خود مدیران وب سایت است.(link building ، فعالیت در شبکه اجتماعی و ...) و اما در حوزه On-Page Optimization یا درونی که بخشهای مهمی از آن وظیفهی مابرنامه نویسها است.(H1 Tag ، URL Naming ، Meta Tags ، عنوان صفحه و ...) [البته عامل درونی بهینه سازی محتوا (Content Optimization) که مهمترین عامل در الگوریتمهای نسل جدید موتورهای جستجو و همچنین الگوریتم جدید گوگل (http://techcrunch.com) (و + (http://www.meliseo.ir/372/googles-new-algorithm-hummingbird/)) به حساب میآید بر عهده مشاوران سئو و خود مدیران وب سایت میباشد] در ادامه به ارائه چند راهکار جهت بهینه سازی برنامههای وب ASP.NET مان برای موتورهای جستجو میپردازیم:
1.متدی برای ایجاد عنوان سایت
private const string SeparatorTitle = " - ";
private const int MaxLenghtTitle = 60;
public static string GeneratePageTitle(params string[] crumbs)
{
var title = "";
for (int i = 0; i < crumbs.Length; i++)
{
title += string.Format
(
"{0}{1}",
crumbs[i],
(i < crumbs.Length - 1) ? SeparatorTitle : string.Empty
);
}
title = title.Substring(0, title.Length <= MaxLenghtTitle ? title.Length : MaxLenghtTitle).Trim();
return title;
}
نکته :
MaxLenghtTitle پیشنهادی برای عنوان سایت 60 میباشد.
2.متدی برای ایجاد متاتگ صفحات سایت
public enum CacheControlType
{
[Description("public")]
_public,
[Description("private")]
_private,
[Description("no-cache")]
_nocache,
[Description("no-store")]
_nostore
}
private const int MaxLenghtTitle = 60;
private const int MaxLenghtDescription = 170;
private const string FaviconPath = "~/cdn/ui/favicon.ico";
public static string GenerateMetaTag(string title, string description, bool allowIndexPage, bool allowFollowLinks, string author = "", string lastmodified = "", string expires = "never", string language = "fa", CacheControlType cacheControlType = CacheControlType._private)
{
title = title.Substring(0, title.Length <= MaxLenghtTitle ? title.Length : MaxLenghtTitle).Trim();
description = description.Substring(0, description.Length <= MaxLenghtDescription ? description.Length : MaxLenghtDescription).Trim();
var meta = "";
meta += string.Format("<title>{0}</title>\n", title);
meta += string.Format("<link rel="shortcut icon" href="{0}"/>\n", FaviconPath);
meta += string.Format("<meta http-equiv="content-language" content="{0}"/>\n", language);
meta += string.Format("<meta http-equiv="content-type" content="text/html; charset=utf-8"/>\n");
meta += string.Format("<meta charset="utf-8"/>\n");
meta += string.Format("<meta name="description" content="{0}"/>\n", description);
meta += string.Format("<meta http-equiv="Cache-control" content="{0}"/>\n", EnumExtensions.EnumHelper<CacheControlType>.GetEnumDescription(cacheControlType.ToString()));
meta += string.Format("<meta name="robots" content="{0}, {1}" />\n", allowIndexPage ? "index" : "noindex", allowFollowLinks ? "follow" : "nofollow");
meta += string.Format("<meta name="expires" content="{0}"/>\n", expires);
if (!string.IsNullOrEmpty(lastmodified))
meta += string.Format("<meta name="last-modified" content="{0}"/>\n", lastmodified);
if (!string.IsNullOrEmpty(author))
meta += string.Format("<meta name="author" content="{0}"/>\n", author);
//------------------------------------Google & Bing Doesn't Use Meta Keywords ...
//meta += string.Format("<meta name="keywords" content="{0}"/>\n", keywords);
return meta;
}
چند نکته :
MaxLenghtDescription پیشنهادی برای متاتگ توضیح سایت 170 می باشد.
آشنایی با متاتگها (Meta tags) و کاربرد آنها در صفحات وب (HTML) (http://webgoo.ir/37/%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-%D9%85%D8%AA%D8%A7%D8%AA%DA%AF-%D9%87%D8%A7-meta-tags-%D9%88-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF-%D8%A2%D9%86%D9%87%D8%A7-%D8%AF%D8%B1-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D9%88%D8%A8-html)
برای کاربرد allowIndexPage و allowFollowLinks هم میتوانید به لینک بالا و بررسی متاتگ robots بپردازید.
با توجه به اهمیت شبکههای اجتماعی متاتگهای شبکههای اجتماعی (http://www.itport.ir/1392/06/27/18-meta-tags-every-webpage-should-have/) (+ (http://www.seomoz.ir/%D9%86%DA%A9%D8%A7%D8%AA-%D9%85%D9%87%D9%85-%D8%AF%D8%B1-%D8%B4%D8%A8%DA%A9%D9%87-%D9%87%D8%A7%DB%8C-%D8%A7%D8%AC%D8%AA%D9%85%D8%A7%D8%B9%DB%8C.html) و + (http://socreativedigital.com/9-social-network-meta-tags-for-seo-facebook-google-and-twitter-2013-07-31)) را هم نباید از قلم انداخت.
3.متدی برای ایجاد Slug ( اسلاگ آدرسی با مفهوم برای بکار بردن در URL ها است که دوستدار موتورهای جستجو میباشد)
private const int MaxLenghtSlug = 45;
public static string GenerateSlug(string title)
{
var slug = RemoveAccent(title).ToLower();
slug = Regex.Replace(slug, @"[^a-z0-9-\u0600-\u06FF]", "-");
slug = Regex.Replace(slug, @"\s+", "-").Trim();
slug = Regex.Replace(slug, @"-+", "-");
slug = slug.Substring(0, slug.Length <= MaxLenghtSlug ? slug.Length : MaxLenghtSlug).Trim();
return slug;
}
private static string RemoveAccent(string text)
{
var bytes = Encoding.GetEncoding("UTF-8").GetBytes(text);
return Encoding.UTF8.GetString(bytes);
}
نکته :
MaxLenghtSlug پیشنهادی برای عنوان سایت 45 میباشد.
نمونه ای از کاربرد توابع :
Head.InnerHtml = SEO.GenerateMetaTag
(
title: SEO.GeneratePageTitle(".NET Tips", "آرشیو مطالب", "ASP.NET MVC #1"),
description: "چرا ASP.NET MVC با وجود فریم ورک پختهای به نام ASP.NET web forms، اولین سؤالی که حین سوئیچ به ASP.NET MVC مطرح میشود این است: «برای چی؟». بنابراین تا به این سؤال پاسخ داده نشود، هر نوع بحث فنی در این مورد بی فایده است.",
allowIndexPage: true,
allowFollowLinks: true,
author: "میلاد رئیسی",
cacheControlType: SEO.CacheControlType._private
);
و خروجی در Page Source :
<title>.NET Tips - آرشیو مطالب - ASP.NET MVC #1</title>
<link rel="shortcut icon" href="../../cdn/images/ui/favicon.ico"/>
<meta http-equiv="content-language" content="fa"/>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<meta charset="utf-8"/>
<meta name="description" content="چرا ASP.NET MVC ؟با وجود فریم ورک پختهای به نام ASP.NET web forms، اولین سؤالی که حین سوئیچ به ASP.NET MVC مطرح میشود این است: «برای چی؟». بن ..."/>
<meta http-equiv="Cache-control" content="private"/>
<meta name="robots" content="index, follow" />
<meta name="expires" content="never"/>
<meta name="author" content="میلاد رئیسی"/>
اگر چک لیستهای SEO وب سایت ها (http://www.webconfs.com/15-minute-seo.php) را مشاهده کنیم، میتوانیم آنها را در دو دستهی کلی بهینه سازی درونی و برونی وب سایت (http://1admin.ir/on-page-of-page-optimization.html) در نظر بگیریم:
Off-Page Optimization یا برونی ، که بیشتر بر دوش مشاوران سئو و خود مدیران وب سایت است.(link building ، فعالیت در شبکه اجتماعی و ...) و اما در حوزه On-Page Optimization یا درونی که بخشهای مهمی از آن وظیفهی مابرنامه نویسها است.(H1 Tag ، URL Naming ، Meta Tags ، عنوان صفحه و ...) [البته عامل درونی بهینه سازی محتوا (Content Optimization) که مهمترین عامل در الگوریتمهای نسل جدید موتورهای جستجو و همچنین الگوریتم جدید گوگل (http://techcrunch.com) (و + (http://www.meliseo.ir/372/googles-new-algorithm-hummingbird/)) به حساب میآید بر عهده مشاوران سئو و خود مدیران وب سایت میباشد] در ادامه به ارائه چند راهکار جهت بهینه سازی برنامههای وب ASP.NET مان برای موتورهای جستجو میپردازیم:
1.متدی برای ایجاد عنوان سایت
private const string SeparatorTitle = " - ";
private const int MaxLenghtTitle = 60;
public static string GeneratePageTitle(params string[] crumbs)
{
var title = "";
for (int i = 0; i < crumbs.Length; i++)
{
title += string.Format
(
"{0}{1}",
crumbs[i],
(i < crumbs.Length - 1) ? SeparatorTitle : string.Empty
);
}
title = title.Substring(0, title.Length <= MaxLenghtTitle ? title.Length : MaxLenghtTitle).Trim();
return title;
}
نکته :
MaxLenghtTitle پیشنهادی برای عنوان سایت 60 میباشد.
2.متدی برای ایجاد متاتگ صفحات سایت
public enum CacheControlType
{
[Description("public")]
_public,
[Description("private")]
_private,
[Description("no-cache")]
_nocache,
[Description("no-store")]
_nostore
}
private const int MaxLenghtTitle = 60;
private const int MaxLenghtDescription = 170;
private const string FaviconPath = "~/cdn/ui/favicon.ico";
public static string GenerateMetaTag(string title, string description, bool allowIndexPage, bool allowFollowLinks, string author = "", string lastmodified = "", string expires = "never", string language = "fa", CacheControlType cacheControlType = CacheControlType._private)
{
title = title.Substring(0, title.Length <= MaxLenghtTitle ? title.Length : MaxLenghtTitle).Trim();
description = description.Substring(0, description.Length <= MaxLenghtDescription ? description.Length : MaxLenghtDescription).Trim();
var meta = "";
meta += string.Format("<title>{0}</title>\n", title);
meta += string.Format("<link rel="shortcut icon" href="{0}"/>\n", FaviconPath);
meta += string.Format("<meta http-equiv="content-language" content="{0}"/>\n", language);
meta += string.Format("<meta http-equiv="content-type" content="text/html; charset=utf-8"/>\n");
meta += string.Format("<meta charset="utf-8"/>\n");
meta += string.Format("<meta name="description" content="{0}"/>\n", description);
meta += string.Format("<meta http-equiv="Cache-control" content="{0}"/>\n", EnumExtensions.EnumHelper<CacheControlType>.GetEnumDescription(cacheControlType.ToString()));
meta += string.Format("<meta name="robots" content="{0}, {1}" />\n", allowIndexPage ? "index" : "noindex", allowFollowLinks ? "follow" : "nofollow");
meta += string.Format("<meta name="expires" content="{0}"/>\n", expires);
if (!string.IsNullOrEmpty(lastmodified))
meta += string.Format("<meta name="last-modified" content="{0}"/>\n", lastmodified);
if (!string.IsNullOrEmpty(author))
meta += string.Format("<meta name="author" content="{0}"/>\n", author);
//------------------------------------Google & Bing Doesn't Use Meta Keywords ...
//meta += string.Format("<meta name="keywords" content="{0}"/>\n", keywords);
return meta;
}
چند نکته :
MaxLenghtDescription پیشنهادی برای متاتگ توضیح سایت 170 می باشد.
آشنایی با متاتگها (Meta tags) و کاربرد آنها در صفحات وب (HTML) (http://webgoo.ir/37/%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-%D9%85%D8%AA%D8%A7%D8%AA%DA%AF-%D9%87%D8%A7-meta-tags-%D9%88-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF-%D8%A2%D9%86%D9%87%D8%A7-%D8%AF%D8%B1-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D9%88%D8%A8-html)
برای کاربرد allowIndexPage و allowFollowLinks هم میتوانید به لینک بالا و بررسی متاتگ robots بپردازید.
با توجه به اهمیت شبکههای اجتماعی متاتگهای شبکههای اجتماعی (http://www.itport.ir/1392/06/27/18-meta-tags-every-webpage-should-have/) (+ (http://www.seomoz.ir/%D9%86%DA%A9%D8%A7%D8%AA-%D9%85%D9%87%D9%85-%D8%AF%D8%B1-%D8%B4%D8%A8%DA%A9%D9%87-%D9%87%D8%A7%DB%8C-%D8%A7%D8%AC%D8%AA%D9%85%D8%A7%D8%B9%DB%8C.html) و + (http://socreativedigital.com/9-social-network-meta-tags-for-seo-facebook-google-and-twitter-2013-07-31)) را هم نباید از قلم انداخت.
3.متدی برای ایجاد Slug ( اسلاگ آدرسی با مفهوم برای بکار بردن در URL ها است که دوستدار موتورهای جستجو میباشد)
private const int MaxLenghtSlug = 45;
public static string GenerateSlug(string title)
{
var slug = RemoveAccent(title).ToLower();
slug = Regex.Replace(slug, @"[^a-z0-9-\u0600-\u06FF]", "-");
slug = Regex.Replace(slug, @"\s+", "-").Trim();
slug = Regex.Replace(slug, @"-+", "-");
slug = slug.Substring(0, slug.Length <= MaxLenghtSlug ? slug.Length : MaxLenghtSlug).Trim();
return slug;
}
private static string RemoveAccent(string text)
{
var bytes = Encoding.GetEncoding("UTF-8").GetBytes(text);
return Encoding.UTF8.GetString(bytes);
}
نکته :
MaxLenghtSlug پیشنهادی برای عنوان سایت 45 میباشد.
نمونه ای از کاربرد توابع :
Head.InnerHtml = SEO.GenerateMetaTag
(
title: SEO.GeneratePageTitle(".NET Tips", "آرشیو مطالب", "ASP.NET MVC #1"),
description: "چرا ASP.NET MVC با وجود فریم ورک پختهای به نام ASP.NET web forms، اولین سؤالی که حین سوئیچ به ASP.NET MVC مطرح میشود این است: «برای چی؟». بنابراین تا به این سؤال پاسخ داده نشود، هر نوع بحث فنی در این مورد بی فایده است.",
allowIndexPage: true,
allowFollowLinks: true,
author: "میلاد رئیسی",
cacheControlType: SEO.CacheControlType._private
);
و خروجی در Page Source :
<title>.NET Tips - آرشیو مطالب - ASP.NET MVC #1</title>
<link rel="shortcut icon" href="../../cdn/images/ui/favicon.ico"/>
<meta http-equiv="content-language" content="fa"/>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<meta charset="utf-8"/>
<meta name="description" content="چرا ASP.NET MVC ؟با وجود فریم ورک پختهای به نام ASP.NET web forms، اولین سؤالی که حین سوئیچ به ASP.NET MVC مطرح میشود این است: «برای چی؟». بن ..."/>
<meta http-equiv="Cache-control" content="private"/>
<meta name="robots" content="index, follow" />
<meta name="expires" content="never"/>
<meta name="author" content="میلاد رئیسی"/>