Question 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 dynamiques (comme Stack Overflow par exemple), il devrait y avoir un moyen de créer dynamiquement 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?


57
2018-01-16 12:11


origine


Réponses:


Ajoutez cette route 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éer 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, ceci est pour un blog. Post modèle. C'est le HAML vue modèle (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 mettant en place 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é.


47
2018-01-16 14:46



Maintenant, pour les rails3, il est préférable d'utiliser des fonctionnalités complètes sitemap_generator gemme.


23
2017-12-22 11:51



J'adore la réponse de John Topley car elle est si 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.


19
2017-10-08 04:13



Je vous recommande de vérifier la sitemap_generator gem. 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 :)


10
2017-09-01 18:39



Voici un plugin pour créer des sitemaps dans Ruby on Rails: Plugin de 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

Meilleures salutations, Lasse


6
2017-10-29 21:54



Cet article explique comment un sitemap peut être généré.

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.

Un simple Google rails sitemap query révèle de nombreux autres articles expliquant essentiellement la même chose.


1
2018-01-16 13:34