Sitemaps are XML files that provide a map of your URLs to Google and other search engines. They can be especially useful for Rails applications, like a blog, where all the the links may not appear browseable. There are many ways to code a sitemap for a Rails application, but I'll show you a very simple and quick method to get your sitemap up and running in minutes.
Let's assume you already have a working Rails blog. Let's generate a controller for the sitemap along with an index action.
rails g controller Sitemaps index
Now let's work on our view. In the app/views/sitemaps folder which was generated by the Sitemaps controller, change the name of the index file to index.xml.builder . And to the file add the following code.
#app/views/sitemaps/index.xml.builder xml.instruct! :xml, :version => "1.0" xml.urlset "xmlns" => "http://www.sitemaps.org/schemas/sitemap/0.9" do xml.url do xml.loc root_url xml.changefreq("hourly") xml.priority "1.0" end @articles.each do |article| xml.url do xml.loc article_url(article) xml.lastmod article.updated_at.to_date xml.changefreq "monthly" xml.priority "0.5" end end end
As you can see my blog entries are held in the @articles instance variable from my already existing Articles controller. This code will generate the XML content for each article. The urlset element is the document-level Sitemap and the loc element provides the full URL of the article's page. The changefreq element allows the developer to decide which portions of the site need to be crawled more frequently relative to other pages on the site. The other XML elements are somewhat self-explanatory.
Now lets put in a few lines of code into the sitemap controller's index action.
#app/controllers/sitemaps_controller.rb def index @articles = Article.all respond_to do |format| format.xml { render layout: false } end end
Since the sitemap controller is only going to be responding to XML requests, we can keep the code very simple.
Now for a route.
#config/routes.rb get 'sitemap' => 'sitemaps#index', :format => 'xml'
Finally, lets tell the bots where to find our sitemap.
#public/robots.txt Sitemap: /sitemap.xml
You can do a quick test by entering localhost:3000/sitemap.xml into your local server's browser and the sitemap will appear. That's it. A quick and easy sitemap for the web's indexing crawlers