sitemap.xml no Rails

Read in 2 minutes ·

Usado para SEO, Sitemaps servem para informar aos sites de busca como indexar as páginas de um site. Indexadores descobrem páginas com base em links no site e outros sites e o que os Sitemaps fazem é complementar esses dados, para permitir que os indexadores com suporte para Sitemaps peguem todos os URLs no Sitemap e aprendam sobre esses URLs usando os metadados associados.

Existem sites para gerar o arquivo, mas fazer isso no Rails não é complicado e faremos isso em 4 passos. A dica vem do Tony no livro Advanced Rails Recipes.

1. Controller

Crie um controller chamado sitemap:

script/generate controller sitemap

2. Busca das URLs

Crie o método para listar todas as entradas do seu banco:

class SitemapController < ApplicationController
  def sitemap
    @entries = Model.find(:all, :order => "updated_at DESC", :limit => 50000)
    headers["Content-Type"] = "text/xml"
    # set last modified header to the date of the latest entry.
    headers["Last-Modified"] = @entries[0].updated_at.httpdate    
  end
end

As entradas do arquivo sitemap.xml são limitadas em seu protocolo em 50000 registros. Você pode se quiser, gerar esse arquivo com as URLs de várias entidades, como o Ilya Grigorik faz em seu artigo.

3. View

Crie o arquivo sitemap.rxml

xml.instruct!
xml.urlset "xmlns" => "http://www.sitemaps.org/schemas/sitemap/0.9" do
  @entries.each do |entry|
    xml.url do
      xml.loc url_for(:controller => 'controller', :action => 'show', :id => entry.id, :only_path => false)
      xml.lastmod entry.updated_at.to_date
    end
  end
end

4. Atualização do arquivo de rotas

Crie a rota para que você tenha o arquivo www.seusite.com.br/sitemap.xml

map.connect 'sitemap.xml', :controller => "sitemap", :action => "sitemap"

Conclusão

Com o arquivo pronto, é só indicá-lo no Google Webmaster e no Yahoo Site Explorer. Caso queira conhecer mais sobre sitemaps, visite essa página do Google.

Avatar photo If you like my content, follow me on Twitter and GitHub

Comments

comments powered by Disqus