Merhabalar herkese :)
Bu yazımızda XML Web Service yapısını kullanarak ASP.NET uygulamalarımızda nasıl dinamik bir şekilde Meta Tag ekleyebiliriz onu inceleyeceğiz. Öncelikle Meta Tag'lar bildiğimiz gibi web sayfalarımızın Head etiketleri arasında tanımlanan ve arama motorlarının sayfamızı indekslemek için kullanacağı bilgilerin bulunduğu bölümdür.Tabi ki günümüzde ki artık arama motorları çok akıllı olduğundan indeksleme algoritmaları meta tag'lara göre değil de sayfamızın içerisinde ki içeriğe görede yapabildiğini bilmekte yarar var.Ama burdan çıkaracağımız anlam kesinlikle Meta Tag'ların önemsiz olduğu olmamalıdır. Bir sitede meta tag'ların sabit olabileceğini ve niçin dinamik olarak uğraştığımızı sorabilirsiniz.Bizim burada modelleyeceğimiz yapı tek web sitesine göre değilde , elimizde 10'larca web sitesinin olduğunu ve bunların meta tag yönetiminin tek bir yerden yapabilmektedir.Bu işlemleri gerçekleştirirken de web servisi teknolojisinden yararlanacağız.Öncelikle web sitelerimizin bilgilerini saklayacağımız veri tabanımızın yapısı aşağıdaki gibidir.
Veritabanımızın yapısınıda bakacak olursak tüm metalarımızı,sitelerimizi ve metalarımızın alacağı değeleri farklı tablolara dağıtarak sistemimizin 100'lerce siteyide yönetebilmesini sağlıyoruz.Tek tablodada birşeyler yapabilirdik ama site sayısı arttığında zorlukları ortaya çıkacaktır.Bu yüzden ilişkisel bir olarak tasarlıyoruz herşeyi.
Tablolarımıza bakacak olursak , MetaUrl bizim üzerinde çalışacağımız ve diğer tablolarla ilişkili olan en önemli tablomuzdur.MetaUrl'de kullanıcıya gösterecek olduğumuz meta bilgileri , SiteUrl tablosunda sistemde kullanacak olduğumuz sitelerimiz , MetaTip tablosunda belirteceğimiz metalarımız (keywords,author vb) ve son olarakda Meta tablomuz bulunmaktadır ki burada da özellikleri yani name'leri tutulmaktadır.Örneneğimizde 2 site ve bunların meta bilgileri bulunmaktadır.PRogramlama tarafından veritabanımız üzerinde işlem yapacağımızdan biz hangi sitenin meta tag'larını istiyorsak o site adresini aşağıdaki Stored Procedure'mıza parametre geçmemiz yeterli olacaktır ve böylece bize belirtilen sitenin tag'larını geriye döndürecektir. SP aşağıdaki gibidir ;
[code:tsql]
CREATE PROC sp_MetaUrlDetay
(
@siteAdres nvarchar(50)
)
AS
BEGIN
Select SiteURL.site,Meta.meta,MetaTip.metaTip,MetaUrl.deger From MetaUrl
INNER JOIN SiteURL ON MetaUrl.urlId = SiteURL.id
INNER JOIN MetaTip ON MetaUrl.metaTipId = MetaTip.id
INNER JOIN Meta ON MetaTip.meta = Meta.id
WHERE SiteURL.site=@siteAdres
END
[/code]
Exec sp_MetaUrlDetay 'www.serhattas.net'
Ve çalıştırdığımızda aşağıdaki gibi sadece www.serhattas.net'in meta taglarını getirmektedir.
Veritabanında ki işlemleri bitirdiğimize göre artık Web Servisimizi tasarlamamız gerekmektedir.Servisin yapısı , çalıştırıldığında hangi sitenin bilgileri isteniyorsa o sitenin adını almalı ve geriye tag'larını döndürüp servisten gelen değerleri meta tag olarak eklememiz gerekmektedir.Xml Web Servisimizin yapısı aşağıdaki gibidir.
[code:c#]
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using System.Collections.Generic;
using System.Data.SqlClient;
namespace DynamicMetaTagServices
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
public class SRTMetaTag : System.Web.Services.WebService
{
[WebMethod]
public List<MetaYonetim> MetaTagGetir(object url)
{
List<MetaYonetim> _metalar = new List<MetaYonetim>();
SqlConnection con = new SqlConnection("data source=localhost; initial catalog=MetaIslemler; integrated security=true");
SqlCommand cmd = new SqlCommand("sp_MetaUrlDetay", con);
cmd.Parameters.Add("@siteAdres", SqlDbType.NVarChar, 50).Value = url;
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
MetaYonetim meta = new MetaYonetim { Isim = dr[0], Meta = dr[1], MetaTip = dr[2], Deger = dr[3] };
_metalar.Add(meta);
}
dr.Close(); cmd.Parameters.Clear(); con.Close();
return _metalar;
}
}
public class MetaYonetim
{
public object Isim { get; set; }
public object Meta { get; set; }
public object MetaTip { get; set; }
public object Deger { get; set; }
}
}
[/code]
Servisten geriye MetaYonetim tipinden bir custom tip dönmektedir.Bunlar bizim meta bilgilerimizdir.Property'lerin bilgileri ise;
Isim : Sitemizin adı adı
Meta : Meta adımızı .Örnek : name
MetaTip : Metamızın türü.Örnek : copyright, country,keywords
Deger : Metamızın content'i yanı taşıyacağı değerdir
Artık bu servisten yararlanabilmek için Solution'a MetaTagWeb adında yeni bir web projesi ekledikten sonra Web Reference olarak da yazdığımız web servisini gösteriyoruz ve görünüm aşağıdaki gibi olacaktır bu işlemden sonra.
Web servisimizide eklediğimize göre artık Web sitemizi tasarlayabiliriz.Ve sayfamız yüklendiği anda da veritabanımıza gidip belirtmiş olduğumuz siteye ait olan meta tag'ları çekip sitemize ekleyeceğiz.Aşağıda sayfamızın içerisinde servisimizi çağırmadan önceki html kodlarını görüyoruz.Ve baktığımızda herhangi bir meta tag eklenmemiş durumda.
Web servisi eklemiş olduğumuz sayfamızın Page Load'ına servisimizden dönen meta tag'ları ekliyoruz artık aşağıdaki gibi.
[code:c#]
protected void Page_Load(object sender, EventArgs e)
{
SRTMetaService.SRTMetaTag srt = new SRTMetaService.SRTMetaTag();
SRTMetaService.MetaYonetim[] gelenMetaTaglar = srt.MetaTagGetir("www.serhattas.net");
foreach (SRTMetaService.MetaYonetim meta in gelenMetaTaglar)
{
HtmlMeta metaHtml = new HtmlMeta();
metaHtml.Attributes.Add(meta.Meta.ToString(), meta.MetaTip.ToString());
metaHtml.Attributes.Add("content", meta.Deger.ToString());
Page.Header.Controls.Add(metaHtml);
}
}
[/code]
Görüldüğü gibi servisimizden gelen değerleri HtmlMeta tipinden yaratmış olduğumuz nesnemizin içerisine ekliyor.Bu HtmlMeta tipinden değerimizi aslında bizim HTML tarafında ki meta tag'ımızı temsil etmektedi.Ve yarattığımız bu meta tag'ı Sayfamızın başlık kısmınada ekleyerek dinamik meta tag ekleme işlemini gerçekleştirmiş oluyoruz.
Ve böylecede elimizde bulunan birden fazla web sitesi için teker teker meta tag eklemek yerine ASP.NET projelerimizde bu işlemleri dinamik olarak gerçekleştirebiliriz.
Örnekte kullanılan projeyi ve veritabanını indirmek için tıklayınız.
Faydalı olması dileğiyle... İyi çalışmalar =)
Serhat TAŞ