Easy XML-Sitemap with Rails

16th December 2011 – 270 words

Rails is too custom, to provide a generic sitemap as a gem for any situation. But it ist not too hard anyway! Here is a frame how to make one:

rails g controller sitemap

add the index action to sitemap-controller:

class SitemapController < ApplicationController
  def index
    respond_to do |f|
      f.xml
    end
  end
end

add the route (bonus points for restricting the format to xml)

# config/routes
  ....
  get "sitemap", :controller => :sitemap, :action => :index

Generate the sitemap with builder:

# app/views/sitemap/index.xml.builder
xml.instruct!
xml.urlset(:xmlns => "http://www.sitemaps.org/schemas/sitemap/0.9",
           "xmlns:xsi"=> "http://www.w3.org/2001/XMLSchema-instance",
            "xsi:schemaLocation"=>"http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd") do
  # whatever logic your app has, e.g. static pages:
  @pages.each do |page|
    xml.url do
      xml.loc page_url(page)
      xml.lastmod page.updated_at.to_date.to_s(:db)
      xml.changefreq "monthly"
      xml.priority 0.3
    end
  end
end

Do not forget to add the sitemap to your robots.txt

Sitemap: http://www.mydomain.de/sitemap.xml

Reposted from notes.it-jobs-und-stellen.de