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?
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é.
Maintenant, pour Rails3, il vaut mieux utiliser toutes les fonctionnalités sitemap_generator gem.
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.
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 :)
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
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.