From 07125f900d02e73520fa5a8284723f55826a0af3 Mon Sep 17 00:00:00 2001 From: Sacha Greif Date: Wed, 1 Apr 2015 11:00:31 +0900 Subject: [PATCH] Bring SEO features back into core and refactor SEO package into sitemap package --- .meteor/packages | 5 ++- .meteor/versions | 2 +- client/main.js | 29 +++++++++++++- collections/settings.js | 9 +++++ i18n/en.i18n.json | 1 + lib/router/filters.js | 37 +++++++++++++++--- lib/router/posts.js | 6 +-- lib/router/users.js | 2 +- packages/telescope-daily/lib/routes.js | 2 +- packages/telescope-seo/i18n/en.i18n.json | 3 -- packages/telescope-seo/lib/routes.js | 29 -------------- packages/telescope-seo/lib/seo.js | 13 ------- packages/telescope-seo/package-tap.i18n | 5 --- packages/telescope-seo/package.js | 38 ------------------- packages/telescope-singleday/lib/routes.js | 2 +- .../.gitignore | 0 .../lib/server/sitemaps.js | 0 packages/telescope-sitemap/package.js | 22 +++++++++++ .../versions.json | 0 19 files changed, 102 insertions(+), 103 deletions(-) delete mode 100644 packages/telescope-seo/i18n/en.i18n.json delete mode 100644 packages/telescope-seo/lib/routes.js delete mode 100644 packages/telescope-seo/lib/seo.js delete mode 100644 packages/telescope-seo/package-tap.i18n delete mode 100644 packages/telescope-seo/package.js rename packages/{telescope-seo => telescope-sitemap}/.gitignore (100%) rename packages/{telescope-seo => telescope-sitemap}/lib/server/sitemaps.js (100%) create mode 100644 packages/telescope-sitemap/package.js rename packages/{telescope-seo => telescope-sitemap}/versions.json (100%) diff --git a/.meteor/packages b/.meteor/packages index 7ac4da1b7..fd42aef2e 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -54,6 +54,7 @@ aslagle:reactive-table aramk:tinycolor fortawesome:fontawesome fourseven:scss +manuelschoebel:ms-seo # Testing @@ -90,7 +91,7 @@ telescope-releases telescope-getting-started telescope-subscribe-to-posts telescope-tagline-banner +telescope-sitemap +telescope-messages # Custom Packages -telescope-seo -telescope-messages diff --git a/.meteor/versions b/.meteor/versions index cf06ef0d3..81ea450a9 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -133,8 +133,8 @@ telescope-post-by-feed@0.0.1 telescope-releases@0.1.0 telescope-rss@0.0.0 telescope-search@0.0.0 -telescope-seo@0.0.5 telescope-singleday@0.1.0 +telescope-sitemap@0.0.5 telescope-subscribe-to-posts@0.1.0 telescope-tagline-banner@0.1.0 telescope-tags@0.0.0 diff --git a/client/main.js b/client/main.js index 3c807bd7a..78032a701 100644 --- a/client/main.js +++ b/client/main.js @@ -12,4 +12,31 @@ Meteor.startup(function () { $('#rss-link').attr('title', i18n.t('new_posts')); }); -// AutoForm.debug(); \ No newline at end of file +// AutoForm.debug(); + +Meteor.startup(function() { + + var seoProperties = { + meta: {}, + og: {} + } + + var title = getSetting("title", "Telescope"); + if (!!getSetting("tagline")) { + title += ": "+getSetting("tagline"); + } + + seoProperties.title = title; + + if (!!getSetting("description")) { + seoProperties.meta.description = getSetting("description"); + seoProperties.og.description = getSetting("description"); + } + + if (!!getSetting("siteImage")) { + seoProperties.og.image = getSetting("siteImage"); + } + + SEO.config(seoProperties); + +}); \ No newline at end of file diff --git a/collections/settings.js b/collections/settings.js index 947eaa881..8bd4f018e 100644 --- a/collections/settings.js +++ b/collections/settings.js @@ -30,6 +30,15 @@ settingsSchemaObject = { instructions: 'A short description used for SEO purposes.' } }, + siteImage: { + type: String, + optional: true, + regEx: SimpleSchema.RegEx.Url, + autoform: { + group: "general", + instructions: "URL to an image for the open graph image tag for all pages" + } + }, navLayout: { type: String, optional: true, diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 851cf72dd..e26091c91 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -62,6 +62,7 @@ "faviconUrl": "Favicon URL", "mailURL": "MailURL", "postsLayout": "Posts Layout", + "siteImage": "Site Image", // Settings Fieldsets "general": "General", diff --git a/lib/router/filters.js b/lib/router/filters.js index 382591c0a..e7e818a6f 100644 --- a/lib/router/filters.js +++ b/lib/router/filters.js @@ -131,10 +131,36 @@ Router._filters = { } }, - setTitle: function () { - // if getTitle is set, use it. Otherwise default to site title. - var title = (typeof this.getTitle === 'function') ? this.getTitle() : getSetting("title", "Telescope"); - document.title = title; + setSEOProperties: function () { + + var props = {meta: {}, og: {}}; + var title = this.getTitle && this.getTitle(); + var description = this.getDescription && this.getDescription(); + var image = getSetting("siteImage"); + + if (!!title) { + props.title = title + " | " + getSetting("title"); + } + if (!!description) { + props.meta.description = description; + props.og.description = description; + } + if (!!image) { + props.og.image = image; + } + console.log(props) + + SEO.set(props); + + }, + + setCanonical: function () { + // note: disabled for now because the code below erases the page title + + // var post = Posts.findOne(this.params._id); + // if (post) { + // SEO.set({link: {canonical: getPostPageUrl(post)}}); + // } } }; @@ -193,7 +219,8 @@ Meteor.startup( function (){ // Router.onAfterAction(filters.resetScroll, {except:['posts_top', 'posts_new', 'posts_best', 'posts_pending', 'posts_category', 'all-users']}); Router.onAfterAction(analyticsInit); // will only run once thanks to _.once() Router.onAfterAction(analyticsRequest); // log this request with mixpanel, etc - Router.onAfterAction(filters.setTitle); + Router.onAfterAction(filters.setSEOProperties); + Router.onAfterAction(filters.setCanonical, {only: ["post_page", "post_page_with_slug"]}); // Unload Hooks diff --git a/lib/router/posts.js b/lib/router/posts.js index b7451398b..93486d357 100644 --- a/lib/router/posts.js +++ b/lib/router/posts.js @@ -67,7 +67,7 @@ PostsListController = RouteController.extend({ }, getTitle: function () { - return i18n.t(this.view) + ' - ' + getSetting('title', "Telescope"); + return i18n.t(this.view); }, getDescription: function () { @@ -98,7 +98,7 @@ Meteor.startup(function () { getTitle: function () { var title = getSetting('title', 'Telescope'); var tagline = getSetting('tagline'); - var fullTitle = !!tagline ? title + ' – ' + tagline : title ; + var fullTitle = !!tagline ? title + ': ' + tagline : title ; return fullTitle; } }); @@ -143,7 +143,7 @@ PostPageController = RouteController.extend({ getTitle: function () { if (!!this.post()) - return this.post().title + ' - ' + getSetting('title', "Telescope"); + return this.post().title; }, onBeforeAction: function() { diff --git a/lib/router/users.js b/lib/router/users.js index ecffa7486..525a8a1ab 100644 --- a/lib/router/users.js +++ b/lib/router/users.js @@ -26,7 +26,7 @@ UserPageController = RouteController.extend({ }, getTitle: function () { - return getDisplayName(this.getUser()) + ' - ' + getSetting('title', "Telescope"); + return getDisplayName(this.getUser()); }, getDescription: function () { diff --git a/packages/telescope-daily/lib/routes.js b/packages/telescope-daily/lib/routes.js index 8a1980aa5..53352f260 100644 --- a/packages/telescope-daily/lib/routes.js +++ b/packages/telescope-daily/lib/routes.js @@ -31,7 +31,7 @@ PostsDailyController = RouteController.extend({ }, getTitle: function () { - return i18n.t('daily') + ' - ' + getSetting('title', "Telescope"); + return i18n.t('daily'); }, getDescription: function () { diff --git a/packages/telescope-seo/i18n/en.i18n.json b/packages/telescope-seo/i18n/en.i18n.json deleted file mode 100644 index ec6fe63c2..000000000 --- a/packages/telescope-seo/i18n/en.i18n.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "siteImage": "Site Image" -} diff --git a/packages/telescope-seo/lib/routes.js b/packages/telescope-seo/lib/routes.js deleted file mode 100644 index 106f4e8a0..000000000 --- a/packages/telescope-seo/lib/routes.js +++ /dev/null @@ -1,29 +0,0 @@ -Meteor.startup(function() { - // Inject SEO tags. - Router.onAfterAction(function() { - var props = {meta: {}, og: {}}; - var title = this.getTitle && this.getTitle(); - var description = this.getDescription && this.getDescription(); - var image = getSetting("siteImage"); - if (title) { - props.og.title = title; - } - if (description) { - props.meta.description = description; - props.og.description = description; - } - if (image) { - props.og.image = image; - } - SEO.set(props); - }); - - // Add canonical URL to post pages - Router.onAfterAction(function() { - var post = Posts.findOne(this.params._id); - if (post) { - SEO.set({link: {canonical: getPostPageUrl(post)}}); - } - }, {only: ["post_page", "post_page_with_slug"]}); - -}); diff --git a/packages/telescope-seo/lib/seo.js b/packages/telescope-seo/lib/seo.js deleted file mode 100644 index e12df02a0..000000000 --- a/packages/telescope-seo/lib/seo.js +++ /dev/null @@ -1,13 +0,0 @@ -// Add SEO settings. -addToSettingsSchema.push({ - propertyName: "siteImage", - propertySchema: { - type: String, - optional: true, - regEx: SimpleSchema.RegEx.Url, - autoform: { - group: "general", - instructions: "URL to an image for the open graph image tag for all pages" - } - } -}); \ No newline at end of file diff --git a/packages/telescope-seo/package-tap.i18n b/packages/telescope-seo/package-tap.i18n deleted file mode 100644 index 7e604228b..000000000 --- a/packages/telescope-seo/package-tap.i18n +++ /dev/null @@ -1,5 +0,0 @@ -{ - "translation_function_name": "__", - "helper_name": "_", - "namespace": "project" -} diff --git a/packages/telescope-seo/package.js b/packages/telescope-seo/package.js deleted file mode 100644 index 56e66f02e..000000000 --- a/packages/telescope-seo/package.js +++ /dev/null @@ -1,38 +0,0 @@ -Package.describe({ - name: "telescope-seo", - summary: "SEO extensions for Telescope", - version: "0.0.5" -}); - -Package.onUse(function(api) { - api.use([ - "templating", - "underscore", - "aldeed:simple-schema", - "tap:i18n", - "iron:router", - "telescope-lib", - "telescope-base", - "telescope-i18n", - "manuelschoebel:ms-seo@0.4.1", - "gadicohen:sitemaps@0.0.20" - ]); - - // both - api.addFiles([ - "lib/routes.js", - "lib/seo.js", - "package-tap.i18n" - ], ['client', 'server']); - - // server - api.addFiles([ - "lib/server/sitemaps.js" - ], ["server"]); - - // i18n - api.add_files([ - "i18n/en.i18n.json" - ], ["client", "server"]); - -}); diff --git a/packages/telescope-singleday/lib/routes.js b/packages/telescope-singleday/lib/routes.js index f1980bddc..ec185a4ab 100644 --- a/packages/telescope-singleday/lib/routes.js +++ b/packages/telescope-singleday/lib/routes.js @@ -15,7 +15,7 @@ PostsSingledayController = RouteController.extend({ }, getTitle: function () { - return i18n.t('single_day') + ' - ' + getSetting('title', 'Telescope'); + return i18n.t('single_day'); }, getDescription: function () { diff --git a/packages/telescope-seo/.gitignore b/packages/telescope-sitemap/.gitignore similarity index 100% rename from packages/telescope-seo/.gitignore rename to packages/telescope-sitemap/.gitignore diff --git a/packages/telescope-seo/lib/server/sitemaps.js b/packages/telescope-sitemap/lib/server/sitemaps.js similarity index 100% rename from packages/telescope-seo/lib/server/sitemaps.js rename to packages/telescope-sitemap/lib/server/sitemaps.js diff --git a/packages/telescope-sitemap/package.js b/packages/telescope-sitemap/package.js new file mode 100644 index 000000000..d3315a0b1 --- /dev/null +++ b/packages/telescope-sitemap/package.js @@ -0,0 +1,22 @@ +Package.describe({ + name: "telescope-sitemap", + summary: "Sitemap package for Telescope", + version: "0.0.5" +}); + +Package.onUse(function(api) { + api.use([ + "templating", + "underscore", + "iron:router", + "telescope-lib", + "telescope-base", + "gadicohen:sitemaps@0.0.20" + ]); + + // server + api.addFiles([ + "lib/server/sitemaps.js" + ], ["server"]); + +}); diff --git a/packages/telescope-seo/versions.json b/packages/telescope-sitemap/versions.json similarity index 100% rename from packages/telescope-seo/versions.json rename to packages/telescope-sitemap/versions.json