modo consigliato o plugin per creare sitemap google per l'app ruby ??on rails?
-
03-07-2019 - |
Domanda
Ho fatto una rapida ricerca su Google e non ho visto nulla di eccezionale per automatizzare la creazione e l'aggiornamento della mia sitemap google per l'app ruby ??on rails. Qualche suggerimento?
Soluzione
Ho aggiunto una sitemap dinamica a un'applicazione blog solo di recente. Questi passaggi dovrebbero iniziare.
Aggiungi questo percorso verso la parte inferiore del file config / route.rb
(i percorsi più specifici devono essere elencati sopra di esso):
map.sitemap '/sitemap.xml', :controller => 'sitemap'
Crea il SitemapController
(app / controller / 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
& # 8212; Come puoi vedere, questo è per un blog, quindi sta usando un modello Post
.
Questo è il modello di visualizzazione (app / views / sitemap / index.xml.builder):
base_url = "http://#{request.host_with_port}"
xml.instruct! :xml, :version=>'1.0'
xml.tag! 'urlset', 'xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9' do
for post in @posts do
xml.tag! 'url' do
xml.tag! 'loc', "#{base_url}#{post.permalink}"
xml.tag! 'lastmod', post.last_modified
xml.tag! 'changefreq', 'monthly'
xml.tag! 'priority', '0.5'
end
end
end
Questo è tutto! Puoi testarlo facendo apparire http: // localhost: 3000 / sitemap.xml (se usi Mongrel ) in un browser, o forse utilizzando cURL.
Si noti che il controller utilizza il metodo stale?
per inviare una risposta HTTP 304 non modificata se non ci sono nuovi post, è vero che la Sitemap è stata richiesta l'ultima volta.
Altri suggerimenti
In realtà non consiglierei di usare il controller e semplicemente instradarlo ad esso come '/sitemap.xml', perché se le tue Sitemap aumenteranno sprecheranno risorse. Sarebbe meglio fare un rake task e rigenerare sitemap ogni notte o giù di lì, a seconda della frequenza con cui cambia il contenuto.
Se il tuo sito non ha quasi 50000 pagine e non prevedi di averne di più, puoi inserirti in un file Sitemap, quindi ti suggerisco di utilizzare " Google Sitemaps con Ruby on Rails, Capistrano e Cron " So che funziona decentemente perché lo sto usando con successo atm.
Nota: non suggerirei di utilizzare gli autori per copiare le sitemap ogni volta che viene eseguita l'attività di distribuzione, a mio avviso non è pulita. È meglio usare la directory condivisa e il link simbolico su di essa durante la distribuzione, quindi si avrà la certezza di avere solo una versione dei file e ora di sprecare spazio se rimangono copie extra. Ho questo nel mio deploy.rb:
desc "Symlink the upload directories"
task :before_symlink do
run "rm -drf #{release_path}/public/sitemaps"
run "ln -s #{shared_path}/sitemaps #{release_path}/public/sitemaps"
end
Inoltre puoi utilizzare " Mappa del sito grande " gemma, ma l'ho trovato proprio ora e non posso dirti quanto è bello. Sembra davvero facile configurare questo gioiello e utilizza anche i percorsi delle tue rotaie per la generazione di collegamenti, quindi avrai un problema in meno da risolvere rispetto alla prima soluzione.
Google Sitemap Generator è la versione ufficiale di Google. È facile da installare e configurare.
Ti consiglio di dare un'occhiata al sitemap_generator gem . Gestisce tutti questi problemi per te ... e davvero, chi vuole fare casino con la creazione di XML?
Ecco un esempio di sitemap per mostrare come usi i tuoi modelli Rails e aiutanti di percorso per generare i tuoi 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 usi le attività Rake per aggiornare tutte le volte che vuoi. È davvero così semplice :)