diff --git a/core/client/html/sitemap-xsl.html b/core/client/html/sitemap-xsl.html deleted file mode 100644 index e10f945e1f..0000000000 --- a/core/client/html/sitemap-xsl.html +++ /dev/null @@ -1,138 +0,0 @@ - - - XML Sitemap - - - - -
-

XML Sitemap

-

- This is a sitemap generated by Ghost to allow search engines to discover this blog's content. -

- - - - - - - - - - - - - - - - - - - -
SitemapLast Modified
- - - -
-
- -

← Back to index

- - - - - - - - - - - - - - - - - - - - - - - -
URL ( total)PrioImagesCh. Freq.Last Mod.
- - - - - - - - - - - - - - -
-

← Back to index

-
-
- - - - - diff --git a/core/server/config/url.js b/core/server/config/url.js index 928aeeb237..6e11583bfb 100644 --- a/core/server/config/url.js +++ b/core/server/config/url.js @@ -148,6 +148,9 @@ function urlFor(context, data, absolute) { } return urlPath; + } else if (context === 'sitemap-xsl') { + absolute = true; + urlPath = '/sitemap.xsl'; } // other objects are recognised but not yet supported } else if (_.isString(context) && _.indexOf(_.keys(knownPaths), context) !== -1) { diff --git a/core/server/data/sitemap/base-generator.js b/core/server/data/sitemap/base-generator.js index adcc1971e1..ed90add278 100644 --- a/core/server/data/sitemap/base-generator.js +++ b/core/server/data/sitemap/base-generator.js @@ -1,9 +1,9 @@ - -var _ = require('lodash'), - xml = require('xml'), - moment = require('moment'), - api = require('../../api'), - config = require('../../config'), +var _ = require('lodash'), + xml = require('xml'), + moment = require('moment'), + api = require('../../api'), + config = require('../../config'), + utils = require('./utils'), Promise = require('bluebird'), CHANGE_FREQ = 'weekly', XMLNS_DECLS; @@ -87,9 +87,7 @@ _.extend(BaseSiteMapGenerator.prototype, { }; // Return the xml - return xml(data, { - declaration: true - }); + return utils.getDeclarations() + xml(data); }, updateXmlFromNodes: function (urlElements) { diff --git a/core/server/data/sitemap/handler.js b/core/server/data/sitemap/handler.js index 45f08e07dd..49b823e4e4 100644 --- a/core/server/data/sitemap/handler.js +++ b/core/server/data/sitemap/handler.js @@ -1,5 +1,5 @@ -var _ = require('lodash'), - utils = require('../utils'), +var _ = require('lodash'), + utils = require('../../utils'), sitemap = require('./index'); // Responsible for handling requests for sitemap files @@ -7,7 +7,7 @@ module.exports = function (blogApp) { var resourceTypes = ['posts', 'authors', 'tags', 'pages'], verifyResourceType = function (req, res, next) { if (!_.contains(resourceTypes, req.param('resource'))) { - return res.send(404); + return res.sendStatus(404); } next(); @@ -19,7 +19,7 @@ module.exports = function (blogApp) { // Redirect normal sitemap.xml requests to sitemap-index.xml blogApp.get('/sitemap.xml', function (req, res) { res.set({'Cache-Control': 'public, max-age=' + utils.ONE_YEAR_S}); - res.redirect(301, '/sitemap-index.xml'); + res.redirect(301, req.baseUrl + '/sitemap-index.xml'); }); blogApp.get('/sitemap-index.xml', function (req, res) { diff --git a/core/server/data/sitemap/index-generator.js b/core/server/data/sitemap/index-generator.js index 4691350053..071ee2c920 100644 --- a/core/server/data/sitemap/index-generator.js +++ b/core/server/data/sitemap/index-generator.js @@ -1,7 +1,8 @@ -var _ = require('lodash'), - xml = require('xml'), - moment = require('moment'), - config = require('../../config'), +var _ = require('lodash'), + xml = require('xml'), + moment = require('moment'), + config = require('../../config'), + utils = require('./utils'), RESOURCES, XMLNS_DECLS; @@ -27,9 +28,7 @@ _.extend(SiteMapIndexGenerator.prototype, { }; // Return the xml - return xml(data, { - declaration: true - }); + return utils.getDeclarations() + xml(data); }, generateSiteMapUrlElements: function () { diff --git a/core/server/data/sitemap/utils.js b/core/server/data/sitemap/utils.js new file mode 100644 index 0000000000..e51dd24fc2 --- /dev/null +++ b/core/server/data/sitemap/utils.js @@ -0,0 +1,13 @@ +var config = require('../../config'), + utils; + +utils = { + getDeclarations: function () { + var baseUrl = config.urlFor('sitemap-xsl'); + baseUrl = baseUrl.replace(/^(http:|https:)/, ''); + return '' + + ''; + } +}; + +module.exports = utils; diff --git a/core/server/middleware/index.js b/core/server/middleware/index.js index dce53325a8..842660d1d1 100644 --- a/core/server/middleware/index.js +++ b/core/server/middleware/index.js @@ -264,6 +264,7 @@ setupMiddleware = function (blogAppInstance, adminApp) { // Favicon blogApp.use(serveSharedFile('favicon.ico', 'image/x-icon', utils.ONE_DAY_S)); + blogApp.use(serveSharedFile('sitemap.xsl', 'text/xsl', utils.ONE_DAY_S)); // Static assets blogApp.use('/shared', express['static'](path.join(corePath, '/shared'), {maxAge: utils.ONE_HOUR_MS})); diff --git a/core/shared/sitemap.xsl b/core/shared/sitemap.xsl new file mode 100644 index 0000000000..b2620c5d07 --- /dev/null +++ b/core/shared/sitemap.xsl @@ -0,0 +1,159 @@ + + + + + + + XML Sitemap + + + + +
+

XML Sitemap

+

+ This is a sitemap generated by Ghost to allow search engines to discover this blog's content. +

+ + + + + + + + + + + + + + + + + + + +
SitemapLast Modified
+ + + +
+
+ +

← Back to index

+ + + + + + + + + + + + + + + + + + + + + + + +
URL ( total)PrioImagesCh. Freq.Last Modified
+ + + + + + + + + + + + + + +
+

← Back to index

+
+
+ + + + +
+
\ No newline at end of file