Недавно обнаружил что блог плохо проиндексирован яндексом, поэтому я решил добавить сайтмап в яндекс вебмастер. К сожалению ghost сейчас не имеет встроенной возможности для генерации сайтмапа. В этом смысле проще оказалось с гуглом, которому можно скормить rss-фид и его это вполне устроит. С яндексом это не получилось, поэтому пришлось поразбираться как добавить генерацию sitemap.xml в ghost.

Это оказалось не сложно. Я нашел уже готовое решение https://github.com/tstrimple/tstrimple.com/commit/2bf48540581269ff6bf56492dcd3ba25fc33e4b9. Правда я внес два изменения. Во-первых, там где делается выборка постов, я добавил лимит 1000, чтобы доставались все посты, в противном случае отдается последние несколько постов.

api.posts.browse({
  limit: 1000
}).then(function (result) {
  buildSitemap(result.posts, function (sitemap) {
    res.header('Content-Type', 'application/xml');
    res.send(sitemap);
  })
});

Во-вторых, в приведенном коде в качестве урла страницы берется просто слаг поста, в моем случае это не подходит, так как у меня урлы включают дату публикации. Поэтому я заменил это на вызов функции urlFor:

api.settings.read('permalinks').then(function (permalinks) {
  var post = posts.shift();
  sitemap.add({url: config.urlFor('post', { post: post, permalinks: permalinks })});
  process.nextTick(buildSitemap.bind(this, posts, done, sitemap));
});

В результате у блога появился сайтмап, который я смог добавить в яндекс вебмастере.