|
//Sayfanın içeriğini temizliyoruz... Response.Clear(); //Sayfanın xml formatında olduğunu belirliyoruz... Response.ContentType = "text/xml"; //XML formatını oluşturmak için bir XmlTextWriter tanımlıyoruz ve //Encoding'ini UTF8 olarak ayarlıyoruz... XmlTextWriter objX = new XmlTextWriter(Response.OutputStream, Encoding.UTF8); //Bu kısımda sırayla elementlerimizi oluşturuyoruz... //urlset, url, loc, lastmod vs... gibi tanımlar //bir standart tüm site map dosyalarında bu şekilde tanımlanırlar... //Kaynak : http://www.sitemaps.org/protocol.php objX.WriteStartDocument(); objX.WriteStartElement("urlset"); //Site Map standartlarını belirliyoruz... objX.WriteAttributeString("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9"); objX.WriteAttributeString("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); objX.WriteAttributeString("xsi:schemaLocation", "http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd"); //Sitenin sabit sayfalarını static olarak ekliyoruz... objX.WriteStartElement("url"); //loc = Sayfa Adresi objX.WriteElementString("loc", "http://www.gokhanbagci.info/default.aspx"); //lastmod = En Son Değiştirilme tarihi //default.aspx Ana Sayfamız olduğu için her gün güncellendiğini varsayıyoruz //çünkü bu tarihler arama motorlarının sitenizin güncel olup olmadığı bilgisine karar veriyorlar... objX.WriteElementString("lastmod", DateTime.Now.ToString("yyyy-MM-dd")); //changefreq = Sayfanın ne kadar süre içerisinde oluşturulduğunu belirliyor... //monthly, weekly, daily ve hourly seçenekleri mevcut... //Şöyle bir mantığı var, daily aynı gün içinde eklendiğini belirliyor. //Arama motorlarıda o sayfaya ona göre önem veriyor. //Burada tabi o zaman hepsini daily yaparsak daha önem kazanır diye düşünmeyelim //Çünkü bu robotlar akıllı şeyler :) Tarihe göre ve daha önceki indekslere göre karşılaştırma yapıyorlar... objX.WriteElementString("changefreq", "daily"); //priority = Sayfanın sitedeki önemini belirliyor... //Şöyle ki, örneğin Ana Sayfa için priority değerini 1 olarak tanımladık... //Ama biraz sonra aşağıda Haberleri dinamik olarak eklerken sayfanın değerini 0.1 olarak belirleyeceğiz... //Yani alt sayfaların değerlerini daha düşük, ana sayfaların değerlerini daha yüksek belirleyeceğiz... objX.WriteElementString("priority", "1"); objX.WriteEndElement(); objX.WriteStartElement("url"); objX.WriteElementString("loc", "http://www.gokhanbagci.info/yazilar.aspx"); objX.WriteElementString("lastmod", DateTime.Now.ToString("yyyy-MM-dd")); objX.WriteElementString("priority", "1"); objX.WriteElementString("changefreq", "daily"); objX.WriteEndElement(); //Bu kısımda ben access veritabanı kullanmıştım ama aynı şekilde SQL Server, MySQL, Oracle vs.. //diğer veritabanlarınıda kullanabilirsiniz... OleDbConnection objConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("~/App_Data/gb.mdb")); objConnection.Open(); //Bu kısımda blog örneği yapıyorum, Bloglardaki yazılarla ilgili... //Siz makale, haber vs.. bu konularlada bu sistemi kullanabilirsiniz. string sql = "SELECT YaziID, KTarih FROM yazilar ORDER BY YaziID DESC"; OleDbCommand objCommand = new OleDbCommand(sql, objConnection); OleDbDataReader objReader = objCommand.ExecuteReader(); //Dönen verileri bir döngüye sokup ayrı ayrı elementler oluşturacağız... while (objReader.Read()) { objX.WriteStartElement("url"); //Veritabanındaki değere göre linkimizi oluşturuyoruz... //Ör : http://www.gokhanbagci.info/yazi-detay.aspx?YaziID=1 objX.WriteElementString("loc", "http://www.gokhanbagci.info/yazi-detay.aspx?YaziID=" + objReader.GetInt32(0).ToString()); //Oluşturulma tarihini belirliyoruz... objX.WriteElementString("lastmod", objReader.GetDateTime(1).ToString("yyyy-MM-dd")); //Bu kısımda eklediğimiz tarihle o günkü tarih arasındaki farkı bulup daily, weekly, monthy değerlerini buşuyoruz //Eklediğimiz gün bugüne eşit olduğu için daily olarak belirliyoruz... if (objReader.GetDateTime(1).ToShortDateString() == DateTime.Now.ToShortDateString()) { //İpucu:Bugün eklenen sayfaların önemini yüksek tutuyoruz! objX.WriteElementString("priority", "1"); objX.WriteElementString("changefreq", "daily"); } else { //Bu kısımda iki tarih arasındaki farkı hesaplıyoruz... int fark = TarihFark(objReader.GetDateTime(1), DateTime.Now); //Eğer fark 1 ile 7 arasında ise sayfanın weekly olduğunu belirliyoruz... if ( (fark > 1) && (fark <= 7) ) { //İpucu:Haftalık sayfalara 0.5 değerini ekliyoruz... objX.WriteElementString("priority", "0.5"); objX.WriteElementString("changefreq", "weekly"); } //Eğer 7'den büyükse monthly olduğunu belirliyoruz... else if (fark > 7) { //İpucu:Aylık sayfalarada daha önemsiz olduğunu 0.1 olarak belirtiyoruz //Bu değerler size kalmış 0.1 yerine 0.2'de kullanabilirsiniz... //Ama ne kadar düşük kullanırsanız robot o kadar daha mantıklı indeksleme yapacaktır... objX.WriteElementString("priority", "0.1"); objX.WriteElementString("changefreq", "monthly"); } } objX.WriteEndElement(); } objReader.Close(); objConnection.Close(); objX.WriteEndElement(); objX.WriteEndDocument(); objX.Flush(); objX.Close(); Response.End(); |