Daha önceki makalemizde site haritaları nedir, nasıl kullanılır, XML yapısı nasıl olmalıdır, XML yapısı içerisinde kullanmamız gereken karakterler konularına değinmiştik. 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 göndermeniz 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’ın 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 hızlı ve daha kesin olacaktır. Öyleyse her yeni içerik eklentisinde 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 üreterek bunları site haritası yapısına çevirdikten sonra XML olarak döndürse. Google’a gösterdiğimiz site haritası yolunu da sitemap.xml şekliden değil de sitemap.aspx şeklinde göstersek tüm sorunlarımız çözülür.Öyleyse bunu nasıl yapacağımıza gelelim.
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 |
1 |
ASP.NET |
2 |
ASP |
3 |
CSharp |
4 |
PHP |
5 |
HTML |
Web sitemize sitemap.aspx diye yeni bir sayfa ekiyoruz. Bu sayfanın html kısmına herhangi bir ekleme yapmamıza gerek yok. Sadece kod kısma aşağıdaki fonksiyonu ekleyip pageload a 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
//AnaSayfamızı manuel olarak Ekliyoruz.
//veritabanından çekerek oluşturamayacağınız değişken olmayan linkleri bu şeklide 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 sayfaları ekle
#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 oluşturuken & yerine & kullanıyoruz. 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();
}
Yukarıdaki kodu inceleyecek olursanız tek yaptığımız veritabanındaki kategorileri alarak web sitemize uygun bir şeklide link haline getirip bir string olarak siteharitamiza ekliyoruz. En sonda yazdığımız;
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.