2011-08-12 10 views
1
私は

RailsのニュースフィルターのURL SEO

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

abc.com/news-2-3-6 

のparams通り、エリア、価格

にあるすべてのオプション

マイルートが好きな設定にしたい

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

うまく動作しません。

+1

「うまくいかない」どうしたの? – Vache

+0

<%= link_to street.name、params.merge(:street => street)%> 「ニュース?通り= 1」のようなURLを取得します – doabit

答えて

2

あなたのルートには2つの技術的な問題があり、私も言及する大きな問題が1つあります。

まず、1つのオプションのセグメント(-: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となしで指定することは不可能で、:priceを除いて:areaを指定することはできません。 :priceのみを指定する場合、URLは/news-0-0-6のようになります。

これを行う理由にも根本的に欠陥があります。これはではなく、 SEOです。ハイフンで区切られた数値セグメントを含むURLは、伝統的なクエリ文字列を含むURLよりもであり、SEOではが悪化します。少なくとも従来のクエリ文字列はpriceのようなインデックス可能な用語を含むのインデックス可能な用語を含みます。

+0

あなたの返信ありがとう、私はこのようなURLを知っていますよくないですが、多くの人がparamsのURLはいいアイデアではないと言います。別の方法がありますか? – doabit

+0

@doabitこれらの人々は間違っています。検索URLの場合、クエリ文字列が最適なオプションです。 – meagar

+0

こんにちは、これは商品フィルターページです。ご協力いただきありがとうございます! – doabit