Skip to content

Instantly share code, notes, and snippets.

@ls-lukebowerman
Created August 7, 2012 17:59
Show Gist options
  • Save ls-lukebowerman/3287848 to your computer and use it in GitHub Desktop.
Save ls-lukebowerman/3287848 to your computer and use it in GitHub Desktop.
Sitemap (sitemaps.org) generator for Middleman
<% pages = sitemap.resources.find_all{|p| p.source_file.match(/\.html/) } %>
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<% pages.each do |p| %>
<url>
<loc>http://youdomain.com/<%=p.destination_path.gsub('/index.html','')%></loc>
<priority>0.7</priority>
</url>
<% end %>
</urlset>
@rowanhogan
Copy link

For anyone stumbling across this who is using redirects, you might want to update the method which fetches pages to something like:

<% pages = sitemap.resources.reject{|r| r.is_a? Middleman::Sitemap::Extensions::Redirects::RedirectResource }.find_all{|p| p.source_file.match(/\.html/) } %>

@sathishmanohar
Copy link

Works great!

There are three things I would want to achieve further

  • In case of using directory_indexes, the root path still shows index.html in the end
  • How to hide certain pages from sitemap (preferably using frontmatter)
  • How to set page specific priority (preferably using frontmatter)

@sathishmanohar
Copy link

Incase of directory_indexes using url instead of destination_path does the trick

<loc>http://youdomain.com<%=p.url.gsub('/index.html','')%></loc>

@sathishmanohar
Copy link

I tweaked this gist to the following code for sitemap.xml.erb it works with directory indexes and has ability to hide pages from sitemap and set priorities for each page from frontmatter, priority defaults to 0.5


---
layout: false
directory_index: false

---
<% pages = sitemap.resources.find_all{|p| p.source_file.match(/\.html/) && !p.data.sitemap_noindex == true } %>
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<% pages.each do |p| %>
  <url>
    <loc>http://balcozy.com<%=p.url.gsub('/index.html','')%></loc>
    <changefreq>monthly</changefreq>
    <priority><%= p.data.sitemap_priority || 0.5 %></priority>
  </url>
<% end %>
</urlset>

In page.html.erb use sitemap_noindex: true and sitemap_priority: whenever needed


---
sitemap_noindex: true
sitemap_priority: 0.8

---

@raefa
Copy link

raefa commented Feb 26, 2018

For anyone coming across this recently, I had to modify the suggestion above to work with redirects. My sitemap.xml.erb file looks like this:

---
layout: false
directory_index: false
---
<% pages = sitemap.resources.reject{|r| r.is_a? Middleman::Sitemap::Extensions::RedirectResource }.find_all{|p| p.source_file.match(/\.html/) && !p.data.sitemap_noindex == true } %>
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<% pages.each do |p| %>
  <url>
    <loc>https://example.com<%=p.url.gsub('/index.html','')%></loc>
    <changefreq>monthly</changefreq>
    <priority><%= p.data.sitemap_priority || 0.5 %></priority>
  </url>
<% end %>
</urlset>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment