Rails项目的Google站点地图文件

有没有简单的方法来创build一个Rails项目的站点地图文件? 特别是对于dynamic站点(例如Stack Overflow),应该有一种dynamic创build站点地图文件的方法。 Ruby和/或Rails有哪些方法?

你会build议什么? 那里有没有好的gem?

添加这条路线到你的config/routes.rb文件的底部(更具体的路线应该在上面列出):

 map.sitemap '/sitemap.xml', :controller => 'sitemap' 

创buildSitemapController (app / controllers / sitemap_controller):

 class SitemapController < ApplicationController layout nil def index headers['Content-Type'] = 'application/xml' last_post = Post.last if stale?(:etag => last_post, :last_modified => last_post.updated_at.utc) respond_to do |format| format.xml { @posts = Post.sitemap } # sitemap is a named scope end end end end 

– 你可以看到,这是一个博客,所以使用Post模型。 这是HAML视图模板(app / views / sitemap / index.xml.haml):

 - base_url = "http://#{request.host_with_port}" !!! XML %urlset{:xmlns => "http://www.sitemaps.org/schemas/sitemap/0.9"} - for post in @posts %url %loc #{base_url}#{post.permalink} %lastmod=post.last_modified %changefreq monthly %priority 0.5 

而已! 您可以在浏览器中使用http:// localhost:3000 / sitemap.xml (如果使用Mongrel)或者使用cURL来testing它。

请注意,控制器使用stale? 方法来发出一个HTTP 304未修改的响应,如果没有新的postsinces上次请求的站点地图。

现在对于rails3,最好使用全function的sitemap_generator gem。

我爱约翰·托普利的答案,因为它是如此简单和优雅,而不需要一个gem。 但是有点过时,所以我已经更新了Rails 4和Google网站pipe理员工具的最新网站地图指南的答案。

configuration/ routes.rb文件:

 get 'sitemap.xml', :to => 'sitemap#index', :defaults => { :format => 'xml' } 

应用程序/控制器/ sitemap_controller.rb:

 class SitemapController < ApplicationController layout nil def index headers['Content-Type'] = 'application/xml' last_post = Post.last if stale?(:etag => last_post, :last_modified => last_post.updated_at.utc) respond_to do |format| format.xml { @posts = Post.all } end end end end 

应用程序/视图/地图/ index.xml.haml:

 !!! XML %urlset{:xmlns => "http://www.sitemaps.org/schemas/sitemap/0.9"} - for post in @posts %url %loc #{post_url(post)}/ %lastmod=post.updated_at.strftime('%Y-%m-%d') %changefreq monthly %priority 0.5 

你可以通过启动localhost:3000 / sitemap.xml来testing它。

我会build议你看看sitemap_generatorgem 。 它为您处理所有这些问题…真的,谁想要编写XML?

以下是一个示例站点地图,显示如何使用Rails模型和path助手来生成站点地图URL:

 # config/sitemap.rb SitemapGenerator::Sitemap.default_host = "http://www.example.com" SitemapGenerator::Sitemap.create do add '/contact_us' Content.find_each do |content| add content_path(content), :lastmod => content.updated_at end end 

然后你可以使用Rake任务来随时刷新。 这真的是这么简单:)

这是一个用于在Ruby on Rails中创build站点地图的插件 : Ruby on Rails站点地图插件 。 它负责照顾大部分的网站地图逻辑和代。 该插件是从我的主页。

configuration示例:

 Sitemap::Map.draw do # default page size is 50.000 which is the specified maximum at http://sitemaps.org. per_page 10 url root_url, :last_mod => DateTime.now, :change_freq => 'daily', :priority => 1 new_page! Product.all.each do |product| url product_url(product), :last_mod => product.updated_at, :change_freq => 'monthly', :priority => 0.8 end new_page! autogenerate :products, :categories, :last_mod => :updated_at, :change_freq => 'monthly', :priority => 0.8 new_page! autogenerate :users, :last_mod => :updated_at, :change_freq => lambda { |user| user.very_active? ? 'weekly' : 'monthly' }, :priority => 0.5 end 

最好的问候,Lasse

本文介绍了如何生成站点地图。

基本上应该创build一个控制器,find所有页面(如您的post),并将其放入一个XML文件。 接下来,您会告诉Google XML文件的位置以及您的网站何时更新。

一个简单的谷歌rails网站地图查询显示大量的其他文章解释基本上相同的事情。

Interesting Posts