web-dev-qa-db-fra.com

Fichiers sitemap Google pour les projets Rails

Existe-t-il un moyen facile de créer un fichier de sitemaps pour Rails projets? Surtout pour les sites dynamiques (tels que Stack Overflow par exemple), il devrait y avoir un moyen de créer dynamiquement un fichier de sitemaps. chemin à parcourir en Ruby et/ou Rails?

Que suggérerais-tu? Y a-t-il un bon bijou là-bas?

59
z3cko

Ajoutez cet itinéraire vers le bas de votre config/routes.rb fichier (des routes plus spécifiques doivent être listées au-dessus):

map.sitemap '/sitemap.xml', :controller => 'sitemap'

Créez le SitemapController (app/controllers/sitemap_controller):

class SitemapController < ApplicationController
  layout nil

  def index
    headers['Content-Type'] = 'application/xml'
    last_post = Post.last
    if stale?(:etag => last_post, :last_modified => last_post.updated_at.utc)
      respond_to do |format|
        format.xml { @posts = Post.sitemap } # sitemap is a named scope
      end
    end
  end
end

—Comme vous pouvez le voir, il s'agit d'un blog, tout comme le modèle Post. Voici le modèle de vue HAML (app/views/sitemap/index.xml.haml):

- base_url = "http://#{request.Host_with_port}"
!!! XML
%urlset{:xmlns => "http://www.sitemaps.org/schemas/sitemap/0.9"}
  - for post in @posts
    %url
      %loc #{base_url}#{post.permalink}
      %lastmod=post.last_modified
      %changefreq monthly
      %priority 0.5

C'est tout! Vous pouvez le tester en affichant http: // localhost: 3000/sitemap.xml (si vous utilisez Mongrel) dans un navigateur, ou peut-être en utilisant cURL.

Notez que le contrôleur utilise le stale? méthode pour émettre une réponse HTTP 304 non modifiée s'il n'y a pas de nouveaux messages, la dernière fois que le plan du site a été demandé.

47
John Topley

Maintenant, pour Rails3, il vaut mieux utiliser toutes les fonctionnalités sitemap_generator gem.

23
Ninad

J'adore la réponse de John Topley car elle est si simple et élégante, sans avoir besoin d'un bijou. Mais c'est un peu daté, j'ai donc mis à jour sa réponse pour Rails 4 et les dernières directives de Google Sitemap pour les outils de site).

config/routes.rb:

get 'sitemap.xml', :to => 'sitemap#index', :defaults => { :format => 'xml' }

app/controllers/sitemap_controller.rb:

class SitemapController < ApplicationController
  layout nil

  def index
    headers['Content-Type'] = 'application/xml'
    last_post = Post.last
    if stale?(:etag => last_post, :last_modified => last_post.updated_at.utc)
      respond_to do |format|
        format.xml { @posts = Post.all }
      end
    end
  end
end

app/views/sitemap/index.xml.haml:

!!! XML
%urlset{:xmlns => "http://www.sitemaps.org/schemas/sitemap/0.9"}
  - for post in @posts
    %url
      %loc #{post_url(post)}/
      %lastmod=post.updated_at.strftime('%Y-%m-%d')
      %changefreq monthly
      %priority 0.5

Vous pouvez le tester en affichant localhost: 3000/sitemap.xml.

19
Aaron Gray

Je vous recommande de consulter la gem sitemap_generator . Il gère tous ces problèmes pour vous ... et vraiment, qui veut s'embêter à créer du XML?

Voici un exemple de sitemap pour montrer comment vous utilisez vos Rails modèles et assistants de chemin pour générer vos URL de sitemap:

# config/sitemap.rb
SitemapGenerator::Sitemap.default_Host = "http://www.example.com"
SitemapGenerator::Sitemap.create do
  add '/contact_us'
  Content.find_each do |content|
    add content_path(content), :lastmod => content.updated_at
  end
end

Ensuite, vous utilisez les tâches Rake pour actualiser aussi souvent que vous le souhaitez. C'est aussi simple que ça :)

10
Karl Varga

Voici un plugin pour créer des sitemaps dans Ruby on Rails: Ruby on Rails plugin sitemap . Il prend en charge la plupart des sitemap logique et génération. Le plugin est de ma page d'accueil.

Exemple de configuration:

Sitemap::Map.draw do

  # default page size is 50.000 which is the specified maximum at http://sitemaps.org.
  per_page 10

  url root_url, :last_mod => DateTime.now, :change_freq => 'daily', :priority => 1

  new_page!

  Product.all.each do |product|
    url product_url(product), :last_mod => product.updated_at, :change_freq => 'monthly', :priority => 0.8
  end

  new_page!

  autogenerate  :products, :categories,
                :last_mod => :updated_at,
                :change_freq => 'monthly',
                :priority => 0.8

  new_page!

  autogenerate  :users,
                :last_mod => :updated_at,
                :change_freq => lambda { |user| user.very_active? ? 'weekly' : 'monthly' },
                :priority => 0.5

end

Cordialement, Lasse

6
Lasse Bunk

Cet article explique comment générer un sitemap.

Fondamentalement, devrait créer un contrôleur qui trouve toutes les pages (par exemple vos messages) et les mettre dans un fichier XML. Ensuite, vous informez Google de l'emplacement du fichier XML et de la date de mise à jour de votre site Web.

Une simple requête Google Rails sitemap révèle de nombreux autres articles expliquant essentiellement la même chose.

1
Veger