Skip to content

Instantly share code, notes, and snippets.

@osv
Created February 8, 2016 10:13
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save osv/9266c5d98d1c95b111bd to your computer and use it in GitHub Desktop.
Save osv/9266c5d98d1c95b111bd to your computer and use it in GitHub Desktop.
gulp sitemap task
// ISO_3166 language map. http://userpage.chemie.fu-berlin.de/diverse/doc/ISO_3166.html
var LANGUAGES = {
en: 'en',
ru: 'ru',
sv: 'si',
fi: 'fi',
tr: 'tr',
el: 'gr'
};
var URLS = {
'/': {
changefreq: 'daily', // default weekly
priority: 0.9,
},
'/about': {},
'/affiliate': {},
'/affiliate_terms': {},
'/bitcoin': {},
'/bonus': {},
'/faq': {},
'/gamelist': {},
'/gamelist/1': {}, // hits
'/gamelist/allgames': {},
'/payment-methods': {},
'/play-safe': {},
'/promo': {
priority: 0.9,
changefreq: 'daily'
},
'/provability-fair-games': {},
'/support': {},
'/terms-and-conditions': {},
};
module.exports = {
languages: LANGUAGES,
urls: URLS,
};
// Build sitemap for 7bit
// See https://support.google.com/webmasters/answer/2620865?hl=ru
'use strict';
var gulp = require('gulp'),
plugins = require('gulp-load-plugins')({
pattern: ['*'],
lazy: false
}),
fs = require('fs'),
_ = require('underscore'),
builder = require('xmlbuilder');
var BASE = 'https://EXAMPLE.com',
buildDir = plugins.path.resolve('./build'),
SITEMAPXML = buildDir + '/sitemap.xml',
config = require('../sitemap.config.js'),
URLS = config.urls, // sitemap urls
LANGUAGES = config.languages; // ISO3166 languages map
gulp.task('sitemap', [], function() {
try {fs.mkdirSync(buildDir);} catch (e) {}
var xml = builder.create('urlset', { version: '1.0', encoding: 'UTF-8' })
.att({
'xmlns': 'http://www.sitemaps.org/schemas/sitemap/0.9',
'xmlns:xhtml': 'http://www.w3.org/1999/xhtml'
});
xmlUrls(xml, URLS);
// per language urls
_.each(LANGUAGES, function(lang) {
xmlUrls(xml, URLS, lang);
});
var sitemap = xml.end({ pretty: true, indent: ' ', newline: '\n' });
fs.writeFileSync(SITEMAPXML, sitemap);
});
function xmlUrls(xml, urls, language) {
_.each(urls, function(prop, url) {
var languagePart = (language ? '/' + language : ''),
fullUrl = BASE + languagePart + url,
xUrl = xml.ele('url');
xUrl.ele('loc', fullUrl);
xUrl.ele('changefreq', prop.changefreq || 'weekly');
if (prop.priority) {
xUrl.ele('priority', prop.priority || 0.5);
}
_.each(LANGUAGES, function(ISO3166, nextLang) {
if (nextLang !== language) {
var langUrl = BASE + '/' + nextLang + url;
xUrl.ele('xhtml:link')
.att({
rel: 'alternate',
hreflang: ISO3166,
href: langUrl,
});
}
});
});
}
@osv
Copy link
Author

osv commented Feb 8, 2016

It produce:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
  <url>
    <loc>https://EXAMPLE.com/</loc>
    <changefreq>daily</changefreq>
    <priority>0.9</priority>
    <xhtml:link rel="alternate" hreflang="en" href="https://EXAMPLE.com/en/"/>
    <xhtml:link rel="alternate" hreflang="ru" href="https://EXAMPLE.com/ru/"/>
    <xhtml:link rel="alternate" hreflang="si" href="https://EXAMPLE.com/sv/"/>
    <xhtml:link rel="alternate" hreflang="fi" href="https://EXAMPLE.com/fi/"/>
    <xhtml:link rel="alternate" hreflang="tr" href="https://EXAMPLE.com/tr/"/>
    <xhtml:link rel="alternate" hreflang="gr" href="https://EXAMPLE.com/el/"/>
  </url>
<!-- ... -->
    <loc>https://EXAMPLE.com/gr/support</loc>
    <changefreq>weekly</changefreq>
    <xhtml:link rel="alternate" hreflang="en" href="https://EXAMPLE.com/en/support"/>
    <xhtml:link rel="alternate" hreflang="ru" href="https://EXAMPLE.com/ru/support"/>
    <xhtml:link rel="alternate" hreflang="si" href="https://EXAMPLE.com/sv/support"/>
    <xhtml:link rel="alternate" hreflang="fi" href="https://EXAMPLE.com/fi/support"/>
    <xhtml:link rel="alternate" hreflang="tr" href="https://EXAMPLE.com/tr/support"/>
    <xhtml:link rel="alternate" hreflang="gr" href="https://EXAMPLE.com/el/support"/>
  </url>
  <url>
    <loc>https://EXAMPLE.com/gr/terms-and-conditions</loc>
    <changefreq>weekly</changefreq>
    <xhtml:link rel="alternate" hreflang="en" href="https://EXAMPLE.com/en/terms-and-conditions"/>
    <xhtml:link rel="alternate" hreflang="ru" href="https://EXAMPLE.com/ru/terms-and-conditions"/>
    <xhtml:link rel="alternate" hreflang="si" href="https://EXAMPLE.com/sv/terms-and-conditions"/>
    <xhtml:link rel="alternate" hreflang="fi" href="https://EXAMPLE.com/fi/terms-and-conditions"/>
    <xhtml:link rel="alternate" hreflang="tr" href="https://EXAMPLE.com/tr/terms-and-conditions"/>
    <xhtml:link rel="alternate" hreflang="gr" href="https://EXAMPLE.com/el/terms-and-conditions"/>
  </url>
</urlset>

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