3

MVC 4에 웹 사이트를 작성 중이며 일부 질문을 라우팅하기 위해 Stack Exchange 스타일을 복제하고 싶습니다. 예를 들면 :영구 리디렉션이 슬러그를 수정하거나 추가하는 것을 피할 수 있습니까?

stackoverflow.com/questions/15191392
stackoverflow.com/questions/15191392/not-the-real-title
stackoverflow.com/questions/15191392/can-i-avoid-this-redirect-to-fix-or-add-a-slug

같은 질문에 대한 모든 경로와 URL을 수정합니다. 라우팅을 위해 불필요한 경우에도 슬러그가 항상 나타나고 정확하도록하고 싶습니다.

이 내 현재의 구현 :

routes.MapRoute("Item", "{id}/{slug}/{action}", 
       new {controller = "Item", action = "Index", slug = UrlParameter.Optional}, 
       new { id = @"\d+", slug = @"(?-i)[-a-z]*", action = @"(?-i)(|[A-Z][a-zA-Z]*)" }); 
routes.MapRoute("Default", "{controller}/{action}/{id}", 
       new {controller = "Home", action = "Index", id = UrlParameter.Optional}); 

ItemController.cs에서 : 슬러그가 누락/잘못되면

public ActionResult Index(int id, string slug = null) 
{ 
    var item = GetItem(id); 
    var itemSlug = ToSlug(item.Title); 
    if (slug != itemSlug) 
    { 
     return RedirectToActionPermanent("Index", new {id, slug = itemSlug}); 
    } 
    return View(item); 
} 

내 우려가 리디렉션입니다. 이 구현은보기로 확인하는 데 필요한만큼 두 배의 작업 (ID로 항목을 쿼리하고 제목이 슬쩍)을 요구할 수 있습니다. 더 나쁜 것은 각 작업에 대해 리디렉션 코드를 복제해야한다는 것입니다.

코드 복제, 성능 및 SEO 영향과 관련하여 사용할 수있는 더 나은 구현이 있습니까?

+1

: 검색 결과 페이지에

여기에 태그 및 구현에 대한 자세한 내용을보실 수 있습니다 왜냐하면 제목이 바뀌면 URL이 그대로 유지되기 때문입니다. 또한 ToSlug가 변경 될 수 있습니다. – usr

+0

@usr, 분명히 충분히 신중하게 읽지는 않았습니다. 나는 ** ** 슬러그가 DB에 있다고 가정했다. –

+0

@usr 왜 슬러그를 똑같이 유지하고 싶습니까? 슬러그의 정보가 정보가 아닌가? 이전 URL은 계속 작동하지만 새 슬러그가있는 URL로 영구적으로 리디렉션됩니다. – dlras2

답변

-1

귀하의 페이지에 rel = "canonical"태그를 구현하면 ... 기본적으로 google은 평범한 도메인과 www 버전을 2 개의 다른 사이트로 취급하기 때문에 어쨌든 좋습니다.하지만 Google이 모든 정보를 이해하기 때문에 여기서는 도움이 될 것입니다. 당신이 실제로 볼 수있는 복제본은 하나의 정식 버전 (나는 예쁜 슬러그 형식을 사용합니다)과 복제본 중 하나에 만들어진 모든 링크가 모두 올바른 예쁜 URL에 적립되며 그들이 보여줄 것입니다. 당신은 데이터의 슬러그를 저장해야 http://support.google.com/webmasters/bin/answer.py?hl=en&answer=139394

관련 문제