Rails новостной фильтр url seo - PullRequest
       0

Rails новостной фильтр url seo

1 голос
/ 12 августа 2011

Я хочу установить

abc.com/news?street=2&area=3$price=6

на

abc.com/news-2-3-6

параметры улицы, площади и цены необязательны

Мои маршруты нравятся

match "/news(-:street-:area-:price)"  => "news#index",:as => :news_index 

Это плохо работает.

1 Ответ

2 голосов
/ 12 августа 2011

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

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

match "/news(-:street(-:area(-:price)))" => "news#index"

Во-вторых, вы не указываете, какие символы могут содержать каждое из терминов.В вашем примере news-2-3-6 приведет к установке :street на «2-3-6» и оставлению :area и :price пустыми.Вы должны указать маршруту, какие символы следует принимать для каждого сегмента переменной.Следующее позволяет каждому содержать 1 или более цифр:

match "/news(-:street(-:area(-:price)))" => "news#index",
  :street => /\d+/, :area => /\d+/, :price => /\d+/

Но ни одно из этих исправлений не поможет в долгосрочной перспективе.Этот вид «поискового» URL является действительно плохой идеей, потому что каждый сегмент зависит от существования предыдущего сегмента (ов).Я имею в виду, что невозможно поставить :price без :area и :street, и невозможно поставить :area без :price.Чтобы указать только :price, ваш URL должен выглядеть так: /news-0-0-6.

Ваша причина для этого также в корне ошибочна.Это , а не SEO.URL, содержащий разделенные дефисом числовые сегменты, для SEO хуже , чем URL, содержащий традиционную строку запроса.По крайней мере, традиционная строка запроса содержит некоторые индексируемые термины, такие как street и price.

...