2

Criando um sitemap.xml em Rails

Posted May 3rd, 2010 in Desenvolvimento and tagged , , by felipepavao

Dica rápida para quem está precisando criar um arquivo sitemap.xml, aquele mesmo que auxilia os navegadores a indexar melhor as páginas de um site.

Levando em consideração, neste exemplo, que temos um root_controller.rb, criaremos um método sitemap nele.

def sitemap
    @urls = [
              ["1.0", "http://www.domain.com/", "daily"],
              ["0.5", "http://www.domain.com/about", "monthly"],
              ["0.5", "http://www.domain.com/contact", "monthly"],
            ]
    @objects = Object.find(
           :all, 
           :order => "updated_at DESC", 
           :limit => 50000)
 
    response.headers['Content-Type'] = 'application/xml'
    render :action => 'sitemap', :layout => false
end

Como podemos observar, foi criado um hash com as URLs que são estáticas (podem até ter conteúdo dinâmico, mas são URLs que nunca mudarão). Definimos no hash alguns parâmetros como a importância e a frequência que as páginas são atualizadas. Em seguida, recebemos de uma consulta ao banco, objetos que formarão as URLs dinâmicas do site. Definimos também que a resposta da requisição está no formato XML e que aquele determinado método não é renderizado pelo template padrão.

No arquivo de rotas (routes.rb), criaremos uma rota para o método sitemap. Veja abaixo:

map.sitemap "/sitemap.xml", :controller => "root", :action => "sitemap"

Agora precisamos criar o template do XML que vai renderizar os parâmetros do método:

xml.instruct! :xml
xml.urlset "xmlns" => "http://www.sitemaps.org/schemas/sitemap/0.9" do
  @urls.each do |url|
    xml.tag! 'url' do
      xml.tag! 'loc', url[1]
      xml.tag! 'changefreq', url[2] 
      xml.tag! 'priority', url[0] 
    end
  end
  @objects.each do |o|
    xml.tag! 'url' do
      xml.tag! 'loc', object_url(o)
      xml.tag! 'changefreq', 'monthly'
      xml.tag! 'priority', '0.2'
    end
  end
end

Este arquivo, sendo salvo como sitemap.rxml, será responsável por formatar o documento XML. Podemos observar que o primeiro bloco de código é responsável pelas urls estáticas, e a segunda parte faz um loop do objeto que recuperamos do banco de dados.

Agora você já tem um um sitemap.xml para utilizar nas ferramentas de webmasters dos mecanismos de busca.

2 Responses so far.

  1. Legal, boa dica.
    Abraço

Leave a Reply