Asp.net ile Dinamik Sitemap Oluşturma (XmlTextWriter ve Veritabanından)
Asp.net ile Dinamik Sitemap Oluşturma (XmlTextWriter ve Veritabanından)

Merhaba bu makalemizde asp.net ile dinamik sitemap oluşturacağız. Sitemap oluşturma için herhangi bir hazır nesne kullanmadan standart asp.net ve C# kodlama ile XML çıktısı oluşturacağız.

Bildiğiniz gibi seo odaklı bir site için site haritaları olmazsa olmaz bir kriterdir. Arama motorlarının sitemizde yayınladığımız dinamik içerikleri dizinlerine eklemesi için oluşturulmuş XML tabanlı dosyalar sayesinde içeriğimizi Google ve Yandex gibi arama motorlarına doğrudan iletebiliyoruz.

Temel Sitemap Etiketleri

Sitemap oluştururken birtakım protokollere uygun etiketler (biçimler) kullanmamız gerekir. Bunun sebebi tüm sitelerin içeriklerinin tüm arama motorlarınca anlaşılabilir olmasını sağlamak için belirlenmiş kriterlerdir. Ayrıca içeriğin türüne göre (video, resim, makale) bu etiketler de çeşitlenmektedir. Konu ile ilgili daha fazla bilgi için sitemaps.org sayfasını ziyaret edebilirsiniz.

Biz örneğimizde standart bir makale içeriğine uygun olacak şekilde haritamızı hazırlayacağız. Bunun için <url>  düğümü içinde loc, lastmod, priority, changefreq etiketlerini kullanacağız.

Url etiketi site haritamızda yer alan her sayfamız için kapsayıcı elementtir ve içerisine yukarıda saydığımız etiketleri alacak şekilde yazılır. loc etiketi içeriğimizin tam adresini barındırır. lastmod içeriğimizin son güncellenme tarihi bilgisini tutar.

priority, gönderdiğimiz urller içerisinden bazılarına öncelik vermek istediğimizde kullandığımız etikettir. 0.0 ile 1.0 aralığında değer alır. Örneğin site haritasında ana sayfamızı 1, blog yazılarımızı 0.5 olarak önceliklendirebiliriz.

changefreq etiketi ise içeriğimizin taranma sıklığını belirtir. Yani içeriğimizin güncellenme durumunda yeniden taranması için bir süre belirtebiliyoruz.

Ayrıca site haritasının XML yapında bulunması gereken bazı temel etiketler de vardır ki bunlar site haritasının olmazsa olmazıdır. Arama motorları tarafından kabul edilen bir site haritası oluşturmak için aşağıdaki bildirimlerin bulunması zorunludur.

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 
http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd">

Asp.net ile Sitemap Oluşturma

Gelelim bu XML yapısını asp.net ile oluşturmaya. Asp.net C# ile XML oluşturma işlemleri için mevcut olan XmlTextWriter sınıfını kullanacağız. Bu sınıf içerisinde programatik olarak ihtiyaç duyacağımız tüm XML nesnelerini oluşturabileceğimiz bir yapı sunuyor.

Asp.net ile sitemap oluşturmak için projemize bir adet (aspx uzantılı) web form ekliyoruz. Formun görünüm tarafında yani aspx uzantılı dosyasında bir işlem yapmayacağız, burası olduğu gibi kalsın. İşlemlerimizi aspx.cs uzantılı dosyada C# kodları ile gerçekleştireceğiz.

Aşağıdaki kodlama ile xml site haritamızın oluşturmuş oluyoruz. Kodlama ile ilgili daha fazla bilgi için hemen her satırda yer alan açıklamaları okuyabilirsiniz.

Response.ContentType = "text/xml";
XmlTextWriter map = new XmlTextWriter(Response.OutputStream, Encoding.UTF8);//xmltext nesnemizden bir örnek türettik.
map.WriteStartDocument();//xml dosyamızı yazmaya başladık.
map.WriteStartElement("urlset");//Root elementimiz olan url etiketimiz ile aşağıdaki sitemap bildirimlerini ilk satıra yerleşirdik. 
map.WriteAttributeString("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9");
map.WriteAttributeString("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
map.WriteAttributeString("xsi:schemaLocation", "http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd");
map.WriteStartElement("url");//site haritasının içinde yer alacak ilk urlimiz projemizin ana sayfası, bunun için aşağıdaki etiketleri tek sefere mahsus ekledik.
map.WriteElementString("loc", "http://localhost:64406/");
map.WriteElementString("lastmod", DateTime.Now.ToString("yyyy-MM-dd"));
map.WriteElementString("changefreq", "daily");
map.WriteElementString("priority", "1");
map.WriteEndElement();
//haritamızın dinamik kısmına geldik. Veritabanından sayfalarımızın bilgilerini çekiyoruz.
string baglantiCumlesi = WebConfigurationManager.ConnectionStrings["ConStr"].ToString();
SqlConnection baglan = new SqlConnection(baglantiCumlesi);
SqlCommand listeleKomutu = new SqlCommand("SELECT * FROM Sayfalar", baglan);
baglan.Open();
SqlDataReader listele = listeleKomutu.ExecuteReader();
//veritabanından DataReader nesnesine aldığımız verilerle döngü içerisinde her bir sayfamızın verilerini siteharitasına ekliyoruz.
while (listele.Read())
{
    map.WriteStartElement("url");
    map.WriteElementString("loc", "http://localhost:64406/sayfa.aspx?id=" + listele[0].ToString());
    map.WriteElementString("lastmod", listele[3].ToString());
    map.WriteElementString("priority", "0.5");
    map.WriteElementString("changefreq", "monthly");
    map.WriteEndElement();
}
baglan.Close();
listeleKomutu.Dispose();
baglan.Dispose();
map.WriteEndElement();
map.WriteEndDocument();
map.Flush();
map.Close();
Response.End();

Yukarıdaki kodları sitemap olarak kullanacağımız sayfanın Page_Load metodu içerisinde çağırdığınızda site haritanız oluşacaktır. Sonucu görmek için projenizi çalıştırıp deneyebilirsiniz.

Temel veritabanı işlemleri dışında sadece XmlTextWriter nesnesini kullanarak asp.net site haritası oluşturmuş olduk. Konu ile ilgili soru ve sorunlarınızı aşağıdaki yorumlar bölümünden iletebilirsiniz.

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz