Daniel's Blog

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.xml

Fertig ist die Sitemap…

Kommentar hinzufügen


( lesstile - umschließe Code-Blöcke mit ---)