Fichiers Google Sitemap pour les projets Rails

Existe-t-il un moyen simple de créer un fichier de sitemaps pour les projets Rails? Surtout pour les sites dynamics (comme Stack Overflow par exemple), il devrait y avoir un moyen de créer dynamicment un fichier sitemaps. Quelle est la voie à suivre dans Ruby et / ou Rails?

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

    Ajoutez cette route vers le bas de votre fichier config/routes.rb (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, cela concerne un blog, tout comme l’utilisation d’un 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 Not Modified s’il n’y a pas de nouveaux messages, le dernier sitemap ayant été demandé.

    Maintenant, pour rails3, il est préférable d’utiliser une gemme sitemap_generator complète .

    J’adore la réponse de John Topley car elle est simple et élégante, sans avoir besoin d’une gemme. Mais c’est un peu daté, j’ai donc mis à jour sa réponse pour Rails 4 et les dernières directives de sitemap de Google Webmaster Tools.

    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 installant localhost: 3000 / sitemap.xml.

    Je vous recommande de vérifier la gemme sitemap_generator . Il gère tous ces problèmes pour vous … et vraiment, qui veut gâcher la création de XML?

    Voici un exemple de sitemap pour montrer comment vous utilisez vos modèles Rails et vos aides 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 🙂

    Voici un plugin pour créer des sitemaps dans Ruby on Rails: plugin sitemap Ruby on Rails . Il prend en charge la plus grande partie de la logique et de la génération de sitemap. Le plugin provient 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

    Cet article explique comment créer un sitemap.

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

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