Sitemizi arama motorları belli aralıklarla tarar ve yeni eklenen içerikleri indexler. Veya siz bir site haritası oluşturursunuz ve bunu arama motoruna gösterirsiniz. Bunun için xml formatında bir site haritası oluşturmanız gerekmektedir. Ama burada bir sorun karşımıza çıkıyor. Sitemizin içeriği dinamik olduğu yani belli aralıklarla değiştiği için her seferinde manuel olarak yeni bir xml dosyası oluşturmamız gerekir. Bunun yerine bunu otomatik olarak gerçekleştirmemiz gerekiyor. Sitemizin içeriği değiştiğinde veritabanından yeni bilgileri çekip bunu xml formatında yazdırabiliriz. Aslında yapacağımız işlem çok basit. Veritabanından çektiğimiz bilgileri string builder ile xml formatında oluşturduktan sonra bunu ekrana yazdıracağız.
public static string SiteMapXML()
{
mhmtyylcEntities _entity = new mhmtyylcEntities();
StringBuilder strBuilder = new StringBuilder();
strBuilder.AppendLine("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
strBuilder.AppendLine("<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">");
#region HomePage
strBuilder.AppendLine("<url>");
strBuilder.AppendLine("<loc>");
//Ana sayfamızın linki sabit olduğundan kendimiz ekledik.
string URL = String.Format("http://mhmtyylc.tr");
strBuilder.AppendLine(URL);
strBuilder.AppendLine("</loc>");
strBuilder.AppendLine("<changefreq>");
strBuilder.AppendLine("always");
strBuilder.AppendLine("</changefreq>");
strBuilder.AppendLine("<priority>");
strBuilder.AppendLine("1");
strBuilder.AppendLine("</priority>");
strBuilder.AppendLine("</url>");
#endregion
#region Categories
//Veratabanından kategorileri getiriyoruz.
var categories = _entity.Categories.ToList();
//foreach ile kategoriler içinde dönüyoruz.
foreach (var item in categories)
{
strBuilder.AppendLine("<url>");
strBuilder.AppendLine("<loc>");
string CatURL = item.URL;
//burada gelen kategorinin linkini oluşturuyoruz.
URL = "http://mhmtyylc.tr/category/" + CatURL;
strBuilder.AppendLine(URL);
strBuilder.AppendLine("</loc>");
strBuilder.AppendLine("<changefreq>");
strBuilder.AppendLine("weekly");
strBuilder.AppendLine("</changefreq>");
strBuilder.AppendLine("<priority>");
strBuilder.AppendLine("0.5");
strBuilder.AppendLine("</priority>");
strBuilder.AppendLine("</url>");
}
#endregion
#region Articles
//Aynı şekilde makalelerimizi veritabanından çekiyoruz.
var articles = _entity.Articles.ToList();
//Makaleleler içinde foreach ile dönüyoruz.
foreach (var item in articles)
{
strBuilder.AppendLine("<url>");
strBuilder.AppendLine("<loc>");
string ArtURL = item.URL;
//Makale linkini site haritasına ekliyoruz.
URL = "http://mhmtyylc.tr/" + ArtURL;
strBuilder.AppendLine("</loc>");
strBuilder.AppendLine("<changefreq>");
strBuilder.AppendLine("weekly");
strBuilder.AppendLine("</changefreq>");
strBuilder.AppendLine("<priority>");
strBuilder.AppendLine("0.5");
strBuilder.AppendLine("</priority>");
strBuilder.AppendLine("</url>");
}
#endregion
strBuilder.AppendLine("</urlset>");
//oluşturduğumuz string ifadeyi geri döndürüyoruz.
return strBuilder.ToString();
}
Site haritasını oluşturduktan sonra View da bunu yazdırmamız gerekiyor.
public ViewResult SiteMap()
{
Response.ContentType = "text/xml";
Response.Write(Business.SiteMapXML()); //Oluşturdumuz metodu burada yazdırıyoruz.
Response.End();
return View();
}
İşlemimiz tamamlandı. Artık sitemizin içeriği değiştidiğinde site haritamız dinamik olarak oluşturulacak. Kolay gelsin.
YORUMLAR (13)
Response.Write(Business.SiteMapXML());
burdaki Business in altını çiziyor ne yaptıysam olmadı yardım eder misinizerror on line 5 at column 1: Document is empty
Below is a rendering of the page up to the first error.
Hatası alıyorum. Debug edip bakıyorum dolu geliyor . Ama hostta atınca bu şekil bir hata veriyor.
Localde ise
XML Parsing Error: not well-formed
Location: http://localhost:61067/Home/SiteMap
Line Number 5, Column 6:
şeklinde bir hata alıyorum durumu çözemedim bir türlü