How to generate & add sitemap to your Rails Application

The use of sitemap confers its own set of advantages to a website. While it can add significant value in terms of smooth website navigation and enhanced visibility for the search engines, it also empowers the website with the ability to immediately inform the search engines about any changes happening on the site. This leads to effectively faster indexing of your changes website pages as compared to the scenario when you don’t have a sitemap. Having a sitemap reduces your dependency solely on the external links for bringing the search engines to your website. While it may not be advisable to have errors such as broken links or orphaned pages on your site, a sitemap can help you in such cases too, when you’ve by mistake, failed to fix such errors.

So, just in case your site has a couple of broken internal links or orphaned pages on it, by mistake, that cannot be visited in any other way, a sitemap can help your visitors reach them as well. However, it is any day better to let these errors not make it to your website in the first place.

So, in this article, I plan to discuss all about how to generate and add a sitemap to your Rails Application. Generate Sitemap: Required Gem: Sitemap generator:- SitemapGenerator is the easiest way to generate Sitemaps in Ruby. Rails integration provides access to the Rails route helpers within our sitemap config file and automatically makes the rake tasks available to us. Or if we prefer to use another framework, we can! We can use the rake tasks provided or run our sitemap configs as plain ruby scripts. Sitemaps XML format: The Sitemap protocol format consists of XML tags. All data values in a Sitemap must be entity-escaped. The file itself must be UTF-8 encoded. The Sitemap must: Begin with an opening tag and end with a closing tag. Specify the namespace (protocol standard) within the tag. Include a entry for each URL, as a parent XML tag. Include a child entry for each parent tag. All other tags are optional. Also, all URLs in a Sitemap must be from a single host, such as or For more details: How to add a sitemap to a Rails app: 1) View for your sitemap:
 # app/views/mysitemap/index.xml.erb
2) At your Controller: Let it be our object in view is @articles variable. It needs to get that from a mysitemap controller:
# app/controllers/mysitemap_controller.rb
MysitemapController < ApplicationController
  layout nil
  def index
	headers['Content-Type'] = 'application/xml'
	respond_to do |format|
  	format.xml {@articles = Article.all}
3) Add a route:
# config/routes.rb
get 'sitemap.xml', :to => 'sitemap#index', :defaults => {:format => 'xml'}
How to convert XML file to HTML: A sample XML file;
# test1.xml





1) Using Ruby snippet with Nokogiri gem: Installing Nokogiri: Code Snippet:
siteMapUrls = Nokogiri::XML('test1.xml')).xpath("//url/loc").each do |node|
    puts node.inner_text
2) Using Javascript:
Add a Table inside  tag;

Include this script;

3) Using XSL file: Create a XSL file # test_style_sheet.xsl

My Sitemap links Collection

Sitemap Last Modified


Your View file:


4) Using JQuery (parseXML): It should be pretty easy using $.parseXML() Example:

To fetch all links from the Sitemap XML File: An easy way to submit multiple URLs, if we have a sitemap that contains all of the links which we wanted to submit to Google. Requires gems: 1.WaybackArchiver Send URLs to Wayback Machine from sitemap.xml (, single URL or file with URLs. We can also ask WaybackArchiver to crawl our website for URLs. 2.Sitemap-Parser Ruby Gem to parse compliant sitemaps 3.OpenURI OpenURI is an easy-to-use wrapper for Net::HTTP, Net::HTTPS and Net::FTP. 4.Nokogiri Nokogiri is a HTML, XML, SAX, and Reader parser with XPath and CSS selector support.
# mysitemap.rb

require 'wayback_archiver'
require 'sitemap-parser'
require 'open-uri'
require 'nokogiri'

siteMapUrl = ARGV[0]
if !siteMapUrl.nil?
  Nokogiri::XML('test1.xml')).xpath("//url/loc").each do |node|
	siteMapLink = node.content
	subSiteMapLink = siteMapLink
	arraySubSiteMapLink = subSiteMapLink.to_a
	(0..arraySubSiteMapLink.length-1).each do |j|
  	WaybackArchiver.archive(arraySubSiteMapLink[j], :url)
Run the script in Ruby prompt: ruby mysitemap.rb URL, substituting the URL for the sitemap. The sitemap code snippet may require changes depending on the node tag names. Validate the sitemap & submit it to Google: Register your site on Google Webmaster Tools. From there, we can validate and submit your sitemap for crawling. Finally, we should be able to see a number of the URL in our sitemap.
Sr. Ruby on Rails Developer

Subscribe For Latest Updates

Related Posts

Leave a Comment

Your email address will not be published. Required fields are marked *