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. ;-)