1 Kasım 2011 Salı

MVC için SEO - Sitemap

MVC ile site geliştrdiniz ve dünyanın bundan haberdar olması istiyorsunuz. Yapmanız gerek sitenizi arama motorlarına kaydetmek. Arama motorlarının sitenizde dolaşabileceği ve sitenizin listelerde üst
sıralarda çıkarabilecek bir yol sunmalısınız. MVC ile geliştirilen bir sitede SEO nasıl yapılır? Burada her yerde bulunabilecek (saylarda özel başlıklar kullanın, meta etiketleri ile sayfa içeri betimleyin, okunabilir linkler verin gibi) SEO önerileri yerine kodlama yapılarak sitenize kazandırmanız gereken özellikleri anlatacağım.
İlk olarak insanların ve arama motorlarının sitenizde rahatça dolaşabilmesi için site haritaları hazırlamanız gerekmektedir. Sitenizde ziyaretcileriniz için mutlaka bir site haritası sayfası veya arşiv sayfası oluşturunuz.

SiteMap.xml

Site Haritaları, web yöneticilerinin arama motorlarını sitelerindeki taranabilir

sayfalar hakkında bilgilendirmeleri için kolay bir yoldur.En basit biçimiyle, bir

Site Haritası, arama motorlarının siteyi daha akıllıca tarayabilmeleri için, her

bir URL'yle ilgili ek meta verilerle (son güncellenme zamanı, genellikle ne sıklıkta

değiştiği ve sitedeki diğer URL'lere göre ne kadar önemli olduğu) birlikte, bir

siteye ilişkin URL'leri listeleyen bir XML dosyasıdır. (sitemaps.org adresinden alıntıdır)
SiteMap.xml dosyası bir çok arama motoru tarafından desteklenen bir endüstri standartıdır. Sitenizin SiteMap.xml protokolüne uygun site haritası sağlaması gerekmektedir.

MVC sitemap.xml

Eğer siteniz için dinamik bir sitemap.xml oluşturmak istiyorsanız ne yapmalısınız ? İlk olarak yapmamız gereken sitemize gelen sitemap.xml dosya isteğini yakalamamız ve bir action'a yönlendirmemiz gerekmektedir. Uygulamanın başlangıçında (Global.asax Application_Start()) içinde sitemap.xml yönlendirmeyi yapalım:
[cs]
public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("robots.txt");
            routes.MapRoute("sitemap", "sitemap.xml", new { controller = "Rss", action = "SiteMap" });
Sitemize gelen sitemap.xml dosyası isteği RssController.SiteMap() action'a yönlendirdik. RssController.SiteMap() action metotdu stansart bir html yerine sitemap.xml protokolüne uygun çıktı üretmelidir. O halde ilk olarak sitemap.xml protokolüne uygun özelleşmiş bir ActionResult oluşturamamız gerekmektedir. Böylece arama motorlarının anlayabileceği bir içerik oluşturmuş olacağız. Sonuç olarak bir xml döndüreceğimiz için XmlWriter sınıfnı çıktı üretmek için kullanabiliriz.
[cs]
public class SitemapActionResult : ActionResult
    {
        private readonly string _siteUrl;
        private readonly List<Page> _pages;

        public SitemapActionResult(string siteUrl, List<Page> pages)
        {
            _siteUrl = siteUrl;
            _pages = pages;
        }

        public override void ExecuteResult(ControllerContext context)
        {
            context.HttpContext.Response.ContentType = "text/xsl";
            using (XmlWriter writer = XmlWriter.Create(context.HttpContext.Response.Output))
            {
                writer.WriteStartElement("urlset", "http://www.sitemaps.org/schemas/sitemap/0.9");
                writer.WriteStartElement("url");
                writer.WriteElementString("loc", _siteUrl);
                writer.WriteElementString("lastmod", DateTime.Now.ToString("yyyy-MM-dd"));
                writer.WriteElementString("changefreq", "daily");
                writer.WriteElementString("priority", "1.0");
                writer.WriteEndElement();

                foreach (var page in _pages)
                {
                    writer.WriteStartElement("url");
                    writer.WriteElementString("loc",
                                              string.Format("{0}/{1}/{2}/{3}", _siteUrl, page.Published.Year,
                                                            page.Published.Month, page.Slug)); 
                    writer.WriteElementString("lastmod", page.LastChanged.ToString("yyyy-MM-dd")); 
                    writer.WriteElementString("changefreq", "daily");
                    writer.WriteElementString("priority", "0.5");
                    writer.WriteEndElement();
                } 
                writer.WriteEndElement(); 
                writer.Flush();
                writer.Close();
            }
        }
    }
Böylece protokole uygun çıktı üretip xml forrmatında HttpContext.Response üzerine yazmış olduk. Benim örneğimde sayfaların değişim sıklığı ve önceliklerinin aynı olduğunu kabul edilmiştir. Her bir sayfaya ulaşabilmek için okunabilir bir link verilmiştir. Kendiniz için yukarıdaki ActionResult sınıfnı özelleştirebilirsiniz. Son olarak satimap.xml isteklerini yönlendirdiğimiz RssController.SiteMap() action metodunun SitemapActionResult ile isteklere cevap vermesi gerekmektedir.
[cs]
public ActionResult SiteMap()
        {
            return new SitemapActionResult(
                _settingRepository[SiteSettingKey.SiteUrl],
                _pageRepository.Query()
                    .Where(c => c.IsPublish && c.Published < DateTime.Now)
                    .OrderByDescending(c => c.Published).ToList());
        }
Böylelikle yayında olan sayfaları listeleyip sitemap.xml protokolüne uygun olarak cevap dönmüş olduk.
sitemap.xml görüntüsü

Sonuç

Arama motorlarına sitede bulunan sayfaları listemek ve sayfalar hakkında bilgi vermek için sitemap.xml dosyaları kullanılmaktadır. Buradaki çalışma ile MVC sitenize ait sitemap.xml dosyanızı dinamik olarak üretip kullanabileceğiniz bir yol önerilmiştir. SEO için yapılması gerekenler listesinde önemli bir madde olan sitemap.xml dosyası oluşturmayı çözümlemiş bulunmaktayız.

Hiç yorum yok: