Dynamically generated sitemap in rails
      
      Site Map path can be defined in robots.txt in your root. For example:
Sitemap: https://calvin.my/my_sitemap.xml
User-agent: *
Disallow:To dynamically generate this file, you will need to add an entry in your routes.rb file.
get '/my_sitemap', to: 'main#sitemap'Create a controller action to render the file.
def sitemap
  @posts = Post.order(:created_at => :desc)
  result = render_to_string('main/sitemap.xml.builder')
  send_data(result, :disposition => 'inline', :type=>'text/xml',:filename => 'sitemap.xml')
endIf you do not want to generate for every request, you can cache (for example using Redis) and expires every 15 minutes.
Next, you need to define an XML builder template under your view folder. For example, sitemap.xml.builder
xml.instruct!
xml.urlset('xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9') do
  # The static paths
  xml.url do
    xml.loc 'https://calvin.my/'
    xml.changefreq 'daily'
  end
  # The dynamic paths
  @posts.each do |post|
    xml.url do
      xml.loc "https://calvin.my/posts/#{post.id}"
      xml.lastmod "#{post.updated_at.strftime('%F')}"
      xml.changefreq 'daily'
    end
  end
endAnd that is all. Whenever a get sitemap request is called, the latest sitemap is returned. For example, take a look at the sitemap of this site.
Learn more about the protocol here.
              Chrome On-device AI
              2025-10-20 07:09:51