2010-01-16 15 views
57

C'è un modo semplice per creare un file Sitemaps per i progetti Rails? Soprattutto per i siti dinamici (come ad esempio Stack Overflow), dovrebbe esserci un modo per creare dinamicamente un file sitemaps. Qual è la strada da percorrere in Ruby e/o Rails?File Sitemap di Google per i progetti Rails

Cosa suggeriresti? C'è qualche gioiello là fuori?

+2

Grazie per la tua domanda, mi sono incuriosito sulle sitemap e ho scoperto molte (altre) cose per migliorare il mio sito rispetto a Google – Veger

risposta

47

Aggiungi questo percorso verso la parte inferiore del file config/routes.rb (percorsi più specifici devono essere elencati sopra di esso):

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

Creare il 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 

— Come potete vedere, questo è per un blog, quindi sta usando un modello Post. Questo è il modello HAML vista (app/views/mappa del sito/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 

Questo è tutto! Puoi testarlo sollevando http://localhost:3000/sitemap.xml (se usi Mongrel) in un browser, o magari usando cURL.

Si noti che il controller utilizza il metodo stale? per emettere una risposta HTTP 304 non modificata se non ci sono nuovi post sinceri che l'ultima è stata richiesta.

+0

grazie! Bella risposta! – z3cko

+0

qualcuno può aggiungere dei chiarimenti sulla sitemap denominata scope e come l'impostazione Last_modified al momento in cui Post.last è stato modificato aiuta a verificare la presenza di staleness? – Ben

+0

Questo approccio ovviamente non funziona con Rails 3.2. – PEF

1

This article spiega come è possibile generare una Sitemap.

Fondamentalmente dovrebbe creare un controller che trovi tutte le pagine (ad esempio i tuoi messaggi) e inserirli in un file XML. Quindi comunichi a Google la posizione del file XML e quando il tuo sito web viene aggiornato.

Una semplice query Google rails sitemap rivela molti altri articoli che spiegano fondamentalmente la stessa cosa.

6

Ecco un plug-in per la creazione di sitemap in Ruby on Rails: Ruby on Rails sitemap plugin. Si occupa della maggior parte della logica e della generazione della sitemap. Il plugin è dalla mia homepage.

Esempio di configurazione:

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 

Con i migliori saluti, Lasse

23

Ora, per Rails3, è meglio utilizzare tutte le funzionalità sitemap_generator gioiello.

+0

sfortunatamente il link che hai postato non funziona. intendevi https://github.com/adamsalter/sitemap_generator? – z3cko

+13

Utilizzare https://github.com/kjvarga/sitemap_generator – Ninad

+0

Ciò è positivo se la Sitemap diventa troppo grande. Dividerà e comprimerà per te in base alle limitazioni della sitemap. È anche super veloce. Quando sono passato da xml builder, ho tagliato il tempo da 15 minuti a 1,5 minuti. – lulalala

10

Si consiglia di controllare il sitemap_generator gem. Gestisce tutti questi problemi per te ... e davvero, chi vuole pasticciare intorno all'autore XML?

Ecco un esempio sitemap per mostrare come si utilizzano i modelli Rails e aiutanti percorso per generare gli URL 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 

quindi si utilizza compiti Rake per aggiornare tutte le volte che si desidera. È davvero così semplice :)

+0

Grazie per il suggerimento, questa gemma semplifica davvero la creazione della sitemap includendo il ping di tutti i principali motori di ricerca. – anka

19

Amo la risposta di John Topley perché è così semplice ed elegante, senza bisogno di una gemma. Ma è un po 'datato, quindi ho aggiornato la sua risposta per Rails 4 e le ultime linee guida sulla Sitemap di Google.

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/mappa del sito/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 

Puoi testarlo facendo apparire localhost: 3000/sitemap.xml.

+1

Per coloro che ricevono l'errore 'ActionView :: MissingTemplate', è sufficiente aggiungere' gem 'haml-rails' al proprio gemfile ed eseguire 'bundle install'. – Kasperi

+0

La mia domanda potrebbe sembrare molto semplice, ma non ho alcun modello Post ... di cosa si tratta? – Chleo

+0

Stavamo usando solo Post come modello di esempio. Puoi nominare il tuo come preferisci. :-) –

Problemi correlati