Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Making a sitemap.xml with Ruby on Rails 4

I am trying to make a sitemap for my Ruby on Rails 4 application. I would use a gem like this dynamic_sitemaps but I can't use it with Heroku so I looked around and found this tutorial: http://meghagulati.com/2013/12/05/sitemap-xml-on-heroku-with-ruby-on-rails/ to make my own (with small changes) But I am getting this error when I go to myapp.com/sitemap.xml, I hope someone can help me to find the error.

ActionController::UnknownFormat in SitemapsController#index ActionController::UnknownFormat Extracted source (around line #7): respond_to do |format|

#app/controllers/sitemaps_controller.rb
class SitemapsController < ApplicationController
  def index
    @static_pages = [root_url]
    @movies = Movie.all
    respond_to do |format|
      format.xml
    end
    @series = Series.all
    respond_to do |format|
      format.xml
    end
  end
end

#app/views/sitemaps/index.xml.builder
base_url = "http://#{request.host_with_port}"
xml.instruct! :xml, :version=>'1.0'
xml.tag! 'urlset', 'xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9' do
  xml.url{
      xml.loc("http://myapp.com")
      xml.changefreq("weekly")
      xml.priority(1.0)
  }
  xml.url{
      xml.loc("http://myapp.com/movies")
      xml.changefreq("daily")
      xml.priority(0.9)
  }
  xml.url{
      xml.loc("http://myapp.com/series")
      xml.changefreq("daily")
      xml.priority(0.9)
  }
  @movies.each do |movie|
    xml.url {
      xml.loc "#{movie_url(movie)}"
      xml.lastmod movie.updated_at.strftime("%F")
      xml.changefreq("weekly")
      xml.priority(0.5)
    }
  end
  @series.each do |series|
    xml.url {
      xml.loc "#{series_url(series)}"
      xml.lastmod series.updated_at.strftime("%F")
      xml.changefreq("weekly")
      xml.priority(0.5)
    }
  end
end

#config/routes.rb
resources :sitemaps, :only => :index
get "sitemap.xml" => "sitemaps#index", format: :xml, as: :sitemap
like image 389
thecrentist Avatar asked May 24 '14 20:05

thecrentist


People also ask

How do I create a Sitemap XML?

Go to SEO > General > Features. Make sure the “XML sitemaps” toggle is on. You should now see your sitemap (or sitemap index) at either yourdomain.com/sitemap.xml or yourdomain.com/sitemap_index.xml.

How do I add a sitemap to Ruby on Rails?

You just need to use the rails task from the sitemap_generator itself rake sitemap:refresh and a sitemap. xml file will be added to the public folder.

What is the difference between sitemap XML and sitemap HTML?

The main difference between HTML and XML sitemap is that XML sitemap is used to help search crawlers navigate your website, while HTML sitemap guides users through your store pages. XML sitemap targets robots, HTML one — humans.


1 Answers

First of all, you respond_to must only be called once, so you need to change your controller method, e.g.:

class SitemapsController < ApplicationController
  def index
    @static_pages = [root_url]

    @movies = Movie.all
    @series = Series.all

    respond_to do |format|
      format.xml
    end
  end
end

This change should render an XML file in your browser when you visit the following URL:

http://lvh.me:3000/sitemaps.xml

Furthermore, you need to change your routes specification and use a string for the format rather than a symbol, i.e. change :xml to "xml":

  get "sitemap.xml" => "sitemaps#index", :format => "xml", :as => :sitemap

You should see the same XML file in your browser when visiting the following URL:

http://lvh.me:3000/sitemap.xml

(lvh.me resolves to localhost)

like image 125
Patrick Frey Avatar answered Oct 15 '22 07:10

Patrick Frey