Sitemap für Enki
Um meinen Blog für Google besser durchsuchbar zu machen (Stichwort Suchmaschinenoptimierung ), hab ich beschlossen eine Sitemap zu basteln.
Eine Sitemap ist eine XML-Datei die alle (zu indizierenden) Seiten der Webseite mit zusätzlichen Informationen wie dem Änderungsdatum enthält.
Es gibt Programme die eine Webseite automatisiert durchsuchen und eine Sitemap erstellen, aber solche Tools halte ich nur für eine Notlösung: Es werden alle Seiten in die Sitemap aufgenommen (also auch Übersichtsseiten) und diese Tools können das Änderungsdatum der Seiten nicht erfassen und somit muss Google bei jedem Besuch die komplette Seite neu durchsuchen.
Es muss also eine eigene Lösung her:
Ich hab die Sitemap-Action im Post-Controller angesiedelt.
Der Controller-Code hat keine andere Aufgabe, als alle Posts und Pages aus der Datenbank zu holen und den entsprechenden View aufzurufen:
app/controllers/posts_controllers.rb
1 def sitemap 2 @posts = Post.all 3 @pages = Page.all 4 render :action => "sitemap.xml.builder", :layout => false 5 end
Die View ist etwas umfangreicher, sollte aber leicht verständlich sein, wenn man sich die offizielle Spezifikation anguckt.
app/views/posts/sitemap.xml.builder
1 xml.instruct! 2 3 xml.urlset "xmlns" => "http://www.google.com/schemas/sitemap/0.84" do 4 @posts.each do |post| 5 xml.url do 6 xml.loc post_path(post, :only_path => false) 7 xml.lastmod post.lastmod.iso8601 8 end 9 end 10 11 @pages.each do |page| 12 xml.url do 13 xml.loc "http://#{request.host_with_port}/pages/#{page.slug}" 14 xml.lastmod page.updated_at.iso8601 15 end 16 end 17 end
Nun muss noch die entsprechende Route hinzugefügt werden:
config/routes.rb
1 map.sitemap '/sitemap.xml', :controller => "posts", :action => "sitemap"
Die lastmod-Funktion im Post-Model gibt entweder die letzte Modifikation des Posts oder des letzten Kommentars zurück.
app/models/post.rb
1 def lastmod 2 if self.approved_comments.count == 0 || self.approved_comments.last.updated_at < self.updated_at 3 return self.updated_at 4 end 5 self.approved_comments.last.updated_at 6 end
Nun muss die Sitemap nur noch in die robots.txt eingetragen werden, damit sie auch von Google gefunden wird.
public/robots.txt
1 Sitemap: http://blog.schaeufele.org/sitemap.xmlFertig ist die Sitemap…
Kommentar hinzufügen