Красивые адреса страниц на Jekyll

Адреса материалов можно настраивать тремя способами:

  • Меняя путь к исходному файлу материала. Например, файл /blog/hello.md будет сконвертирован в /_site/blog/hello.html
  • Меняя пермалинк во фронтматтере у файла страницы. Где бы исходник материала не находился, можно задать
    ` — permalink: /blog/hello.html — ` и он будет конвертирован в файл доступный по указанному адресу.
  • В настройках генератора _config.yml
    самый общий способ. Удобно выбрать страницы по определённому признаку и прописать для них настройки адресов по умолчанию. Получаем такие плюсы:
    • Исходные файлы упорядочены по папкам, как нам удобно
    • Адреса при этом красивые
    • Можем при необходимости поменять их быстро и везде. И минус: настраивать сложнее, можно по неосторожности переместить все материалы сайта, поломав внутренние и внешние ссылки, что плохо для СЕО и вообще.

Если с первыми двумя способами всё понятно, то третий заработал у меня не сразу. Я хотел, чтобы страницы были доступны по адресам вида /about.html, а страницы блога /blog/hello.html. Первым делом попробовал задать пермалинки так же, как и другие дефолтные метаданные: ` defaults:

  • scope: type: posts values: permalink: /blog/:title ` Но джекилл воспринял :title не как переменную, а как текст, в результати все страницы получили один и тож же адрес “/blog/:title”. Я так и не понял, баг это или фича. Заработал другой подход: ` permalink: /:categories/:title ` Тут мы задаём пермалинк для всех материалов сайта. Если у страницы есть категория, то она будет лежать в папке с названием этой категории. Отлично! Остаётся добавить категорию blog для всех постов по умолчанию
permalink: /:categories/:title
defaults:
  - 
    scope:
      type: posts
    values:
      categories: blog