powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / SEO Friendly URL в ASP.NET MVC 4
25 сообщений из 32, страница 1 из 2
SEO Friendly URL в ASP.NET MVC 4
    #38597991
Фотография Sputnick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребят всем привет!

Есть новостной сайт (asp mvc4 http://times.mk.ua/ ), дико долго индексируются новости, после анализа СЕО конторой предложен ряд средств, в том числе ЧПУ (SEO Friendly URL).

в инете везде один и тот же пример, по нем и пытаюсь сделать:

добавляю маршрут:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "NewsDetail",
                "news/{id}/{name}",
                new { controller = "Home", action = "NewsDetailed", name = UrlParameter.Optional },
                new { id = @"^\d+$" }
            );



            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );



и него видно, что URL в итоге должен быть такой: http://times.mk.ua/news/125/super-puper-novost

добавляю хелпер:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
 public static class StringHelpers
    {
        public static string ToSeoUrl(this string url)
        {
            // make the url lowercase
            string encodedUrl = (url ?? "").ToLower();

            // replace & with and
            encodedUrl = Regex.Replace(encodedUrl, @"\&+", "and");

            // remove characters
            encodedUrl = encodedUrl.Replace("'", "");

            // remove invalid characters
            encodedUrl = Regex.Replace(encodedUrl, @"[^a-z0-9]", "-");

            // remove duplicates
            encodedUrl = Regex.Replace(encodedUrl, @"-+", "-");

            // trim leading & trailing characters
            encodedUrl = encodedUrl.Trim('-');

            return encodedUrl;
        }
    }



мой контроллер, который выдает одну детальную новость:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
  //одна полная новость
        public ActionResult NewsDetailed(int id, string NewsName)  // string NewsName - добавил
        {   
            BusinessLayer.Record.Record news = recordsManager.GetRecordById(id, true);

            //все что ниже добавил
            // make sure the productName for the route matches the encoded product name
            string expectedName = news.Title.ToSeoUrl();
            string actualName = (NewsName ?? "").ToLower();

            // permanently redirect to the correct URL
            if (expectedName != actualName)
            {
                return RedirectToActionPermanent("NewsTest", "Home", new { id , NewsName = expectedName });
            }


            return View("NewsDetailed",news);
        }

//добавил контролер:
        //одна полная новость тест
        public ActionResult NewsTest(int id, string NewsName)
        {
            BusinessLayer.Record.Record news = recordsManager.GetRecordById(id, true);
            return View(news);
        }



представление:
Код: c#
1.
2.
3.
4.
@model IEnumerable<BusinessLayer.Record.Record>
@using Times_Web.Helpers
......
 @Html.ActionLink("NewsDetailed", "Home", new { id = item.id , NewsName = item.Title.ToSeoUrl() })




при выполнении получаю ошибку 404 и сформированный урл:

http://localhost:1482/Home/Home/2638?NewsName=mitsubishi

вижу с роутингом накосячил, new { controller = "Home", action = "NewsDetailed", name = UrlParameter.Optional }, что не так? вродь все верно
...
Рейтинг: 0 / 0
SEO Friendly URL в ASP.NET MVC 4
    #38598018
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sputnick,

Код: c#
1.
2.
3.
4.
5.
routes.MapRoute(
                "NewsDetail",
                "news/{id}/{NewsName}",
                defaults: new { controller = "Home", action = "NewsDetailed", id = @"^\d+$", NewsName = UrlParameter.Optional }
            );



А может так?
...
Рейтинг: 0 / 0
SEO Friendly URL в ASP.NET MVC 4
    #38598041
Фотография Sputnick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонSputnick,


А может так?

то же самое, формирует url: http://localhost:1482/Home/Home/2638?NewsName=mitsubishi и 404 ошибка
...
Рейтинг: 0 / 0
SEO Friendly URL в ASP.NET MVC 4
    #38598146
Фотография Sputnick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
получилось, я немного накосячил с ссылкой в вьюхе.

в итоге роут:

Код: c#
1.
2.
3.
4.
5.
6.
routes.MapRoute(
                "NewsDetail",
                "news/{id}/{NewsName}",
                new { controller = "Home", action = "NewsDetailed", NewsName = UrlParameter.Optional },
                new { id = @"^\d+$" }
            );



вьюха:
Код: c#
1.
  @Html.ActionLink(item.Title, "NewsDetailed", new { id = item.id , NewsName = item.Title.ToSeoUrl() })



только не понятно зачем эта проверка в экшине:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
  // make sure the productName for the route matches the encoded product name
            //string expectedName = news.Title.ToSeoUrl();
            //string actualName = (NewsName ?? "").ToLower();

            //// permanently redirect to the correct URL
            //if (expectedName != actualName)
            //{
            //    return RedirectToActionPermanent("Newss", "Home", new { id , NewsName = expectedName });
            //}



я ее вообще убрал.


Последний момент:
я так понимаю мне в хелпере нужно написать метод, который будет кириллицу в латиницу переводить? аля аналог CyrToLat для ворпресса?
...
Рейтинг: 0 / 0
SEO Friendly URL в ASP.NET MVC 4
    #38598172
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sputnickтолько не понятно зачем эта проверка в экшине:

Затем, чтобы проверить, действительно ли NewName правильный. В противном случае не имеет значения, что там будет написано, роут отработает при любом раскладе. )
...
Рейтинг: 0 / 0
SEO Friendly URL в ASP.NET MVC 4
    #38598287
Фотография Sputnick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребят вот что вышло по поводу CyrToLat:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
 public static string ToSeoUrl(this string url)
        {
            // make the url lowercase
            string encodedUrl = (url ?? "").ToLower();

            // replace & with and
            encodedUrl = Regex.Replace(encodedUrl, @"\&+", "and");

            // remove characters
            encodedUrl = encodedUrl.Replace("'", "");

            // remove invalid characters
            encodedUrl = Regex.Replace(encodedUrl, @"[^а-я0-9]", "-");

            // remove duplicates
            encodedUrl = Regex.Replace(encodedUrl, @"-+", "-");

            // trim leading & trailing characters
            encodedUrl = encodedUrl.Trim('-');

            encodedUrl = Regex.Replace(encodedUrl, @"[^\w\-]", "");
                        
            // CYR TO LAT
            encodedUrl = CyrToLat(encodedUrl);          

            return encodedUrl; 
        }


        public static string  CyrToLat  (string inp)
        {
            string ReadyLat = inp;

            // CYR TO LAT
            ReadyLat = Regex.Replace(ReadyLat, "а", "a");
            ReadyLat = Regex.Replace(ReadyLat, "б", "b");
            ReadyLat = Regex.Replace(ReadyLat, "в", "v");
            ReadyLat = Regex.Replace(ReadyLat, "г", "g");
            ReadyLat = Regex.Replace(ReadyLat, "я", "ya");
..... ну и так далее другие буквы


            return ReadyLat; 
        }



возникает вопрос не слишком ли это расточительно все ссылки возвращать так, может при создании статьи переводить заголовок в кириллицу и в отдельном поле таблицы хранить, а затем подавать сразу готовый, без применения хелпера... таким образом хелпер отработает только раз при создании записи, а не постоянно умноженный на количество людей кликающих ссылки
...
Рейтинг: 0 / 0
SEO Friendly URL в ASP.NET MVC 4
    #38598971
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sputnickвозникает вопрос не слишком ли это расточительно все ссылки возвращать так, может при создании статьи переводить заголовок в кириллицу и в отдельном поле таблицы хранить, а затем подавать сразу готовый, без применения хелпера... таким образом хелпер отработает только раз при создании записи, а не постоянно умноженный на количество людей кликающих ссылки

это очень-очень плохое решение. не знаю, зачем надо было его приводить.

для SEO-friendly ссылок в таблице с ресурсом надо завести отдельное поле, типа (n)varchar(80) Alias (к примеру), и заносить туда каноническое наименование ресурса для ссылки, содержащее только буквы латинского алфавита, цифры, подчёркивание и тире. также на уровне базы данных такое имя должно быть уникальным для всех ресурсов относительно его корня.

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

далее все просто:

@Html.ActionLink(item.Title, "NewsDetailed", new { id = item.id , item.Alias })

и никогда не делайте так: item.Title.ToSeoUrl()

огребёте проблем по полной.
...
Рейтинг: 0 / 0
SEO Friendly URL в ASP.NET MVC 4
    #38598975
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sputnick,

и, кстати, для SEO-ссылок, ID вообще не нужен. решение типа /{id}/{seo-link} -- кривое и бестолковое. если у вас {seo-link} уникален, то {id} не нужен. просто это решение быстро распространилось из-за несольких записей в блогах сопливых западных программеров.
...
Рейтинг: 0 / 0
SEO Friendly URL в ASP.NET MVC 4
    #38599030
Фотография Sputnick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

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


и, кстати, для SEO-ссылок, ID вообще не нужен. решение типа /{id}/{seo-link} -- кривое и бестолковое. если у вас {seo-link} уникален, то {id} не нужен. просто это решение быстро распространилось из-за несольких записей в блогах сопливых западных программеров.
----
я тож над этим думал

, ID вообще не нужен. решение типа /{id}/{seo-link} -- кривое и бестолковое. если у вас {seo-link} уникален, то {id} не нужен
----
я так понимаю id нужен для запросов, а альяс для визуализации (ЧПУ). Наверно так и сделаю, без ИД.


спасибо большое за помощь
...
Рейтинг: 0 / 0
SEO Friendly URL в ASP.NET MVC 4
    #38599059
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
оно не глупое и бестолковое - оно простое)
а вообще ох уж эти сео-ники.
...
Рейтинг: 0 / 0
SEO Friendly URL в ASP.NET MVC 4
    #38599377
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuhVostt,
оно не глупое и бестолковое - оно простое)
а вообще ох уж эти сео-ники.

нафиг этот ID не нужен, если линк уникален. а если ID будет в форме GUID? представляете себе как будев выглядеть линк?
...
Рейтинг: 0 / 0
SEO Friendly URL в ASP.NET MVC 4
    #38599384
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с точки зрения SEO, да и вообще по логике-здравому-смыслу, URL представляет собой путь к ресурсу. это значит, что по идее можно стереть последнюю секцию пути и попасть на предыдущий уровень. это правильно, это удобно для пользователя и да поисковики это любят.

но обленившиеся в край бестолковые студенты-программеры впендячивают в путь {id}, и лепят {seo-link} на конце чтобы ублажить сеошников. последние воротят нос, но соглашаются, ибо спорить бесполезно. поэтому, либо делать нормальные URL-ы, либо не делать их вообще и работать исключительно в формате {controller}/{action}/{id}.
...
Рейтинг: 0 / 0
SEO Friendly URL в ASP.NET MVC 4
    #38599437
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttнафиг этот ID не нужен, если линк уникален. а если ID будет в форме GUID? представляете себе как будев выглядеть линк?
а я что то говорил про то что вы написали?))) я сказал что решение просто, не совсем глупое. Сами сео-ники не знают чего хотят толком, спроси парочку про 1 и тот же сайт и каждый свое скажет, а про то что их зп стали на уровне разработчиков то я вообще молчу.

п.с. если я не ошибаюсь - я вам скидывал ссылку про greedy route когда то давно, на случай если вы подумали что я типо не в теме)
...
Рейтинг: 0 / 0
SEO Friendly URL в ASP.NET MVC 4
    #38599440
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
SEO Friendly URL в ASP.NET MVC 4
    #38599495
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuТС может пригодится
http://erraticdev.blogspot.ru/2011/01/custom-aspnet-mvc-route-class-with.html

Мне обычно статичные части после * не нужны, пихаю routes.MapRoute("catalog", "catalog/{*categories}", new { controller = "Catalog", action = "Index" }), а дальше в бд хранится часть url-а и соответствие ему - id, при старте строится sitemap в кэш и разруливается какой id какому url соответствует и выбираются товары. В итоге убирая из http://domain.com/catalog/clothes/woman/dresses/?id=123 (конкретный товар) каждый элемент вплоть до каталога, поднимаемся на уровень выше и получаем список товаров текущего уровня. Задница наблюдается при старте - построение дерева (хлебных крошек, сайтмапа, заголовков раздела и прочее), учитывая что сайт на нескольких языках (данные дублируются) и разделов несколько десятков тысяч - жувалово происходит конкретное.
...
Рейтинг: 0 / 0
SEO Friendly URL в ASP.NET MVC 4
    #38599598
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuСами сео-ники не знают чего хотят толком

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


handmadeFromRuна случай если вы подумали что я типо не в теме

да не, это просто мысли вслух
...
Рейтинг: 0 / 0
SEO Friendly URL в ASP.NET MVC 4
    #38599600
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st_stи разделов несколько десятков тысяч - жувалово происходит конкретное

делал как-то инкрементальное построение этого кеша в процессе работы. особых неудобств не доставляет, правда один единственный запрос sitemap.xml превращается в жувалово, если к этому времени кеш полупустой.
...
Рейтинг: 0 / 0
SEO Friendly URL в ASP.NET MVC 4
    #38599778
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttс точки зрения SEO, да и вообще по логике-здравому-смыслу, URL представляет собой путь к ресурсу. это значит, что по идее можно стереть последнюю секцию пути и попасть на предыдущий уровень. это правильно, это удобно для пользователя и да поисковики это любят.


Пользователь ничего не должен стирать, и вообще трогать в адрессной строке, а обходится по возможности мышкой (или пальцем) для навигации по ресурсу.
При наличии большого дерева каталогов, с длинными названиями, с точки зрения сео это тоже мрак.
А в целом да, id там не нужен.
...
Рейтинг: 0 / 0
SEO Friendly URL в ASP.NET MVC 4
    #38599900
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонПользователь ничего не должен стирать, и вообще трогать в адрессной строке, а обходится по возможности мышкой (или пальцем) для навигации по ресурсу.

Если мы говорим про WEB, то абстрагироваться от адресной строки попросту невозможно. Зайдите на биржу доменов и убедитесь в этом сами, во сколько вам обойдётся "красивое" имя. Хотя вроде как для пользователя совершенно пофигу какой там домен у "Одноклассников".

Взять, например, данную ветку данного форума:

http://www.sql.ru/forum/1085290/seo-friendly-url-v-asp-net-mvc-4
http://www.sql.ru/forum/1085290

Вот, нафига? Наивное, глупое, бестолковое решение. А я ведь тоже пользователь, если я перешёл в тему форума прям из поиска и первый раз здесь, то почему-то вынужден разбираться в интерфейсе форума, чтобы найти способ перейти "выше", вместо того, чтобы просто стереть последнюю часть адреса и по логике оказаться выше по дереву. Но нет. Я стираю последнюю часть адреса и оказываюсь... (сюрприз!) там же. Стираю ещё сегмент и оказываюсь вообще в корне форума, хотя ожидал оказаться в той ветке, где размещается тема. Можете меня пинать, но тот, кто это придумал -- идиот .

ПарамонПри наличии большого дерева каталогов, с длинными названиями, с точки зрения сео это тоже мрак.

Это уже вопрос организации. Совсем не обязательно длинные названия делать с помощью CyrToLat. Можно воспользоваться преимуществами английского диалекта, или включить мозг и подобрать красивые удобные сокращения. Возможностей удобной организации -- миллион и маленькая тележка. Но часто выбирают почему-то самый мерзопакостный способ с помощью {id} и приделыванием {seo-link}: кого обманывают при этом, совершенно непонятно.
...
Рейтинг: 0 / 0
SEO Friendly URL в ASP.NET MVC 4
    #38600090
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttА я ведь тоже пользователь
Ты коварный пользователь )

hVosttСтираю ещё сегмент и оказываюсь вообще в корне форума, хотя ожидал оказаться в той ветке, где размещается тема.

Это метод тыка, есть крошки для этого.

А завтра вот решили, что товар относится к нескольким категориям.
shop.com/category/subcategory/product-name - на помойку.
shop.com/products/product-name - без изминений.
...
Рейтинг: 0 / 0
SEO Friendly URL в ASP.NET MVC 4
    #38600168
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонА завтра вот решили, что товар относится к нескольким категориям.
shop.com/category/subcategory/product-name - на помойку.
shop.com/products/product-name - без изминений.

ты говоришь про фасетную навигацию и про интернет-магазин. товар всё равно где-то должен перманентно находиться, в какой-то одной категории, и дополнительно может быть разложен по фасетам. какие проблемы?
...
Рейтинг: 0 / 0
SEO Friendly URL в ASP.NET MVC 4
    #38600180
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttтовар всё равно где-то должен перманентно находиться, в какой-то одной категории, и дополнительно может быть разложен по фасетам. какие проблемы?
Не вижу ничего хорошего в зависимости товара к определенной структуре, которая в любой момент может изменится.
Более общие пути - меньше проблем в дальнейшем. /товары/имя, альбомы/песня

Например, данную ветку данного форума - перенесли в другой форум, а уже проиндексировано, вот и проблемы )
...
Рейтинг: 0 / 0
SEO Friendly URL в ASP.NET MVC 4
    #38600201
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонНапример, данную ветку данного форума - перенесли в другой форум, а уже проиндексировано, вот и проблемы

Помню в этом разделе (asp.net) написал в теме сообщение, через час захожу, а темы такой в asp.net больше нет. Через пару недель случайно узнал, что она была перемещена в ПТ, аццкое юзабилити. С точки зрения дерева каталогов и SEO, перенос объекта в другой раздел (что происходит крайне редко) равнозначен 301-му редиректу, который можно настроить со старого места и эта проблема не поисковиков (они быстро переиндексируют), а сохранения ссылок на объект на других форумах/сайтах, которые без 301-го попадут на 404.
...
Рейтинг: 0 / 0
SEO Friendly URL в ASP.NET MVC 4
    #38600210
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонНе вижу ничего хорошего в зависимости товара к определенной структуре, которая в любой момент может изменится.
Более общие пути - меньше проблем в дальнейшем. /товары/имя, альбомы/песня

Например, данную ветку данного форума - перенесли в другой форум, а уже проиндексировано, вот и проблемы )

в контексте WEB у ресурса должен быть один единственный URL. при переносе товара между категориями, по старой ссылке должен отдаваться редирект 301 по новому пути -- это совершенно нормальная ситация. тоже самое при смене структуры. какие проблемы ещё раз? никаких проблем не вижу.

я так понимаю, у нас проблемы с понимаем, как устроен WEB, что такое URL? может стоит почитать хоть немного стандарты?
...
Рейтинг: 0 / 0
SEO Friendly URL в ASP.NET MVC 4
    #38600233
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st_stПомню в этом разделе (asp.net) написал в теме сообщение, через час захожу, а темы такой в asp.net больше нет. Через пару недель случайно узнал, что она была перемещена в ПТ, аццкое юзабилити. С точки зрения дерева каталогов и SEO, перенос объекта в другой раздел (что происходит крайне редко) равнозначен 301-му редиректу, который можно настроить со старого места и эта проблема не поисковиков (они быстро переиндексируют), а сохранения ссылок на объект на других форумах/сайтах, которые без 301-го попадут на 404.
А также, по опыту, при большом количестве 301-х, 404-х рейтинг довольно ощутимо падает.
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / SEO Friendly URL в ASP.NET MVC 4
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]