en
Переезд личного блога с Eleventy на Nuxt Content

Переезд личного блога с Eleventy на Nuxt Content

Зачем переезжать?

Чем ещё заняться в отпуске, кроме отдыха? Конечно — давно запланированным переездом личного блога на Nuxt Content.

Некоторое время назад решил переехать с Eleventy и посматривал в сторону Next.js, Nuxt и Astro. В итоге выбрал Nuxt потому, что хотелось быть ближе к текущему рабочему стеку на Vue.js. И ещё в Nuxt существует модуль Nuxt Content, который позволяет организовать file-based CMS и работать с каталогом markdown файлов.

Сам Nuxt меня привлёк относительной простотой и возможностью простой настройки SEO оптимизации для поисковых систем. Работая с Drupal мне приходилось много времени проводить над скучной настройкой метатегов и микроданных, поэтому в новом движке хотелось уменьшить время настройки SEO до минимума и сконцентрироваться на самом процессе работы над блогом.

Чем меня лично не устраивал Eleventy?

В Eleventy версии 0.X приходилось использовать множество костылей, чтобы заставить нормально работать многоязычность (i18n). Также могу отметить неудобную работу с темплейтами и CSS файлами для отдельных компонентов.

Как с этим обстоят дела в версии Eleventy 1.X не разбирался. Помнится, что основной плагин, с помощью которого осуществлялась интернационализация был давно заброшен и не поддерживался. Повторно проходить через костыли не хотелось, поэтому решил менять стек.

Основные вызовы Nuxt Content

Официальный вебсайт Nuxt Content

i18n

Было непросто правильно настроить i18n. Из документации неочевидно, что настройки языков нужно добавлять сразу в 3-х местах: @nuxtjs/i18n настраивается отдельно, для Vue I18n существует отдельный конфигурационный файл. И также надо не забыть добавить переключение языка в Nuxt Content. Причём настройки, такие как список языков и язык по умолчанию необходимо писать 3 раза. По сути эти настройки пересекаются. Почему бы это не унифицировать, непонятно.

RSS feed

Не нашёл рабочего модуля, который полностью делает всю магию, поэтому пришлось написать получение данных для RSS вручную. В этой статье я описал, как подключить RSS ленту к сайту на Nuxt Content.

Sitemap

С реализацией sitemap.xml попробовал несколько сторонних модулей и только один из них заработал. Пришлось немного подтюнить настройки, но в конце концов всё получилось.

Дубликаты страниц со слэшем в конце

В Nuxt 3 нет простого способа сделать редиректы со ссылок с завершающим слэшем, как в Nuxt 2, а редирект с помощью Netlify не отдавал код 301 для страницы. Пришлось писать для этого отдельный middleware. Вот ссылка на пост с решением.

Что понравилось в Nuxt

Работа с i18n

После некоторой настройки всё начинает очень даже хорошо работать. Другие модули для SEO — Sitemap, Schema.org, подхватывают настройки языка и делают всю магию под капотом. В Eleventy приходилось это же делать вручную.

Работа с Content

Ничем не отличается от работы с контентом в Eleventy. Разве что наличием специального MDC синтаксиса, с помощью которого можно втыкать компоненты Vue прямо в файлы markdown. В настройках можно включить Document-Driven mode, что значит, что не нужно писать запросы на получение данных. Nuxt Content делает это сам, требуется просто указать, из какой папки эти данные брать. В моём случае этот режим не подошёл. Насколько я понял, это работает только для очень простых сайтов, без i18n.

Работа с изображениями

Для этого пригодился модуль Nuxt Image. Отличное решение для оптимизации и масштабирования изображений. Автоматически сжимает, делает обрезку картинок и складывает в отдельные папки кэша на сервере. Вся магия делается в режиме сборки.

Пока не копал в сторону конвертации изображений в webp, avif. В будущем обязательно это сделаю.

Schema.org

Модуль для Schema.org сильно упрощает работу с микроданными. В наличии есть шаблоны для большинства схем, причём нужно только указать основные значения, всё остальное модуль сделает сам.

Server Side Rendering

Улучшает производительность сайта и делает его оптимальным для SEO оптимизации.

Color mode

Использование цветовых схем в Nuxt работает проще простого. Для этого используется модуль Nuxt Color Mode. После простой настройки всё работает как часы. В Eleventy приходилось писать переключение темы вручную.

CI/CD

Отличная интеграция с Netlify. По сути ничего не нужно делать, просто указать репозиторий Git, дальше всё происходит автоматически.

Что не понравилось в Nuxt

  • В каталоге множество модулей. Часть из них работает, часть нет. Часть давно мертвы, хотя и работают (пока). Не всегда указывается для какой версии Nuxt этот модуль написан, приходится каждый раз лезть в исходники и смотреть.
  • Неочевидная настройка i18n. Повторяющиеся настройки в 3-х местах.
  • При переключении i18n наблюдались проблемы с инициализацией сторонних скриптов и Vue плагинов. Частично с этим разобрался.
  • Нет простого способа из коробки сделать редиректы со ссылок с завершающим слэшем, как было в Nuxt 2. Наличие таких дублей страницы, негативно влияет на SEO.

Итог

Главная страница моего блога

Nuxt Content — хорошее решение для Git-based блога. Новый функционал легко наращивается сторонними модулями, или дописывается вручную. По производительности блога не заметил различий с Eleventy — server side rendering справляется со своей задачей. Большой плюс Nuxt — это возможность добавление динамического контента — лайков или комментариев.

В отличии от Eleventy, у Nuxt более высокий порог входа. Если блог на Eleventy может создать обычный верстальщик, то для Nuxt уже необходимо на начальном уровне понимать серверный рендеринг, и хотя бы основы работы с Vue.js.

Больше информации о Nuxt и Nuxt Content можно почерпнуть на официальных сайтах.


Ссылки:

  • Eleventy — попробуйте найти здесь кнопку документации, надеюсь у вас получится 😃
  • Nuxt
  • Nuxt Content
Последнее обновление: