PDA

View Full Version : آموزش: بهینه سازی برنامه‌های وب ASP.NET برای موتورهای جستجو (SEO)



میلاد رئیسی
سه شنبه 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="میلاد رئیسی"/>

sg.programmer
جمعه 02 شهریور 1397, 13:48 عصر
تشکر عالی بود

اگه ممکنه در یک برنامه قرار بدید و در این قیمت قرار بدید