mehmetduran.com - Paylaşmak Güzeldir...
Asp.net ile Dinamik Sitemap Hazırlama
Arama motorları bir siteyi indekslemek için içeriğine bakarlar. Bunu ise kendi botları ile yaparlar. Ancak bizim hazırlayacağımız sitemap ile arama motorları sitemizin içeriğini daha iyi takip edip, daha iyi indeksleyecektir. Bu sitemap ise bazı standartları olan ve tüm arama motorları için geçerli olan bir sitemap`tir. Biz bir sitemap yapıp tüm arama motorlarına bu sitemap`i bildirebiliriz.
Sitemap`in standartlarına ve gerektirdiklerine buradan ulaşabilirsiniz.

Şimdi ise bunu Asp.net ile nasıl yapacağımıza bakalım.

Öncelikle gerekli olan namespace`lerimizi ekliyoruz.
using System.Text;
using System.Xml;
using System.Data.OleDb;


Daha sonra aşağıdaki gibi kodlarımızı yazıyoruz.

protected void Page_Load(object sender, EventArgs e)
    {
        Response.Clear(); //sitemap xml formatlı olduğundan sayfamızın içeriğini temizliyoruz.
        Response.ContentType = "text/xml";

        XmlTextWriter xr = new XmlTextWriter(Response.OutputStream, Encoding.UTF8);
        xr.WriteStartDocument();
        xr.WriteStartElement("urlset"); // sitemap standartı gereği urlset düğümü oluşturuyoruz.

        // aşağıdaki kodlar ile sitemap`in hangi standartlara uygun olduğunuz belirliyoruz.
        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");

        // Aşağıdaki 6 satır ile de herhangi bir sayfayı sitemap`e ekliyoruz.
        xr.WriteStartElement("url"); // sitemap standartına göre url düğümü oluşturuluyor.
        xr.WriteElementString("loc", "http://mehmetduran.com/default.aspx");
        xr.WriteElementString("lastmod", DateTime.Now.ToString("yyyy-MM-dd")); //son değiştirme tarihi
        xr.WriteElementString("changefreq", "daily"); // sayfa içeriğini değişme frekansı
        xr.WriteElementString("priority", "1"); // sayfanın değişme frekansına göre öncelik sırası
        xr.WriteEndElement();

        // Aşağıda ise dinamik olarak yani veritabanındaki bilgilere göre sitemap`imizi hazırlıyoruz.
        OleDbCommand komut2 = new OleDbCommand("select sayfa_id,eklenme_tarihi from sayfalar", baglanti);
        baglanti.Open();
        OleDbDataReader oku2 = komut2.ExecuteReader();
        while (oku2.Read())
        {
            xr.WriteStartElement("url");
            xr.WriteElementString("loc","http://mehmetduran.com/news.aspx?nid="+oku2.GetInt32(0).ToString());
            xr.WriteElementString("lastmod", oku2.GetString(1);
            xr.WriteElementString("priority", "0.5");
            xr.WriteElementString("changefreq", "monthly");
            xr.WriteEndElement();
        }
        baglanti.Close();

        xr.WriteEndDocument();
        xr.Flush();
        xr.Close();
        Response.End();
    }


Standart bir sitemap`i Asp.net kullanarak böyle hazırlayabiliyoruz. Tüm arama sitelerinde de kullanabiliyoruz.
Kendi sitem için hazırladığım sitemap`e buradan ulaşabilirsiniz.
İyi Çalışmalar!

Bu makaleyi hazırlarken Gökhan Bağcı`nın makalesinden faydalandığımı belirtmek isterim.
Gökhan Bağcı`nın makalesine buradan ulaşabilirsiniz.
Mehmet Duran 02 Ağustos Cumartesi 2008 24 34435 4,2
Bookmark and Share
Bu Yazıyı Değerlendirin.
Konuyla İlgili Olabilecek Diğer Yazılar Asp.net ile HttpModule Kullanımı (Sistem Açma ve Kapatma) Beginning C Sharp 2008 (E-Book) Asp.net'te Jquery ve Ajax ile Veritabanından Veri Alma Jquery ile Gridview'da ki Checkbox'ların Tümünü İşaretleme veya Bırakma XNA Game Studio Creator's Guide (E-Book)
Yorumlar
Yorum Yaz
RSS Yorum Takibi
cihat yıldırım 25 Nisan Cumartesi 2009 16:48 #1
hocam bu kodları direk aspx dosyasına attım karşıma şöyle bir hata çıktı; XML sayfası görüntülenemiyor XML girişi stil sayfası kullanılarak görüntülenemez. Lütfen hatayı düzeltin ve Yinele düğmesini tıklatın veya daha sonra yeniden deneyin. -------------------------------------------------------------------------------- The server did not understand the request, or the request was invalid. `http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional... google hakkında da pek bilgim de yok
Mehmet Duran 25 Nisan Cumartesi 2009 22:30 #2
Bu hatanın nedenini bilemiyorum ama muhtemelen xml belgeyi oluştururken belirttiğin bir özellikten kaynaklanıyor olabilir. Kodları aynen kullanımışsan hata olmaması gerekir. Çünkü ben de aynısını kullanıyorum.
mustafa 28 Mayıs Perşembe 2009 21:21 #3
slm.. ya ben kaç gündür uğraşıyroum bir türlü siteme dinamik sitemap yapamadım:( bu kodlarlada çok denemdim ama yapamdım:( http://www.tekrarbekleriz.com/blog.asp?id=736 site adrerlerim bu şekil. db den nasıl çekip yapacağım yardımcı olrumusunuz:( mail@tekrarbekleriz.com
Mehmet Duran 31 Mayıs Pazar 2009 11:30 #4
Merhaba. Sorun tam olarak nedir? Dediğiniz gibi bir yapıyı oluşturmak için veritabanında olan tüm id`leri almalı ve o id`lere göre linkleri oluşturmalısınız.
mustafa 08 Haziran Pazartesi 2009 23:54 #5
sorun listelemiyor sitemap i boş sayfa gözüküyor. yeni konu ekledim yine boş gözüküyor. şimdi adres yapısını değiştim. http://www.tekrarbekleriz.com/779-ali-tuncay-gulme-garantili-video-izlemeyen-kalmasi.html şeklinde yaptım ama yine olmadı. kaç haftadır yapamadım ya:( önerebileceğiniz bi yöntem veya bi makale filan varmı
Mehmet Duran 09 Haziran Salı 2009 00:02 #6
Bu kodları kullanıyorum ve bir sorun yok. Yaptığınız kodları gösterirseniz daha iyi yardımcı olabilirim.
mustafa 09 Haziran Salı 2009 15:52 #7
yanlış dğeiştiriyor veya eksik yapıyro olabilrim kod konuusnda pek bilgim yok.. default asp debenim sayfamda yok . index.asp var sadece.. kodları yazdım sitemap.aspx yaptım. ekleidğim kodlar geliyor sitemapte aynen.. yazının hepsşii sığmıyor değiştiğim yerler; xr.WriteElementString("loc", "http://www.tekrarbekleriz.com/index.asp"); xr.WriteElementString("loc","http://www.tekrarbekleriz.com/blog.asp?nid="+oku2.GetInt32(0).ToString()); bunlar diğer bütün kodları aynen bi sayfaya kopyaladım
Mehmet Duran 09 Haziran Salı 2009 22:22 #8
Yaptığın sayfaya baktım. Öncelikle bunu yapmak için hostunun .net framework desteği olması gerekir. Ve bu kodları sayfanın server taraflı kodlama bölümünde yapmalısın. Yani server bu kodları yorumlamalı. Öncelikle hostunun .net desteği olup olmadığına bak ve buna göre .net ile bu sayfayı oluştur.
mustafa 13 Haziran Cumartesi 2009 12:00 #9
aspx kodlu yaptım şimdide Web.Config falan filan diyor :)) ben bi kez örnek sitemap indirmiştim onda 3 4 dosya daha inmişti Web.Config dosyası filandda vardı içinde ama yine olmamıştı:)) fazla zorlamayım en iyisi:)) programla oluşturup oluşturup atacam artık sitemapleri:) ilgin için tşk
Cem Tayfur Demirsal 27 Ağustos Perşembe 2009 11:57 #10
Mehmet Bey; Bukodları nereye yazıyıp, nasıl çağırıuor ve gösteriyoruz. Bu konuyada bi açıklık getirseniz. Biraz ecemiyim de :)
Mehmet Duran 27 Ağustos Perşembe 2009 13:49 #11
Merhaba. Kodlar Page_Load eventı ile başlıyor. Bunun için sitemap olarak kullanacağınız sayfanın Page_Load event kodlarını buradakilerle değiştirirseniz çalıştığını görürsünüz. Ayrıca kodlardan önce belirttiğim gerekli namespaceleri de kod yazdığın sayfanın en üstüne eklemelisin.
Mustafa 20 Şubat Cumartesi 2010 21:43 #12
hocam şimdi biz bu sitemap i .aspx uzantılı bir dosyada hazırlıyoruz ama bunun google faydasına olması için xml uzantılı bir dosya olması gerekmiyormu her seferinde biz buradan kodları alıp xml i kendimiz oluşturup hostumuza mı atmalıyız?
Mehmet Duran 20 Şubat Cumartesi 2010 21:51 #13
Sayfanın uzantısı xml olsun veya olmasın önemli olan içeriğidir. Zaten google'da içeriğe bakar. Bu arada sitemap.aspx bir asp.net sayfası ama kodlarda bu sayfayı xml belgeye çeviriyoruz. Onun için bir sorun olmaz. Bu yöntemi kendi sitem için kullandım ve bir sorun olmadı. Google'a xml dosya adresi verirken eğer adres xml veri ve sitemap içeriği şeklinde değilse zaten hata alırsın.
Mustafa 21 Şubat Pazar 2010 15:37 #14
anlayamadığım hocam şimdi google webmaster tools a sitemap eklerken siteadi.com/sitemap.aspx şeklinde mi eklicem
Mehmet Duran 21 Şubat Pazar 2010 15:45 #15
Evet. Aynen dediğin gibi olacak.
Mustafa 21 Şubat Pazar 2010 18:11 #16
teşekkür ederim hocam
o.l.t.u. 27 Ağustos Cuma 2010 02:37 #17
Hocam Ben dediklerinizin hepsini yaptım oluuşturduğum sitemap i xml, asp, aspx olarak denedim ama hep haya verdi. Şu anda www.oltuluyuz.biz/map.xml tıklarsanız hatayı sizde görebileceksiniz. Bu hatayı nasıl editlerim acaba. Yardımlarınız için şimdiden teşekkürler
Mehmet Duran 27 Ağustos Cuma 2010 14:51 #18
Daha önce Asp.net projesi açıp, sayfaları kodladıysan buradaki örneği de aynı şekilde yapacaksın. Bir sayfa açıp buradaki kodları sayfanın cs uzantılı kod bölümüne yazacaksın.
serkan aytac 27 Ekim Çarşamba 2010 13:38 #19
mehmet bey öncelikle teşekkür ederim. ben anlattığınız şekilde yaptım. Fakat şöyle bir sorunum var. örneğin öncelike sayfaları onun hemen altına haberleri onun hemen altınada makaleleri sıralamak istiyorum. Bunu yapmaya çalıştığımda sadece ilk çağırdığımı getiriyor. Diğer haberler ve makaleleri göstermior. Bu konuda nasıl bir çözüm yolu izlemeyelim. Tekrar teşekkürler
Mehmet Duran 27 Ekim Çarşamba 2010 14:27 #20
@Serkan, burada kodlamadaki mantıkta hata olabilir veya yazdığın kod bloğunda veriler gelmiyor olabilir. Kodların hatasız olduğunu görmek için break point ile tekrar gözden geçirmeni tavsiye ederim. Eğer burada sıkıntı yoksa xml yapıyı oluştururken bir sıkıntı vardır. İşlemleri ve döngüleri uygun biçimde yazman gerekir.
serkan aytaç 27 Ekim Çarşamba 2010 19:25 #21
Mehmet bey veriler doğru bir şekilde geliyor. Yani örneğin en üstte yazıları çağırdıysam yazılar geliyor sonrasında çağırdığım haberler gelmiyor. Yada haberleri ilk çağırırsam haberler geliyor fakat bu kezde yazılar gelmiyor. Sizden ricam farklı iki tablodaki veriler için bir örnek yapmanızdır. Yani örneğin yazilar tablosundaki yazıları ve haberler tablosundaki haberleri alt alta gösterebileceğimiz bir örnek. ilginizden dolayı tekrar teşekkür ederim. İyi çalışmalar dilerim
Mehmet Duran 30 Ekim Cumartesi 2010 10:44 #22
@serkan, aynı işlemi ben kendi bloğum için yaptım. Farklı tablolardan verileri çekip, sitamp oluşturdum. Burada senin döngü ve döngülerin sırasında bir hata yaptığını düşünüyorum. Burayı tekrar gözden geçirmeni tavsiye ederim. Tüm veriler xml dosyasında olması gerkeen aralıkta olmalı. Büyük igtimalle döngüleri yanlış yerde oluşturuyorsun ve bu aralık dışında verileri yazdırıyorsun.
Metin ÖZCAN 19 Mart Cumartesi 2011 17:27 #23
peki sitemizde url routing var ise dinamik site için loc devamındaki linki nasıl belirtmemiz gerekiyor. Meselahttp://mehmetduran.com/news.aspx?nid="+oku2.GetInt32(0).ToString() burada sizin id niz diğer sayfaya gidiyor benim projemde route map data gidiyor onu nasıl belirtmem lazım teşekkürler.
Mehmet Duran 08 Nisan Cuma 2011 22:49 #24
@Metin, bunun için helper metotlarını kullanmanı tavsiye ederim. Route yapısını kullanıyorsan bu metotlar da mevcuttur. Bunlar verdiğin parametrelere göre linki oluştururlar.
İsim :
Site :
Yorum :

Buradan bu yazıya ait yorumları RSS olarak takip edebilirsiniz.

Bu servis ile yazılara eklenen yorumları RSS ile takip ederek konu ile ilgili başkaları tarafından yapılan yorumları veya konuyla ilgili sorduğunuz sorulara verilen cevapları görebilirsiniz.
Kimse sana senden iyi öğüt veremez.
Bölümler
Yazılar
Arşiv
Arama
Linkler
Site İçi Arama
Son Zamanlarda Ne Yapıyorum ?
İstatistikler - Araçlar - Reklam
İstatistikler
Sayaç
Mehmet Duran | mehmetduran.com | Copyright © 2009