Rails新闻过滤网址seo

时间:2011-08-12 15:40:46

标签: ruby-on-rails seo params

我想设置

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 个答案:

答案 0 :(得分:2)

您的路线存在两个技术问题,我也会提到一个大问题。

首先,您要添加一个可选细分(-: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 1}}。要仅指定:price,您的网址必须与/news-0-0-6类似。

你这样做的原因也存在根本缺陷。这是 SEO。对于SEO而言,包含以连字符分隔的数字段的URL 更糟比包含传统查询字符串的URL。至少传统的查询字符串包含一些可索引的术语,例如streetprice