Alex Pearce

Jekyll sitemaps

For indexing websites, Google et al. have a standardised protocol for creating a sitemap. A sitemap is an XML file containing a list of all pages to be indexed. The sitemaps Wikipedia article is more informative than I am on the matter.

Anyway, I wanted to create a sitemap for this site to submit to Google. This site is very simple as it consists of only three types of pages: a post page, a tag index page, and a category index page. One post page per post, and one tag/category index page per tag/category. (For how I implemented tag/category index pages, see my post on simple Jekyll searching.

Listing all the pages is easy.

<% for post in site.posts %>
<% endfor %>

Listing the index pages was slightly harder, as the template data sites.tags is supposed to be used like sites.tags.TAGNAME, returning a list of all posts with the given tag name. The solution is embedded somewhere here, specifically these lines:

<% for category in site.categories %>
<%= category | first %>
<% endfor %>

We just need to use the liquid filter first to get the category name, and equally for tags.

Consolidating it all into a sitemap.xml might yield something like mine. If you have any extra pages you can add these in a similar way to posts. Nice!