Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

Asp.NET MVC – SiteMap Yapımı

SiteMap(Site Haritaları) bir web sitenin arama motorlarına tanıtımını ve hızlı içerik yayınlamasını gerçekleştirir.Site haritası ilgili sitedeki yeni bir içeriğin anında Google tarafından algılanmasını sağlar ve arama sonuçlarına bunu yansıtır.SEO açısından büyük önem arz eden SiteMap uygulaması hakkında Google’da olumlu bir bakış açısı sergilemektedir.SiteMap olan sitelerin sayfalarına erişim önceliği tanınmaktadır.Günümüzde kaliteli siteleri incelersek eğer SiteMap olmazsa olmazlarındandır.Böyle önemli bir yapıyı Asp.NET MVC mimarisiyle dinamik olarak nasıl oluşturabiliriz bu yazımızda inceleyelim.

Öncelikle yazımızı detaylandırmadan örneklendirmemizi “Northwind” veritabanında “Personeller ve Bolgeler” tablolarını kullanarak gerçekleştireceğimizi söylemekte fayda var.

Bu makalenin amacı SiteMap(Site Haritası)’ı Asp.NET MVC mimarisinde dinamik olarak nasıl oluşturabileceğimizi göstermektir.Programatik açıdan işlevsel benzerlik gösteren RSS yapısı hakkında yakın zamanda yazmış olduğum Asp.NET MVC – RSS Oluşturma başlıklı yazıya benzer bir kod yazımı gerçekleştireceğiz.

Yukarıdaki belirtilen yazıyı incelerseniz eğer RSS yapısının XML tabanlı olduğunu ve belirli bir taslak, şablon ya da yapı diyebileceğimiz modelden oluştuğunu göreceksiniz.

Benzer şekilde SiteMap yapısıda XML tabanlıdır ve belirli bir model yapısındadır.

Bu modeli aşağıdaki gibi örneklendirebiliriz.


<url>
  <loc> Link </loc>
  <lastmod> Tarih </lastmod>
  <changefreq> Frekans </changefreq>
  <priority> Önem Sırası </priority>
</url>
<url>
   ...
</url>
...

Şimdi sırasıyla node’lardan bahsedelim.
url : Her içerik için bir url oluşturulacaktır.
loc : Location anlamına gelmektedir.Sayfa linki buraya verilir.
lastmod : İçeriğin son güncelleme tarihi buraya verilir.
changefreq : Sayfanın güncellenme periodu.Saatlik, günlük, haftalık ve aylık olmak üzere 4 parametre verebiliriz.
priority : SiteMap’ta yayınlanan içerik bir yazı ya da kategori vs.. gibi bişey olabilir.Buraya önem ve öncelik değeri verilir.

Şimdi bu yapıları öğrendiğimizi göre Asp.NET MVC ile dinamik bir SiteMap oluşturalım.
Yapacağımız senaryoyu ufak bir özetlemek gerekirse eğer, Northwind veritabanı içerisinde bulunan Personeller ve Bolgeler tablolarındaki verilerin hayali sitemizde içerik olduğunu varsayıyor ve bu tablolardaki veriler için SiteMap dosyası oluşturacağım.

Örnek bir Asp.NET MVC projesi açıp ilk iş olarak Model katmanında “.dbml” uzantılı dosya açarak Northwind veritabanıyla bağlantısını kurmak ve Personeller tablosunun Entity’sini Linq To SQL ile hızlıca oluşturmaktır.

“Home(Controller).cs” isminde bir Controller sınıfı oluşturup “Index” isimli Action metodunda SiteMap kodlarımızı yazalım.

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            VeriTabaniDataContext Veri = new VeriTabaniDataContext();

            Response.Clear();
            //Response.ContentTpye ile bu Action'ın View'ını XML tabanlı olarak ayarlıyoruz.
            Response.ContentType = "text/xml";
            XmlTextWriter xr = new XmlTextWriter(Response.OutputStream, Encoding.UTF8);
            xr.WriteStartDocument();
            xr.WriteStartElement("urlset");//urlset etiketi açıyoruz
            xr.WriteAttributeString("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9");
            xr.WriteAttributeString("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
            xr.WriteAttributeString("xsi:schemaLocation", "http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd");
            /* sitemap dosyamızın olmazsa olmazını ekledik. Şeması bu dedik buraya kadar.  */

            xr.WriteStartElement("url");
            xr.WriteElementString("loc", "http://blog.gencayyildiz.com/");
            xr.WriteElementString("lastmod", DateTime.Now.ToString("yyyy-MM-dd"));
            xr.WriteElementString("changefreq", "daily");
            xr.WriteElementString("priority", "1");
            xr.WriteEndElement();

            //Burada veritabanımızdaki Personelleri SiteMap'e ekliyoruz.
            var s = Veri.Personellers;
            foreach (var a in s)
            {
                xr.WriteStartElement("url");
                xr.WriteElementString("loc", "http://site.com/PersonelAdi/" + a.Adi);
                xr.WriteElementString("lastmod", DateTime.Now.ToString("yyyy-MM-dd"));
                xr.WriteElementString("priority", "0.5");
                xr.WriteElementString("changefreq", "monthly");
                xr.WriteEndElement();
            }

            //Aynı şekilde burada da Bolgeleri SiteMap'e ekliyoruz.
            var k = Veri.Bolgelers;
            foreach (var b in k)
            {
                xr.WriteStartElement("url");
                xr.WriteElementString("loc", "http://site.com/Bolge/" + b.BolgeID);
                xr.WriteElementString("lastmod", DateTime.Now.ToString("yyyy-MM-dd"));
                xr.WriteElementString("priority", "1");
                xr.WriteElementString("changefreq", "monthly");
                xr.WriteEndElement();
            }

            xr.WriteEndDocument();
            //urlset etiketini kapattık
            xr.Flush();
            xr.Close();
            Response.End();
            return View();
        }
    }

Yukarıdaki kod bloğunu incelerseniz eğer Asp.NET MVC mimarisinde SiteMap yapısını dinamik olarak nasıl yapmış olduğumuzu algılarsınız.Tabi burada Northwind veritabanına göre LINQ eşliğinde bir dinamiklik kazandırdık.Siz size özel bir veritabanında istediğiniz tarzda(mesela Ado.NET kullanarak) veri işlemlerini dinamikleştirip SiteMap’ınızı oluşturabilirsiniz.

Projeyi derleyip çalıştırdıktan sonra görüntüsü aşağıdaki gibi olacaktır.
SiteMap

Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

3 Cevaplar

  1. Enes Karataş dedi ki:

    Hocam merhaba , yukarıda anlattıklarınızı uyguladım ve çalıştı ancak ana dizine sitemap.xml adında bir dosya oluşturmayı başaramadım bunu nasıl yapabilirim?

  2. tutku dedi ki:

    Merhaba öncelikle teşekkürler çok işime yaradı. Ancak localde çalışırken canlıya attığımda sitemap görmüyor 404 hatası alıyorum çözümü nedir?

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir