sitemap.xml in Harmony
Updated 7-11-2011: Found a better way to do this so updated the example below.
We love that our new site is powered by Harmony but I didn’t love not having a sitemap.xml.
Turns out its pretty easy to do.
First, build a new template. I called mine sitemap.xml.tpl
{% include 'sitemap_page' for site.root %}
{% for post in site.recent_posts.10000 %}
{% include 'sitemap_page' for post %}
{% endfor %}
This sets up the basic XML and then calls an include with the homepage (site.root).
The include file looks like this (mine is named sitemap\_page.inc
)
{{sitemap_page.url}}
{{ sitemap_page.updated_at | date: '%Y-%m-%d' }}
daily
{{sitemap_page.ancestors | size | times: -0.1 | plus: 1.0 }}
{% for child in sitemap_page.navigation %}
{% include 'sitemap_page' for child %}
{% endfor %}
The first section is the xml that for the current page. Unfortunately, there isn’t a good way to get the time for the
I should really change the
The priority is a bit clever. I basically take the depth of the page and decrement the priority by 0.1. The homepage is 1.0, portfolio is 0.9, and a portfolio item is 0.8. Won’t work for everybody, but does for me.
Next, we recursively loop through each subpage. I use sitemap\_page.navigation
so that it only shows pages included in navigation. For example, every person in our About section is technically a different page, but we pull them all into the about page. By taking them out of the navigation, I don’t link to non-existant pages.
Then, I look over recent posts if there’s a blog. We only have one, but it will work with as many as you have. I also don’t know of a way to get all posts (Harmony team, please enlighten me) so I’m grabbing 10,000. That’ll do for a while.
To get it to show on the site, I simply make a top-level page with the permalink of sitemap.xml and tell it to use my sitemap template.
The result is a sitemap.xml file that Google likes and indexes. check it out!
Comments
Nice! Note: even though you put 10,000 it will only grab 200 right now. The main reason is grabbing that many posts is a lot. I’m sure we’ll bump up from 200 soon and someday we’ll try to remove the limit.
John Nunemaker: Hm, ok. That’s good to know. Maybe you should build in sitemap functionality ;)
Thanks for this - very useful.
Harmonyapp should do this out the box!