Тонкости настройки движка Ghost

Ghost — быстрый и простой блоговый движок с минималистичным интерфейсом. Ghost включает в себя только самый необходимый функционал для ведения блога. Движок написан на Node.js, имеет MIT лицензию, исходники доступны на гитхабе.
В версии Ghost 0.5.6 (на момент этой публикации) отсутствует ряд желательных настроек. Предлагается обзор фиксов к ним.

Внимание! Часть действий производится над ядром движка. Вы выполняете их на свой страх и риск.
После обновления версии Ghost доработки могут исчезнуть или потерять актуальность.
Статья актуальна для версий 0.5.5, 0.5.6

1. Русские даты записей в Ghost

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

Открываем файл core/server/helpers/ghost_head.js и в конце файла, перед существующей строкой module.exports = ghost_head; добавляем moment.locale('ru');


Сохраняем, перезапускаем Ghost. Теперь даты русские.

2. Убрать данные об авторе из разметки

Ghost использует разметку Open Graph для поисковых систем. Каждая статья содержит информацию об авторе внутри <head></head>, а именно: никнейм и адрес картинки-аватара.

В случае анонимного блога эту информацию было бы неплохо исключить.
Для этого надо поправить объект schema в файле core/server/helpers/ghost_head.js
(необходимо закомментировать свойство author).

schema = {
    '@context': 'http://schema.org',
    '@type': 'Article',
    publisher: title,
    //author: {
    //    '@type': 'Person',
    //    name: self.post.author.name,
    //    image: authorImage,
    //    url: authorUrl,
    //    sameAs: self.post.author.website
    //},
    headline: metaTitle,
    url: url,
    datePublished: publishedDate,
    dateModified: modifiedDate,
    image: coverImage,
    keywords: keywords,
    description: metaDescription
    };

3. Раздельные мета-теги

В текущей версии 0.5.6 нет возможностей управления мета-тегами keywords и description для каждой записи отдельно.
Приводится изящный способ решения проблемы. Поправьте <head></head> в файле default.hbs вашего шаблона:

{{#unless post}}
	{{#unless tag}}
<meta name="description" content="{{@blog.description}}">
<meta name="keywords" content="программирование, веб, javascript">
    {{/unless}}
{{/unless}}

{{#post}}
<meta name="description" content="{{title}}">
<meta name="keywords" content="{{tags separator="," autolink="false"}}">
{{/post}}

{{#tag}}
<meta name="description" content="Все записи с тегом &laquo;{{name}}&raquo;">
<meta name="keywords" content="{{name}}">
{{/tag}}
  • На главной странице (не пост и не поиск по тегу) выводится описание из настроек блога, а ключевые слова добавляются вручную в шаблоне.

  • В случае, если это запись блога — выводится заголовок поста как описание и набор тегов как ключевые слова.

  • Если же страница — поиск по тегу, то как описание будет текст:

    Все записи с тегом «программирование»

    Ключевое слово будет одно — тег, по которому производится поиск.

4. Удаление алиасов для админ-панели

По-умолчанию админ-панель движка находится по адресу /ghost. Однако Ghost выполняет редирект в админку также со следующих адресов:

  • ghost-admin
  • admin
  • wp-admin
  • dashboard
  • signin
  • login

Те, кто хоть раз смотрел в логи apache/nginx знают как популярен перебор адресов админок с целью получения незаконного доступа.

Для отключения мульти-адресов админки необходимо в файле core/server/routes/frontend.js закомментировать следующий код:

// redirect to /ghost and let that do the authentication to prevent redirects to /ghost//admin etc.
router.get(/^\/((ghost-admin|admin|wp-admin|dashboard|signin|login)\/?)$/, function (req, res) {
    /*jslint unparam:true*/
    res.redirect(subdir + '/ghost/');
});

Рекомендую к прочтению также «Конфигурация nginx для работы с Node.js и PM2»