Ruby on Rails Sitemap Generator

How to build a sitemap for your rails app.

This wiki entry was the basis for my sitemap recipe in Advanced Rails Recipies

Related blog posts

The following example will build a sitemap for a single model but it can easily be extended.

 

  • Build a controller for your sitemap
    • script/generate controller sitemap
  • query model for information that you want in the sitemap
class SitemapController < ApplicationController
  def sitemap
    @entries = YourModel.find(:all, :order => "updated_at DESC", :limit => 50000)
    headers["Content-Type"] = "text/xml"
    # set last modified header to the date of the latest entry.
    headers["Last-Modified"] = @entries[0].updated_at.httpdate    
  end
end
  • Create your sitemap.rxml file
xml.instruct!
xml.urlset "xmlns" => "http://www.sitemaps.org/schemas/sitemap/0.9" do
  @entries.each do |entry|
    xml.url do
      xml.loc url_for(:controller => 'controller you use to show the model', 
                      :action => 'show', 
                      :id => entry.id,
                      :only_path => false)
      xml.lastmod entry.updated_at.to_date
    end
  end
end
only_path => false is necessary as sitemaps are required to have protocol and domain.

 

  • Update your routes file to allow your sitemap to live in the root directory
    • ex: map.connect ‘sitemap.xml’, :controller => “sitemap”, :action => “sitemap”

using a sitemap index

If you have over 50000 URLs you need to use a sitemap index file. I’ll put an example here eventually.  ;-)