feat: seo meta + page titles
This commit is contained in:
@@ -3,11 +3,13 @@
|
||||
const express = require('express')
|
||||
const router = express.Router()
|
||||
const moment = require('moment')
|
||||
const _ = require('lodash')
|
||||
|
||||
/**
|
||||
* Login form
|
||||
*/
|
||||
router.get('/login', function (req, res, next) {
|
||||
_.set(res.locals, 'pageMeta.title', 'Login')
|
||||
res.render('login')
|
||||
})
|
||||
|
||||
@@ -23,6 +25,7 @@ router.get('/logout', function (req, res) {
|
||||
* Register form
|
||||
*/
|
||||
router.get('/register', async (req, res, next) => {
|
||||
_.set(res.locals, 'pageMeta.title', 'Register')
|
||||
const localStrg = await WIKI.models.authentication.getStrategy('local')
|
||||
if (localStrg.selfRegistration) {
|
||||
res.render('register')
|
||||
|
@@ -1,6 +1,7 @@
|
||||
const express = require('express')
|
||||
const router = express.Router()
|
||||
const pageHelper = require('../helpers/page')
|
||||
const _ = require('lodash')
|
||||
|
||||
/* global WIKI */
|
||||
|
||||
@@ -16,10 +17,13 @@ router.get(['/e', '/e/*'], async (req, res, next) => {
|
||||
isPrivate: false
|
||||
})
|
||||
if (page) {
|
||||
_.set(res.locals, 'pageMeta.title', `Edit ${page.title}`)
|
||||
_.set(res.locals, 'pageMeta.description', page.description)
|
||||
page.mode = 'update'
|
||||
page.isPublished = (page.isPublished === true || page.isPublished === 1) ? 'true' : 'false'
|
||||
page.content = Buffer.from(page.content).toString('base64')
|
||||
} else {
|
||||
_.set(res.locals, 'pageMeta.title', `New Page`)
|
||||
page = {
|
||||
path: pageArgs.path,
|
||||
localeCode: pageArgs.locale,
|
||||
@@ -35,6 +39,7 @@ router.get(['/e', '/e/*'], async (req, res, next) => {
|
||||
* Administration
|
||||
*/
|
||||
router.get(['/a', '/a/*'], (req, res, next) => {
|
||||
_.set(res.locals, 'pageMeta.title', 'Admin')
|
||||
res.render('admin')
|
||||
})
|
||||
|
||||
@@ -42,6 +47,7 @@ router.get(['/a', '/a/*'], (req, res, next) => {
|
||||
* Profile
|
||||
*/
|
||||
router.get(['/p', '/p/*'], (req, res, next) => {
|
||||
_.set(res.locals, 'pageMeta.title', 'User Profile')
|
||||
res.render('profile')
|
||||
})
|
||||
|
||||
@@ -57,6 +63,8 @@ router.get(['/h', '/h/*'], async (req, res, next) => {
|
||||
isPrivate: false
|
||||
})
|
||||
if (page) {
|
||||
_.set(res.locals, 'pageMeta.title', page.title)
|
||||
_.set(res.locals, 'pageMeta.description', page.description)
|
||||
res.render('history', { page })
|
||||
} else {
|
||||
res.redirect(`/${pageArgs.path}`)
|
||||
@@ -75,6 +83,8 @@ router.get(['/s', '/s/*'], async (req, res, next) => {
|
||||
isPrivate: false
|
||||
})
|
||||
if (page) {
|
||||
_.set(res.locals, 'pageMeta.title', page.title)
|
||||
_.set(res.locals, 'pageMeta.description', page.description)
|
||||
res.render('source', { page })
|
||||
} else {
|
||||
res.redirect(`/${pageArgs.path}`)
|
||||
@@ -93,6 +103,8 @@ router.get('/*', async (req, res, next) => {
|
||||
isPrivate: false
|
||||
})
|
||||
if (page) {
|
||||
_.set(res.locals, 'pageMeta.title', page.title)
|
||||
_.set(res.locals, 'pageMeta.description', page.description)
|
||||
const sidebar = await WIKI.models.navigation.getTree({ cache: true })
|
||||
res.render('page', { page, sidebar })
|
||||
} else if (pageArgs.path === 'home') {
|
||||
|
@@ -30,7 +30,6 @@ module.exports = {
|
||||
WIKI.config.company = args.company
|
||||
WIKI.config.seo = {
|
||||
description: args.description,
|
||||
keywords: args.keywords,
|
||||
robots: args.robots,
|
||||
ga: args.ga
|
||||
}
|
||||
|
@@ -27,7 +27,6 @@ type SiteMutation {
|
||||
host: String!
|
||||
title: String!
|
||||
description: String!
|
||||
keywords: String!
|
||||
robots: [String]!
|
||||
ga: String!
|
||||
company: String!
|
||||
@@ -47,7 +46,6 @@ type SiteConfig {
|
||||
host: String!
|
||||
title: String!
|
||||
description: String!
|
||||
keywords: String!
|
||||
robots: [String]!
|
||||
ga: String!
|
||||
company: String!
|
||||
|
@@ -100,6 +100,12 @@ module.exports = async () => {
|
||||
app.locals.moment = require('moment')
|
||||
app.locals.moment.locale(WIKI.config.lang.code)
|
||||
app.locals.config = WIKI.config
|
||||
app.locals.pageMeta = {
|
||||
title: '',
|
||||
description: WIKI.config.description,
|
||||
image: '',
|
||||
url: '/'
|
||||
}
|
||||
|
||||
// ----------------------------------------
|
||||
// HMR (Dev Mode Only)
|
||||
|
@@ -15,6 +15,7 @@ module.exports = function (req, res, next) {
|
||||
let query = req.url.slice(req.path.length) || ''
|
||||
res.redirect(301, req.path.slice(0, -1) + query)
|
||||
} else {
|
||||
_.set(res.locals, 'pageMeta.url', `${WIKI.config.host}${req.path}`)
|
||||
return next()
|
||||
}
|
||||
}
|
||||
|
@@ -133,7 +133,6 @@ module.exports = () => {
|
||||
_.set(WIKI.config, 'public', false)
|
||||
_.set(WIKI.config, 'seo', {
|
||||
description: '',
|
||||
keywords: '',
|
||||
robots: ['index', 'follow'],
|
||||
ga: ''
|
||||
})
|
||||
|
@@ -7,7 +7,17 @@ html
|
||||
meta(name='theme-color', content='#333333')
|
||||
meta(name='msapplication-TileColor', content='#333333')
|
||||
meta(name='msapplication-TileImage', content='/favicons/ms-icon-144x144.png')
|
||||
title= config.title
|
||||
|
||||
title= pageMeta.title + ' | ' + config.title
|
||||
|
||||
//- SEO / OpenGraph
|
||||
meta(name='description', content=pageMeta.description)
|
||||
meta(property='og:title', content=pageMeta.title)
|
||||
meta(property='og:type', content='website')
|
||||
meta(property='og:description', content=pageMeta.description)
|
||||
meta(property='og:image', content=pageMeta.image)
|
||||
meta(property='og:url', content=pageMeta.url)
|
||||
meta(property='og:site_name', content=config.title)
|
||||
|
||||
//- Favicon
|
||||
each favsize in [57, 60, 72, 76, 114, 120, 144, 152, 180]
|
||||
@@ -17,9 +27,9 @@ html
|
||||
link(rel='icon', type='image/png', sizes=favsize + 'x' + favsize, href='/favicons/favicon-' + favsize + 'x' + favsize + '.png')
|
||||
link(rel='manifest', href='/manifest.json')
|
||||
|
||||
//- Site Lang
|
||||
//- Site Properties
|
||||
script.
|
||||
var siteConfig = !{JSON.stringify({ title: config.title, theme: config.theming.theme, darkMode: config.theming.darkMode, lang: config.lang.code })}
|
||||
var siteConfig = !{JSON.stringify({ title: config.title, theme: config.theming.theme, darkMode: config.theming.darkMode, lang: config.lang.code, company: config.company })}
|
||||
|
||||
//- CSS
|
||||
link(type='text/css', rel='stylesheet', href='https://fonts.googleapis.com/icon?family=Roboto:400,500,700|Varela+Round|Source+Code+Pro:400,700|Material+Icons')
|
||||
|
Reference in New Issue
Block a user