Как создать SEO-дружественные URL в ASP.Net-MVC - PullRequest
6 голосов
/ 25 августа 2009

Я знакомлюсь с ASP.Net-MVC и пытаюсь решить некоторые общие задачи, которые я выполнял в прошлом, с помощью веб-форм и других функций. Одной из наиболее распространенных задач, которые мне нужно сделать, является создание дружественных к SEO URL-адресов, что в прошлом означало переписывание URL-адресов для встраивания строки запроса в путь каталога.

например: www.somesite.com/productid/1234/widget

, а не: www.somesite.com?productid=1234&name=widget

Какой метод я использую для достижения этой цели в ASP.Net-MVC?

Я искал вокруг, и все, что я нашел, это то, что либо я не правильно понимаю, либо не отвечаю на мой вопрос:

SEO URL с ASP.NET MVC

Ответы [ 5 ]

10 голосов
/ 25 августа 2009

MVC расшифровывается как «Model View Controller», и хотя эти понятия не являются тем, о чем вы спрашиваете, вы, как правило, можете подключить URL-адреса, как показано выше, довольно легко

Так, например, по умолчанию URL-адрес выглядит следующим образом

http://www.somesite.com/controller/view/

где контроллер относится к классу контроллера в вашем проекте, а представление относится к комбинации страницы / метода в контроллере. Так, например, вы можете написать представление для ввода и выглядеть примерно так:

http://www.somesite.com/widget/productid/1234/

Теперь, что касается SEO Friendly URL, это просто бесполезный сахар. Вы создаете свой контроллер таким образом, чтобы он добавлял безобидные слова в конец URL.

Так, например, вы заметите, что следующие три способа получить этот вопрос дают одинаковый результат:

Как создать SEO-ориентированные URL в ASP.Net-MVC

Как создать SEO-ориентированные URL в ASP.Net-MVC

Как создать SEO-ориентированные URL в ASP.Net-MVC

Переполнение стека создало их значения маршрута, так что бит, который появляется после идентификатора вопроса, на самом деле не нужен.

Так зачем это там? Чтобы увеличить Google PageRank. Google PageRank опирается на многие вещи, общая сумма которых является секретной, но одна из вещей, которые люди заметили, это то, что при прочих равных условиях текст описания URL выше. Вот почему Stack Overflow использует этот текст после номера вопроса.

6 голосов
/ 25 августа 2009

Создайте новый маршрут в Global.asax для обработки этого:

        routes.MapRoute(
            "productId",                  // Route name
            "productId/{id}/{name}",      // URL with parameters
            new { controller = "Home", action = "productId", id = 1234, name = widget }  // Parameter defaults
        );

В Asp.Net MVC встроена маршрутизация, поэтому нет необходимости в перезаписчике URL.

3 голосов
/ 07 июня 2011

Будьте осторожны при реализации маршрутов с именами в них, вам нужно проверить правильность введенного имени или вы можете в конечном итоге нанести вред вашему SEO-ранжированию на странице, если несколько URI совместно используют один и тот же контент, либо установите правильный канонический или ваш контроллер выдает 301 при посещении «неправильного» URI.

Краткое описание, которое я сделал для последнего решения, можно найти по адресу:
http://mynameiscoffey.com/2010/12/19/seo-friendly-urls-in-asp-net-mvc/

Некоторая информация о канониках:
http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html

2 голосов
/ 25 августа 2009

Я думаю, что вы после того, как MVC Routing взгляните на эти

1 голос
/ 08 апреля 2010

Также важно обращаться с устаревшими URL. У меня есть база данных старых и новых URL, и я перенаправляю с помощью следующего кода:

    public class AspxCatchHandler : IHttpHandler, IRequiresSessionState
{

    #region IHttpHandler Members

    public bool IsReusable
    {
        get { return true; }
    }

    public void ProcessRequest(HttpContext context)
    {
        if (context.Request.Url.AbsolutePath.Contains("aspx") && !context.Request.Url.AbsolutePath.ToLower().Contains("default.aspx"))
        {
            string strurl = context.Request.Url.PathAndQuery.ToString();
            string chrAction = "";
            string chrDest = "";

            try
            {

                DataTable dtRedirect = SqlFactory.Execute(
                    ConfigurationManager.ConnectionStrings["emptum"].ConnectionString,
                    "spGetRedirectAction",
                    new SqlParameter[] { 
                        new SqlParameter("@chrURL", strurl)
                    },
                    true);

                chrAction = dtRedirect.Rows[0]["chrAction"].ToString();
                chrDest = dtRedirect.Rows[0]["chrDest"].ToString();

                chrDest = context.Request.Url.Host.ToString() + "/" + chrDest;
                chrDest = "http://" + chrDest;


                if (string.IsNullOrEmpty(strurl))
                    context.Response.Redirect("~/");
            }
            catch
            {
                chrDest = "/";// context.Request.Url.Host.ToString();
            }

            context.Response.Clear();
            context.Response.Status = "301 Moved Permanently";
            context.Response.AddHeader("Location", chrDest);
            context.Response.End();

        }
        else
        {
            string originalPath = context.Request.Path;
            HttpContext.Current.RewritePath("/", false);
            IHttpHandler httpHandler = new MvcHttpHandler();
            httpHandler.ProcessRequest(HttpContext.Current);
            HttpContext.Current.RewritePath(originalPath, false);
        }
    }

    #endregion
}

надеюсь, что это полезно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...