検索エンジンに親和性が高いURLとして"/"(スラッシュ)ではなく"-"(ハイフン)で区切るURLがあるそうです。
例えば、
- 「http://example.com/sample/target/12.html」
ではなく
- 「http://example.com/sample-taget-12.html」
の方が検索エンジンに好まれるのだそうです。
そこで、今回は普通のRailsアプリを"/"(スラッシュ)ではなく"-"(ハイフン)で区切る形式のURLに対応させる方法をご紹介します。
ちなみに、Rails-2.2.2で試しました。
今までは?
Railsのデフォルトのroute.rb内で定義されているルーティングでは、controllerやaction、パラメータの区切りが"/"(スラッシュ)だったので、
- Apacheのmod_rewriteで"-"(ハイフン)を"/"(スラッシュ)に置換
- Railsでは普通のroute.rbでルーティング
- link_toによるリンク作成時にhelperでurl_forを上書きして、URLの"/"(スラッシュ)を"-"(ハイフン)に置換
とか、すごい大変なことをしていました。なぜなら、RailsのRoutingがカオスと言われていたためさわるのが恐かったのです。
Railsのルーティングで同じことを実現
Railsではコントローラとアクションなどの区切り文字を指定できます。
ActionController::Routing::SEPARATORS
% ruby script/console >> ActionController::Routing::SEPARATORS => ["/", ".", "?"]
この区切り文字がroute.rbのURLルールを書く部分で利用できるので、下記の1行を各環境のconfigファイル(
私の場合は、開発でも本番でも利用したかったので、
config/initializers/add_routing_separator.rb
ActionController::Routing::SEPARATORS << "-"
config/route.rb
最後に、ルーティングを定義するおなじみroute.rbで追加した区切り文字を使って下記のように変更します。
diff --git a/config/routes.rb b/config/routes.rb index 8ca53fc..695ea5d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -43,9 +43,15 @@ ActionController::Routing::Routes.draw do |map| # Note: These default routes make all actions in every controller accessible via GET requests. You should # consider removing the them or commenting them out if you're using named rou tes and resources. - map.connect ':controller/:action/:id' - map.connect ':controller/:action/:id.:format' + map.connect ':controller-:action-:id' + map.connect ':controller-:action-:id.:format' end
"/"(スラッシュ)を"-"(ハイフン)に置き換えているだけですね。 これで、link_toやurl_for等でもなにも気にせずいつものとおりに書いているだけで、URLがスラッシュ区切りからハイフン区切りになります。 もちろん、デフォルトのルーティングだけでなく、独自の名前付きルーティングやその他のものでも"-"(ハイフン)を区切り文字として利用できるようになります。
よかったら試してみてくださいね。
SEO効果があるかどうかはうわさなのであしからずー

コメントする