.NetCore'da URL Yapısını SEO Uyumlu Hale Getirelim
.NetCore web projelerinin bitiminde bir siteyi arama motorlarına uygun hale getirmek çok önemlidir. URL yapısı, arama motorlarının web sitenizi anlamlandırması ve indexlemesi için olmazsa olmazıdır. Bu yazımda .NetCore'da URL yapısını SEO uyumlu yapıya kavuşturacağız.
Ana Sayfanızın bulunduğu Controller kısmında ana sayfa hangi alanda açılıyorsa bu kodu:
[System.Web.Mvc.Route("")]
[System.Web.Mvc.Route("anasayfa")]
Alt yazılar veya ürünler gibi kategoriye bağlı yazı sayfaları için bu kodu:
[System.Web.Mvc.Route("Post/{baslik}-{id:int}")]
Kategori sayfası varsa bu kodu:
[System.Web.Mvc.Route("Kategori/{baslik}-{id:int}")]
Sabit sayfalar için ise bu kodu ilgili Controller'ın üst kısmına ekleyerek istediğiniz url parametresini ekleyebilirsiniz.
[System.Web.Mvc.Route("hakkimizda")]
Daha sonra AppStart içindeki RouteConfig classın içine bu kodu ekleyin:
routes.MapMvcAttributeRoutes();
Blog projenizin içine Filters klasörü oluşturup SeoTitleFilters adlı class oluşturun ve aşağıdaki kodu ekleyin.
namespace Blog.Filters
{ public class SeoTitleFilter : ActionFilterAttribute
{
private BlogManager bm = new BlogManager(new EfBlogDal());
private CategoryManager cm = new CategoryManager(new EfCategoryDal());
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var routeValues = filterContext.RouteData.Values;
var controllerName = routeValues["controller"].ToString();
var actionName = routeValues["action"].ToString();
var id = routeValues.ContainsKey("id") ? Convert.ToInt32(routeValues["id"]) : 0;
var viewBag = filterContext.Controller.ViewBag;
if (controllerName == "Home" && actionName == "Index")
{
viewBag.Title = "hasan can bozkurt";
viewBag.MetaDescription = "Bu, ana sayfanın meta açıklamasıdır.";
}
else if (controllerName == "Category" && actionName == "BlogByCategory" && id > 0)
{
var category = cm.GetByID(id);
if (category != null)
{
viewBag.Title = category.CategoryName;
viewBag.MetaDescription = category.CategoryDescription ?? "Kategori hakkında bilgiler.";
}
else
{
viewBag.Title = "Kategori Bulunamadı";
viewBag.MetaDescription = "Aradığınız kategori bulunamadı.";
}
}
else if (controllerName == "Blog" && actionName == "BlogDetails" && id > 0)
{
var blogList = bm.GetBlogByID(id);
var blog = blogList != null && blogList.Count > 0 ? blogList[0] : null;
if (blog != null)
{
viewBag.Title = blog.BlogTitle;
// HTML etiketlerini kaldırmak için StripTags metodunu kullanıyoruz
var content = StripTags(blog.BlogContent ?? string.Empty);
// Meta açıklamasını 160 karakterle sınırlıyoruz
if (content.Length > 160)
{
viewBag.MetaDescription = content.Substring(0, 160) + "...";
}
else
{
viewBag.MetaDescription = content;
}
}
else
{
viewBag.Title = "Yazı Bulunamadı";
viewBag.MetaDescription = "Aradığınız yazı bulunamadı.";
}
}
else
{
viewBag.Title = "Varsayılan Başlık";
viewBag.MetaDescription = "Varsayılan meta açıklaması burada yer alır.";
}
base.OnActionExecuting(filterContext);
}
// HTML etiketlerini kaldırmak için yardımcı metot
private static string StripTags(string input)
{
if (string.IsNullOrEmpty(input))
return string.Empty;
return Regex.Replace(input, "<.*?>", String.Empty);
}
}
}
Sorun yaşarsanız yorum kısmından paylaşabilirsiniz. Yardımcı olurum.
Yorumlar