2016-09-20 5 views
0

У меня есть календарь, расположенный по адресу http://domain.com/calendar/. Это показывает события текущего месяца. Другие месяцы можно посмотреть на(Как) следует перенаправить пользователей с моей страницы календаря по умолчанию?

  • http://domain.com/calendar/january/
  • http://domain.com/calendar/february/
  • и так далее

Это означает, что в данный момент (т.е. сентябрь) URL-адрес http://domain.com/calendar/september/ показывает дублированный контент на http://domain.com/calendar/. Моя первоначальная мысль заключалась в перенаправлении пользователей с http://domain.com/calendar/ на http://domain.com/calendar/{current-month}/. Однако это приведет к тому, что поисковые системы всегда будут отправлять пользователям URL-адреса в течение месяца, в котором они были индексированы, а не основного URL-адреса календаря.

Невозможно отключить основной URL-адрес календаря, поскольку это связано с литературой.

Каков наилучший способ справиться с этим сценарием? Должен ли я перенаправлять с основного URL на конкретный месяц? Если да, то должно ли это быть временным перенаправлением (т. Е. 302)? Я подозреваю, что это не так, как для этого типа перенаправления. Или это просто то, о чем я не должен беспокоиться?

Меня не интересует добавление года в URL на данном этапе.

ответ

0

Я бы установил свои маршруты, чтобы параметр месяца был необязательным. Если пользователь переходит к http://domain.com/calendar/, мой контроллер будет использовать текущий месяц по умолчанию. Если пользователь переходит к http://domain.com/calendar/{month}/, он будет использовать месяц, указанный в URL-адресе, и отображать этот месяц вместо этого.

В конечном итоге у меня будет одна конечная точка для отображения календаря, который принимает необязательный параметр маршрута для отображения определенного месяца.

Вот как я хотел бы создать маршрут с использованием C# и Mvc:

public class CalendarController : Controller 
{ 
    public ActionResult Index(string month) 
    { 
     if(month == "") 
     { 
      month = DateTime.Today.ToString("MMMM"); 
     } 

     ViewBag.Month = month; 
     // ViewBag.Data = getData(month); // method to get events for month 

     return View(); 
    } 
} 

И мой маршрут будет выглядеть так:

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     // /calendar/october 
     routes.MapRoute(
      "Calendar", 
      "calendar/{month}", 
      new {controller = "Calendar", action = "Index", month = ""}); 
    } 
} 
0

Что делать, если вы добавляете переадресацию в JavaScript (<body onload="setTimeout(document.location.href=get_next_month_url_function_you_make(),10)">) после того, как тайм-аут в 10 мс, поэтому поисковая система будет поддерживать связь с/calendar/(который вы должны дать соответствующий метатег времени), и пользователи будут перенаправлены на страницу подробностей месяца?

1

Я бы оставил ваш текущий маршрут календаря как есть в/calendar и НЕ перенаправляется на страницу/calendar/year/{currentmonth}.

За предыдущие месяцы вы должны создать архив вместе с год/календарь/год/месяц

Если у вас есть некоторый тип индикации того, что/календарь маршрут является уникальным, статический маршрут, который всегда будет содержать вверх (в виде заголовка страницы, контента и т. д.), он всегда может быть индексирован как таковой в поисковых системах.

Я бы не перенаправлял с архивных страниц на текущий календарь. Вы можете различать архив, делая что-то вроде добавления архива: на заголовки страниц и позволяете индексировать его, так как он станет его собственным уникальным контентом в следующем месяце.

Смежные вопросы