Sitemaps with the Roda Framework
There can be a number of reasons for wanting to add sitemap to your site, but perhaps the most important is for Google - and other search engines (SE’s) of course! From an SEO viewpoint Google expects your site to have a sitemap and thankfully, this is very easy to do with Ruby websites.
In this short tutorial we’ll be implementing an automated sitemap for a site built with the Roda framework. I’ll be building on top of my previous Roda Blog tutorial, which you might find useful to look over before continuing.
Requirements
Rather than having to build the XML by hand we’ll be using the builder
and tilt
GEMs. These will make it much easier to generate valid XML documents. Before continuing, add the following to your Gemfile and then run bundle install
Routing
The tilt
GEM supports the Builder engine out-of-the-box, so we just specify the builder extension on the sitemap route, and the file will be parsed correctly.
As we’ll be delivering an XML document we’ve created the route to trigger on /sitemap.xml
. We also force the “Content-Type” to XML for this route.
The sitemap specification states that a single file can include up to 50,000 entries. If your site will have more than that then you’ll need to implement multiple sitemaps. More information on the protocol can be found at sitemaps.org.
Builder View
Using builder is very straight forward. Let’s see the whole file first;
The first thing to note is the file extension. By using .builder
we’re telling tilt
that we want this to be processed using the Builder engine.
Sitemaps must be valid XML so the first item needs to be a Processing Instruction; xml.instruct!
generates an <?xml version="1.0" encoding="UTF-8"?>
.
The root node should be a <urlset>
and requires the appropriate namespace attributes (xmlns:xsi
, xsi:schemaLocation
, xmlns
). The basic construct of xml.urlset
is how we’ll generate the rest of our xml.url
nodes and this should be self explanatory from the code above.
It’s difficult to find exact recommendations on what values to give xml.priority
, so those above are my own preference. Generally, important pages have a high priority and less important a low priority. For my own feeds I usually give the homepage a “1”, general pages like about between “0.2” and “0.6”, while Posts are around “0.7” (at least for a blog site). You’ll have to make your own judgement based on what your site is about, but perhaps the one absolute rule is that you should not set all values to be the same.
Our builder view should output something like the following;
After deploying your changes head over to your Google Webmaster account and add the sitemap URL. If Google is being nice to you then you should enjoy all the SEO goodness that will bring.
You can also use these exact same technique to generate a RSS feed for your blog. You can read more about the specification on the RSS Advisory Board website…I may even do a specific RSS tutorial if there is demand for it.
If you have any comments or issues with the above code please do let me know via the comments below, or contact me directly.