تتمثل وظيفة خريطة الموقع في السماح لمحركات البحث بتضمين المزيد من صفحات الويب المتنوعة للموقع في أسرع وقت ممكن.
وهنا يجب علينا أولاً أن نفهم مبدأً أساسيًا، وهو طريقة الزحف التي تستخدمها محركات البحث. تشبه شبكة الإنترنت بأكملها "شبكة" متقاطعة: كل عقدة في الشبكة هي كل صفحة ويب، وكل صفحة ويب متصلة ببعضها البعض من خلال عناوين URL. يمكن أن يبدأ العنكبوت من صفحة ويب ويزحف إلى صفحة ويب أخرى من خلال عنوان URL الموجود على صفحة الويب؛ ثم يزحف إلى المزيد من صفحات الويب من خلال عنوان URL الموجود على صفحة ويب أخرى... وهكذا. ولكن إذا كان موقع ويب تم إصداره حديثًا، فقد لا يكون هناك عنوان URL آخر يشير إليه، لذلك لن يتم "الزحف إليه" مطلقًا (مضمن). من أجل حل هذه المشكلة، يمكن لموقع الويب الجديد إرسال عنوان URL إلى محرك البحث بشكل نشط والتقدم بطلب للعناكب للزحف إليه (عنوان URL لتطبيق Google:)، ولكن بشكل عام سيتم تقديم عنوان URL للصفحة الرئيسية فقط عند التقديم.
لكي تتمكن العناكب من استرداد جميع عناوين URL (خاصة تلك التي تم إنشاؤها ديناميكيًا) بسرعة وسهولة، نحتاج إلى توفير بنية شاملة وكاملة وواضحة وخريطة موقع محدثة في الوقت المناسب.
وللتعامل مع ملف robots.txt ذو المحتوى المكرر، نستخدم ملف .ashx لإنشاء خريطة موقع بتنسيق xml استنادًا إلى sitemaps.org. بعد إنشاء خريطة الموقع يمكننا تقديمها لمحركات البحث مثل جوجل. يؤكد عدد كبير من المقالات أن تقديم خريطة الموقع سيؤدي إلى تحسين سرعة وعمق تضمين الموقع بشكل كبير. جميع طرق تحسين محركات البحث الأخرى تقريبًا قد يكون من الصعب إثباتها أو غير فعالة أو حتى تسبب آثارًا جانبية، باستثناء تقديم خريطة الموقع!
يوفر لنا Linq to XML تجربة تشغيل مثالية تقريبًا.
<%@ WebHandler Language="C#" Class="website" %>
باستخدام النظام؛
باستخدام System.Web؛
باستخدام System.Xml؛
باستخدام System.Xml.Linq؛
باستخدام System.Linq؛
موقع الفئة العامة: IHttpHandler {
طلب معالجة الفراغ العام (سياق HttpContext) {
context.Response.ContentType = "text/xml";
// معلومات الإعلان الخاصة بالملف. تشير القيمة "نعم" للمعلمة الثالثة المستقلة إلى أن مستند XML هذا مستقل بذاته ولا يعتمد على DTD محدد خارجيًا.
إعلان XDeclaration = new XDeclaration("1.0"، "UTF-8"، "yes")؛
context.Response.Write(declaration);
// مساحة الاسم لملف XML
XNamespace ns = " http://www.google.com/schemas/sitemap/0.84 ";
XElement siteMap = new XElement(ns + "urlset");
سلسلة ثابتةUrl = " http://www.freeflying.com/article "؛
string fullUrl = string.Empty;
// قم بإخراج البيانات وتحويلها إلى عقد XML
foreach (عنصر var في Articles.GetArticles())
{
XElement url = new XElement("url");
fullUrl = string.Format("{0}?id={1}&catelog={2}",fixedUrl,item.ID,item.Catelog);
XElement loc = new XElement("loc", fullUrl);
XElement lastmod = new XElement("lastmod"، item.LastMod.AddDays(-23).ToShortDateString());
XElement Changefreq = new XElement("changefreq"، item.Frequency);
أولوية XElement = new XElement("priority"، item.Weight);
url.Add(loc, lastmod, Changefreq, Priority);
siteMap.Add(url);
}
// أخيرًا أخرج ملف xml بأكمله
context.Response.Write(siteMap);
}
المنطق العام قابل لإعادة الاستخدام {
يحصل {
عودة كاذبة.
}
}
}
سيتم أيضًا استخدام تقنية XML في RSS
<%@ WebHandler Language="C#" Class="rss" %>
باستخدام النظام؛
باستخدام System.Web؛
باستخدام System.Xml؛
باستخدام System.Xml.Linq؛
الطبقة العامة آر إس إس: IHttpHandler {
طلب معالجة الفراغ العام (سياق HttpContext) {
context.Response.ContentType = "text/xml";
context.Response.Write("<?xml version="1.0" encoding="UTF-8" ?>");
XElement rssFeed = new XElement("rss"، new XAttribute("version"،"2.0"));
سلسلة ثابتةUrl = " http://www.freeflying.com/article "؛
string fullUrl = string.Empty;
قناة XElement = XElement الجديد("channel"،
XElement الجديد ("العنوان"، "الطيران الحر")،
XElement الجديد("رابط"، FixedUrl)،
new XElement("description"،"موقع أحلام الطيران بحرية")،
XElement الجديد("pubDate"،DateTime.Now.ToString())
);
foreach (مقالة var في Articles.GetArticles())
{
عنصر XElement = new XElement("item");
XElement title = new XElement("title"،article.Title);
WholeUrl = string.Format("{0}?id={1}&catelog={2}"،fixUrl,article.ID,article.Catelog);
XElement link = new XElement("link", fullUrl);
وصف XElement = new XElement("description"، Article.Description);
XElement pubDate = new XElement("pubDate",article.LastMod.ToString());
item.Add(title,link,description,pubDate);
Channel.Add(item);
}
rssFeed.Add(channel);
context.Response.Write(rssFeed);
}
المنطق العام قابل لإعادة الاستخدام {
يحصل {
عودة كاذبة.
}
}
}
بيانات محاكاة
باستخدام النظام؛
باستخدام System.Data؛
باستخدام System.Configuration؛
باستخدام System.Linq؛
باستخدام System.Web؛
باستخدام System.Web.Security؛
باستخدام System.Web.UI؛
باستخدام System.Web.UI.HtmlControls؛
باستخدام System.Web.UI.WebControls؛
باستخدام System.Web.UI.WebControls.WebParts؛
باستخدام System.Xml.Linq؛
باستخدام System.Web.UI.MobileControls؛
باستخدام System.Collections.Generic؛
/// <الملخص>
/// وصف موجز للمقالات
/// </الملخص>
مقالات الطبقة العامة
{
المقالات العامة()
{
//
// TODO: أضف منطق المنشئ هنا
//
}
القائمة الثابتة العامة<المادة> GetArticles()
{
إرجاع قائمة جديدة<المادة>(){
مقالة جديدة (234، "blog"، DateTime.Now.AddDays(-23)، Freq.none، 0.8، "asp.net seo"، "مقالات حول تحسين محركات البحث في asp.net")،
مقالة جديدة (267، "blog"، DateTime.Now.AddDays(-245)، Freq.daily، 0.6، "ado.net pro"، "حول استخدام مجموعة البيانات")،
مقالة جديدة (653، "news"، DateTime.Now.AddDays(-45)، Freq.daily، 1،"CLR via C#"، "دفتر ملاحظات حول هذا الكتاب")
};
}
}
المادة الطبقة العامة
{
معرف كثافة العمليات العامة؛
كتالوج السلسلة العامة؛
التاريخ والوقت العام LastMod؛
الوزن المزدوج العام؛
تردد التردد العام.
عنوان السلسلة العامة؛
وصف السلسلة العامة؛
مقالة عامة (معرف int، كتالوج السلسلة، DateTime lastMod، تردد التكرار، الوزن المزدوج، عنوان السلسلة، وصف السلسلة)
{
معرف = معرف؛
كاتيلوج = كاتيلوج؛
LastMod = lastMod;
الوزن = الوزن؛
التردد = التردد؛
العنوان = العنوان؛
الوصف = الوصف؛
}
}
التعداد العام التكرار
{
لا شيء = 1،
يوميا = 2،
أسبوعي = 3،
}
المؤلف: فري فلاي الرابط الأصلي