ASP.NET ile Dinamik Site Haritası Oluşturmak.

Daha önceki makalemizde site haritalari nedir, nasil kullanılır, XML yapısı nasıl olmalıdır, XML yapısı içerisinde kullanmamız gereken karakterler gibi konulara değinmistik. Eğer site haritaları hakkında bilginiz yoksa önceki makalemizi okumanızı tavsiye ederim.

Önceki makalemizde manuel olarak site haritası hazırlamaya değindik, peki manuel olarak site haritası hazırlayarak google’a göndermenizin dezavantajlarıvar mıdır? Varsa bu dezavantajlardan nasıl kurtulabiliriz.

Eğer sitenizin içeriği sürekli değişiyor veya sürekli yeni içerik ekleniyorsa bir süre sonra site haritanız güncelliğini kaybeder. Örneğin yazılım mutfağı sitesinde her yeni makale eklendiğinde bu makaleye ait yeni bir url ortaya çıkıyor. Ayrıca makale için eklenmiş olan her yeni etikette yeni bir url olarak karşımıza çıkıyor.

Google’in ana sayfamıza ulaştığı zaman yeni makalemizi bulup linkleri takip ederek güncel içeriği indekslemesi söz konusu ama bir site haritasındaki linkleri bularak indeksleme işlemini yerine getirmesi her zaman daha hizlı ve daha kesin olacaktır. Öyleyse her yeni içerik eklendiğinde site haritamızı açarak yeni url leri tek tek yazıp bunu yeniden google’a göndermek gerekiyor! O zaman nerde kaldı otomasyon. Bir sayfa yapsak ve bu sayfa bizim yerimize veritabanımızdaki bilgileri alarak tüm url leri otomatik olarak üretse ve bunları site haritası yapısına çevirdikten sonra XML olarak döndürse. Google’a gösterdigimiz site haritası yolunu da sitemap.xml seklide degil de sitemap.aspx seklinde göstersek tüm sorunlarımız çözülür.Öyleyse bunu nasıl yapacagımıza gelelim.

Yaptığımız örnek çalışmaya ait kodlara buradan ulaşabilirsiniz.
Kategori adında bir tablomuz var, her kategori için yeni bir url oluşturup site haritamıza eklemek istiyoruz ve bu işlemin siteye yeni kategori eklendiğinde de otomatik olarak yapılmasını istiyoruz. Sizin örneğinizde bu kategori değil de makalede olabilir.

No
KategoriAdi
1ASP.NET
2ASP
3CSharp
4PHP
5HTML

Web sitemize sitemap.aspx diye yeni bir sayfa ekiyoruz. Bu sayfanin html kısmına herhangi bir ekleme yapmamıza gerek yok. Sadece kod kısmına aşagıdaki fonksiyonu ekleyip pageload da bu fonksiyonu çağırıyoruz.

protected void Page_Load(object sender, EventArgs e)
{
    SiteHaritasiniDondur();
}
private void SiteHaritasiniDondur()
{
    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 AnaSayfa
    //AnaSayfamizi manuel olarak  Ekliyoruz.
    //veritabanindan çekerek olusturamayacaginiz degisken olmayan linkleri bu seklide ekleyin.
    strBuilder.AppendLine("<url>");
    strBuilder.AppendLine("<loc>");
    string makaleLink = String.Format("http://www.yazilimmutfagi.com");
    strBuilder.AppendLine(makaleLink);
    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

    //kategorilere gore sayfalari ekle
  nbsp;  #region Kategoriler
    SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=Ornek;Integrated Security=True;");
    conn.Open();
    SqlDataAdapter da = new SqlDataAdapter("Select * from Kategori", conn);
    DataTable dt = new DataTable();
    da.SelectCommand.ExecuteNonQuery();
    da.Fill(dt);
    foreach (DataRow row in dt.Rows)
    {
        strBuilder.AppendLine("<url>");
        strBuilder.AppendLine("<loc>");
        string kAd = row["KategoriAdi"].ToString();
        string kID = row["No"].ToString();
        if (kAd.Contains(‘(‘))
        {
            kAd = kAd.Substring(0, kAd.IndexOf(‘(‘));
        }
       //linki olusturuken & yerine & kullaniyoruz. aksi takdirde hata verir.
        makaleLink = String.Format("http://www.yazilimmutfagi.com/Default.aspx?KategoriID={0}&Kategori={1}", kID, kAd);
        strBuilder.AppendLine(makaleLink);
        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>");
    Response.ContentType = "text/xml";
    Response.Write(strBuilder.ToString());
    Response.End();
}

Yukaridaki kodu inceleyecek olursaniz tek yaptigimiz veritabanindaki kategorileri alarak web sitemize uygun bir seklide link haline getirip bir string olarak siteharitamiza ekliyoruz. En sonda yazdigimiz;

Response.ContentType = "text/xml";
Response.Write(strBuilder.ToString());
Response.End();

Kod parçası ise oluşturduğumuz site haritasını XML olarak döndürüyor. Sayfamızı çağırdığımız zaman aşağıdaki XML metni ile karşılaşırız.

<urlset>
  <url>
    <loc>
      http://www.yazilimmutfagi.com
    </loc>
    <changefreq>
      always
    </changefreq>
    <priority>
      1
    </priority>
  </url>
  <url>
    <loc>
     http://www.yazilimmutfagi.com/Default.aspx?KategoriID=1&Kategori=ASP.NET
    </loc>
    <changefreq>
      weekly
    </changefreq>
    <priority>
      0.5
    </priority>
  </url>
  <url>
    <loc>
      http://www.yazilimmutfagi.com/Default.aspx?KategoriID=2&Kategori=ASP
    </loc>
    <changefreq>
      weekly
    </changefreq>
    <priority>
      0.5
    </priority>
  </url>
  <url>
    <loc>
      http://www.yazilimmutfagi.com/Default.aspx?KategoriID=3&Kategori=CSharp
    </loc>
    <changefreq>
      weekly
    </changefreq>
    <priority>
      0.5
    </priority>
  </url>
  <url>
    <loc>
      http://www.yazilimmutfagi.com/Default.aspx?KategoriID=4&Kategori=PHP
    </loc>
    <changefreq>
     weekly
    </changefreq>
    <priority>
      0.5
    </priority>
  </url>
  <url>
    <loc>
      http://www.yazilimmutfagi.com/Default.aspx?KategoriID=5&Kategori=HTML
    </loc>
    <changefreq>
      weekly
    </changefreq>
    <priority>
      0.5
    </priority>
  </url>
</urlset>

Geriye kalan Google webmaster’a gidip site haritası yolu olarak sitemap.aspx sayfamızı göstermek. Artık Google ne zaman site haritamızı çekmeye kalkarsa en güncel site haritamızı almış olacak.

24 thoughts on “ASP.NET ile Dinamik Site Haritası Oluşturmak.

  1. Kategori Adındatürkçe karekter sorunu için şöyle scrip çalışması yaptım  ve ekledim.

    string kAd = siteblog.App_Start.turkcekarakterduzelt.turkceduzelt(row[“kategoriAd”].ToString());
  2. Eger istedigin link gerçketen var olan bir sayfaya gidiyor ise sorun yok, eger gerçek bir adres degil ise URL rewriting yapman gerekir.

    Senin verdigin link seo için daha uygun fakat URLRewriting ister.
  3.         makaleLink =String.Format(“http://www.yazilimmutfagi.com/Default.aspx?KategoriID={0}&amp;Kategori={1}”, kID, kAd);


    buradaki linki kendi istegimize göre düzenliyebiliyor muyuz? 

    Örnegin ben su kismi



    seklinde düzenleyebilirim. ben bu sekilde daha anlasilir bir sekilde düzenlemek istiyorum bunu nasil yapabiliriz ? 
  4. hocam kodlary yazdym o xml görüntüsünü elde ettim daha sonra nasyl treeview görünümü alcak onu yapamadym.

  5. malesef ben sadece site haritasyny google veya diger servislere ekliyorum. site içinde özel gösterimli bir harita yapmadym daha önce.

    google a aspx uzantyly adresi vermeniz yeterli zaten. sitemap.aspx gibi.

  6. Hocam kodu yazdym ama site haritasyna ekleyemedim. Sadece makaledeki xml görünümünü elde ettim devamyny nasyl yapaca?ym bir makaleniz var my acaba? 

  7. Merhabalar makale için tesekkürler.

    Beni sorum söyle olacak tamam kategorileri çektik fakat birden fazla tablodan veri çekmek istiyorsam nasil yapacagim ?

    Örnekte kategoriler tablosu var, ben ürünler, duyurular, haberler vs. olarakta çekmeyi istiyorum. Ayri ayri region olarak mi yapmak lazim yoksa baska yol var mi ? 

  8. diyelimki siteye yeni bir link eklemiyorum. mevcut kategorilere sürekli bilgi ekliyorum dinamik olarak.

    o zaman google a sayfalarimizin güncellendigini nasil bildirebiliriz.

    bilgiler için tesekkürler. emeginize saglik

     

  9. kullanicini o anda hangi kategoride oldugunu biliyorsunuz ama  onu alt kategoriler halindemi gösteremiyorsunuz ?

  10. Merhabalar

    Örnek1;
    Demirleme/Rihtim
    . Çipa
    .Aksesuarlar

    Örnek2;
    Demirleme/Rihtim > Çipa > Aksesuar

    Yukaridaki vermis oldugum örnek 1 de oldugu gibi menü listelete biliyorum yapamadigim sey ise Örnek 2 deki gibi kullanici o an hangi anakategorinin hangi alt kategorisinde oldugunu nasil listelete bilirim.

    Bu linke tiklayabilirseniz bahsetmek istedigimi tam anlamiyla anlatmis olurum yardimlarinizi bekliyorum.

    http://img530.imageshack.us/img530/586/kategorilisteleme.jpg

     

  11. bizden katki olsun sitene 🙂 google burdan seni siteye gidip indexleme yapar. ama senin icin sorunsa kaldirabilirim  

  12. msk cevabin için tesekkürler…
    biraz zaman geçmesi gerekiyormus herhalde eve gelince tekrar açip baktim.Google hepsini tanimis artik…

    bir de rica etsem ilk sorumdaki linki düzeltir misin yanlislikla bizim siteyi yazmisim url olarak.Tiklayinca link çalisiyor

    iyi çalismalar

  13. bizim sitede robots.txt içeriginde sitemap bildirmedim sadece  google webmastera sitemapi tanittim ve herhangi bir sorun yasamiyoruz. 

  14. mehmet bey paylasimiz çok güzel ellerinize saglik.yanliz google webmaster’da sitemap.aspx sayfasini ekledigimde;
    "Aga ulasilamiyor: robots.txt dosyasina ulasilamiyor" diye bir hata veriyor:(

    robors.txt dosyasinin içerigi de :
    User-agent: *
    Disallow: /Images/
    Disallow: /Administrator/
    Disallow: /Shopping/
    Disallow: /Users/
    Sitemap: http://www.orneksite/sitemap.aspx

    seklinde…Yardimlarinizi bekliyorum.Ne yapmam lazim.Iyi çalismalar.

  15. Begeninizi almak bizim için önemli. Tavsiye ve önerilerinizide mail olarak almaya haziriz. Yorum için tesekkürler

  16. makalelerinizi cok begeniyorum inallah eklemeye devam edersiniz. Yaptigim bi hatayi da makalenizden görüp düzelttim

  17. proje için url adresi yerine ftp adresi vermisim. Hatayi hemen düzeltiyorum. Yorumunuz için tesekkür ederim

  18. merhabalar, makalenizi çok begendim. ancak ftp ile kodlariniza nasil ulasacagimi söylerseniz çok sevinirim

Guests için bir cevap yazın Cevabı iptal et

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