ASP.NET’te Meta Tag’ların dinamik yüklenmesi

Bir html sayfası hakkında bilgi içeren, özetini sunan, hangi temel sözcükler üzerinde durduğunu bildiren, sayfanın ne zaman ve kimin tarafından hazırlandığını gösteren etiketlere meta tag denilir. Bir sayfaya ait üst veriler olarak tanımlanan meta tag etiketleri, description, keywords, author, classification, copyright, robots gibi değerlerden oluşur. Aşağıda, bu sayfanın örnek meta tagları bulunmaktadır;

Meta tagları ziyaretçiler için değil daha çok arama motorlarının o sayfayı doğru ve kolayca analiz etmesi için düzenleriz. SEO(Search engine optimization – Arama motoru optimizasyonu) uygulamalarında en önemli işlemlerinden biri de sitedeki sayfaların meta taglarının güncellenmesidir. Hazırladığımız site veya sayfaların arama motorları tarafından kolayca indekslenmesi ve aramalarda üst sıralarda çıkması için anahtar kelime ve ifadeleri doğru yerde etkili kullanmamız gerekmektedir. Google’a spideri olan freshbot robotu, sayfanın güncellenme sıklığına göre sitemize gelip sitede herhangi bir güncellemenin olup olmadığını denetler(Google dance). Bu süre zarfında siteye yeni içeriklerin girilmesi hem sitenin hitini artıracak hem de search engineler tarafından yeniden indekslenmesi sağlanacaktır. Bu güncellemeyi meta taglarından başlatmamız daha doğru olacaktır. Fakat çoğu zaman bu kısa sürede sayfanın meta taglarını güncelleme imkanı bulamadığımız için veya sayfayı güncelleyip ftp ile yeniden host sunucusuna göndermeye erindiğimiz için bu işi dinamik hale getirmek daha kolay bir çözüm olacaktır. .NET 2.0 doğrudan sayfanın meta taglarına erişmemize imkan verir. Framework 2.0’ta bulunan System.Web.UI.HtmlControls.HtmlHead sınıfı aracılığıyla o sayfanın header kontrollerine erişebiliriz. Yine aynı şekilde Page nesnesinin Title property’si aracılığıyla her sayfanın Title bilgisini de dinamikleştirebiliriz.
Bu dinamik bilgileri bir veritabanından okumak işi daha da kolaylaştıracaktır.

protected void Page_Load(object sender, EventArgs e)
{
    string Keywords="Veritabanından gelen liste";
    string Description = "Veritabanından gelen açıklama";
    string Title = "Ahmet Kaymaz - Bu sayfaya özel başlık";
    //Keywords için bir meta tag nesnesi oluşturalım.
    HtmlMeta Meta = new HtmlMeta();
    //Meta tag nesnesine name ve content niteliklerini ekleyelim
    Meta.Attributes.Add("name", "keywords");
    Meta.Attributes.Add("content", Keywords);
    //Bu meta tagı sayfanın header listesine ekleyelim
    Header.Controls.Add(Meta);

    //Description için yeni bir meta tag nesnesi oluşturalım.
    Meta = new HtmlMeta();
    //Meta tag nesnesine name ve content niteliklerini ekleyelim
    Meta.Attributes.Add("name", "description");
    Meta.Attributes.Add("content", Description);
    Header.Controls.Add(Meta);

    //Sayfanın başlığını güncelle
    Page.Title = Title;

}//Page_Load
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
	Dim Keywords As String = "Veritabanından gelen liste"
	Dim Description As String = "Veritabanından gelen açıklama"
	Dim Title As String = "Ahmet Kaymaz - Bu sayfaya özel başlık"
	'Keywords için bir meta tag nesnesi oluşturalım.
	Dim Meta As HtmlMeta = New HtmlMeta()
	'Meta tag nesnesine name ve content niteliklerini ekleyelim
	Meta.Attributes.Add("name", "keywords")
	Meta.Attributes.Add("content", Keywords)
	'Bu meta tagı sayfanın header listesine ekleyelim
	Header.Controls.Add(Meta)

	'Description için yeni bir meta tag nesnesi oluşturalım.
	Meta = New HtmlMeta()
	'Meta tag nesnesine name ve content niteliklerini ekleyelim
	Meta.Attributes.Add("name", "description")
	Meta.Attributes.Add("content", Description)
	Header.Controls.Add(Meta)

	'Sayfanın başlığını güncelle
	Page.Title = Title
End Sub

Bu işlemden sonra sayfanın meta bilgileri şu şekilde oluşmuş olacaktır.

Buradaki html kontrollerini kullanabilmek için System.Web.UI.HtmlControls sınıfını sayfaya import etmeyi unutmamalıyız.
Bu işi daha da geliştirerek sayfayı çağıran ziyaretçi, Googlebot(Google’ın arama robotu) ise ona özel title ve meta taglar sunabiliriz.

ASP.NET’te Meta Tag’ların dinamik yüklenmesi” üzerine bir düşünce

  1. Necmi Kayıkcı

    Hocam Allah(c.c.) razı olsun.Çok güzel bilgilendirme yazısı.Yalnız HtmlMeta() objesini sürekli oluşturmadan bir kere oluşturup seri halinde hepsini ekleyemezmiyiz.Örn:keywords için ayrı,description için ayrı değil de tek bir obje ve hepsini eklesin.Belki bir döngü ile olur gibi geliyo bana ama çok uğraşamadım vakit sıkıntısı nedeniyle bi sorayım dedim.Cevaplarsanız ne ala cevaplamazsanızda sağolun.

    Cevapla
  2. Burcu

    Merhaba, benim meta tagların dinemik yüklenmesi ile ilgili bir sorum olacaktı. Sayfanın title, keywords ve description biligilerini cs tarafında atadığım değişkenlerden şu şekilde alıyorum. title>
    meta name=”Description” content=”” />
    meta name=”Keywords” content=”” />meta tagları bu şekilde ayarlayınca kendi bilgisayarımda değerleri sayfa yüklendikten sonra sourceda alabiliyorum. Ancak siteyi servera yükleyip dışardan erişmeye çalıştığımda ise ne baslık bilgisi görünüyor ne de keyword ve description bilgileri. Bunların görünmesini nasıl sağlarım. Yardımcı olursanız sevinirim.İyi Günler.

    Cevapla
  3. Ahmet Kaymaz Yazar

    Burcu Hanım,bahsettiğiniz c# kodları bana ulaşmadı. Yeniden yazabilirseniz belki yardımcı olabilirim.

    Cevapla
  4. Murat Topçu

    Meta tag değilde mesela bir tabloya hücre eklemek istesem yada herhangi bir html tagini özellikle server taraflı çalışmayan tagları düzenlemek istesem nasıl yapabilirim?

    Cevapla
  5. Ahmet Kaymaz Yazar

    İstemci tarafında HTML belgesi içinde herhangi bir düzenleme yapmak için VbScript, JavaScript gibi Client Side Script kullanmanız gerekir. Örneğin sayfanın title’ni değiştirmek için
    Aynı şekilde belgedeki Table, Tr, Td, a, span, div, img gibi html elementlerine erişmek için bu elementlerin ID bilgisi parametre alınarak “document.getElementById()” metodu kullanılabilir. Bu metodla elde edilmiş olan elementin property’leri(attribute’leri) kolaylıkla değiştirilebilir.

    Cevapla
  6. Osman

    Merhaba Ahmet Bey,
    Öncelikle bu çok faydalı bilgiler için teşekkür ederim. Ancak kafama takılan bir noktayı sormak istiyorum. Asp.Net 2.0 la birlikte gelen masterPage sayfalarında bu işlemi nasıl yapabiliriz.Bildiğiniz gibi masterPage sayfaları bir çok sayfaya giydirilmiş bir biçim gibi düşünülüp meta etiketleri bu alanda bulunuyor.

    Cevapla
  7. Ahmet Kaymaz Yazar

    Merhaba Osman Bey,.aspx sayfalarının MasterPage içerisinde olmasının bir farkı yok. Nihayetinde bu sayfalar, MasterPage sınıcının altında bir kontrol olduğu için ve ContentPlaceHolder bileşeni içerisindeki sayfadan master page’e erişilebildiği için bir kontrolün property’si set edilir gibi meta taglar kolayca değiştirilebilir. Master Page’in genel prototipi aşağıdaki gibidir.
    < %@ Master Language="CS" %>


    Untitled Page



    Bunun içerisine Urun.aspx sayfasını eklediğimizi düşünelim. Urun.aspx.cs dosyasından master.FindControl() yordamıyla ilgili alana erişilebilir. Fakat bu işin daha doğru yöntemi olarak aşağıdaki gibi bir satırla sayfanın Title alanı güncellenebilir. ASP.NET otomatik olarak master içerisinde de olsa o sayfanın başlığını değiştirir.Page.Header.Title = “C# ile ilgili örnekler”

    Cevapla
  8. veysel

    merhaba, en son bahsettiğiniz konuya ek bir soru sormak istiyorum. master page içinde olan bir form elemanı kullanmak için master.FindControl() ile bir kopyasını alıp çalışabiliriz. en azından öyle görünüyor. peki masterpage de bulunan bir elemana contentte bulunan başka bir form elemanındaki bilgiyi yada .vb içinden bir bilgiyi nasıl gönderebiliriz?
    yani: aynı masterpage’i kullanan 5 farklı aspx var diyelim. her birisi,kendisi çalıştığında masterpage de bulunan bir form elemanına bilgi göndermek için ne yapmalı. textbox örnek olabilir.
    şimdiden teşekkürler.

    Cevapla
  9. Ahmet Kaymaz Yazar

    Merhaba Veysel Bey,aslında istediğiniz şey önceki mesajda yazılmış. Eğer yanlış anlamadıysam alt sayfadan master sayfasındaki bir kontrole erişmek istiyorsunuz. Bunun için Master.FindControl() yordamını kullanmanız yeterlidir. Aynı şekilde eğer master sayfasından alt sayfadaki bir kontrole erişmek istiyorsanız master sayfasında ContentPlaceHolder1.FindControl() yordamını kullanabilirsiniz. Buradaki ContentPlaceHolder1 ifadesi, master page içerisinde alt sayfaların konulacağı yer tutucusunun adıdır. Örneği alt sayfadaki txtMusteri isimli bir TextBox kontrolünü set edelim.
    ((TextBox)ContentPlaceHolder1.FindControl(“txtMusteri”)).Text = “Müşteri Adı Ne Olsun”;Bu arada yeri gelmişken söyleyelim, Önce master page içerisindeki kontroller oluşur ardından alt sayfaki kontroller oluşur. Daha sonra önce alt sayfanın Page_Load eventi tetiklenir ardından master page’in Page_Load eventi tetiklenir.

    Cevapla
  10. Ahmet Kaymaz Yazar

    Mahmut,tam olarak hangi kodun çalışmadığını yazabilirsen daha iyi yardımcı olabilirim ama bu sayfada verilmiş kodların 3.5 için bir farklılığı olduğunu sanmıyorum. Çünkü konuyla ilgili 3.5’ta herhangi bir değişiklik olmadı.

    Cevapla
  11. Hasan Kaya

    Düz bir HTML sayfası yazıp HEAD içerisine META DATA’ları yazmakla, bir aspx sayfası oluşturup, Master Page kullanıp META DATA’ları dinamik olarak oluştumanın google bot’u için bir farkı varmı? Veya farklı bot’ların sayfayı indexlemesi için bir fark teşkil edermi?T&eşekkürler.

    Cevapla
  12. Ahmet Kaymaz Yazar

    Google gibi arama motorları kurallara göre yazılmış olan düz html sayfalarını daha kolay indekslemektedir. Metadata bilgisinin dinamik mi yoksa statik mi düzenlendiğini Google anlamayacağı sayfa güncellenmiş havası vermek için dinamik yapmanız daha faydalı olacaktır. Ama bu değişiklik yeterli olmayacaktır ayrıca sayfanın SEO kurallarına göre düzenlenmiş olması da önemlidir.

    Cevapla
  13. Hasan Kaya

    SEO kurallarına göre düzenlenmiş den kasdedilen nedir? Search yaptım ve sitenizle konuyla ilgili bir makale bulamadım. Önerebileceğiniz mümkünse türkçe kayan var mı?Teşekkürler.

    Cevapla
  14. Ahmet Kaymaz Yazar

    SEO (Search Engine Optimization – Arama Motoru Optimizasyonu) ile ilgili seochat.com sitesini iyi bir kaynak olarak kullanabilirsiniz. Bu sitede google bot özelliklerini, pagerank belgelerini, keywork ile ilgili ipuçları bulabilirsiniz. Türkçe kaynak olarak Google’deki aramalarda denk gelmiştim. Onlar da sizin yararlı olabilir. SEO bu blogun konusu olmadığı için makale bulamamışsınızdır. Sadece ilgimi çeken bir konu olduğu için sizin yönlendirmeye çalıştım.

    Cevapla
  15. Ramazan ARSLANTÜRK

    Merhabalar,Öncelikler, bilgiler için teşekkür ederim. Aşağıdaki kodu denedim. Fakat, Türkçe karakterler bozuk geliyor. Sebebi nedir acaba? Bir de this.Master.Page.Title komutunu üste de koysam alta da koysam, title en altta geliyor. Teşekkür ederim.AddMetaTag(“keywords”, “ekincioglutoys.com, oyuncak, oyuncax, Ahşap Eğitici Ürünler, .”);AddMetaTag(“description”, “ekincioglutoys.com Ekincioğlu Toys – Oyuncak Dünyası | Ekincioglu Toys – World of Kids”);AddMetaTag(“author”, “Deltasoft.com.tr E-Ticaret Sitesi”);AddMetaTag(“Robots”, “index, follow”);AddMetaTag(“Language”, “TR”);AddMetaTag(“verify-v1¨, “1XAAiX59vqPQoCLaGlC+C2uHRyXauDxf4oedmXzjCGM=”);this.Master.Page.Title = “Oyuncak Dünyası – ekincioglutoys.com”;

    Cevapla
  16. Ahmet Kaymaz Yazar

    Türkçe karakter sorununun birkaç nedeni olabilir. web.config içerisinde aşağıdaki satırları ve meta-tag bölümüne de satırını yazdığınızda karakterler doğru kodlanmışsa sorun çıkmayacaktır.

    <>
    culture="tr-TR"
    uiCulture="tr"
    requestEncoding="iso-8859-9"
    responseEncoding="iso-8859-9"/>
    Title alanının nerede çıkacağı Master Page içerisindeki HEAD etiketi altındaki TITLE etiketine bağlıdır. Örneğin aşağıdaki ifadede title bilgisini set ettiğinizde diğer tagların üstünde görünür.

    Untitled Page
    Eğer master page içerisinde HEAD » TITLE etiketi yoksa doğal olarak sayfanın kontrollerini ekleyecek ardından Title gibi property’leri set edecektir.

    Cevapla
  17. Eren

    Öncelikle yazınız için teşekkürler, gerçekten faydalı bilgiler veriyorsunuz. Benim de yukarıda sorulanlara benzer bir sorunum var. MasterPage’de yazdığım meta taglarını bu MasterPage’i kullanan bir sayfada değiştirmek istedim ama “NullReferenceException” hatası alıyorum, oluşturduğum meta elementi boş görünüyor. Yardımcı olursanız sevinirim.HtmlMeta meta = new HtmlMeta();
    meta.Name = “keywords”;
    meta.Content = anahtarkelimeler;
    this.Header.Controls.Add(meta);

    Cevapla
  18. Ahmet Kaymaz Yazar

    MasterPage içerisindeki head etiketinin runat=server özellikli olduğundan emin miyiz. Tam olarak hangi satırda hata veriyor.

    Cevapla

Bir cevap yazın

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

Time limit is exhausted. Please reload CAPTCHA.