Hugo
Кратко о движке
| Семейство | hugo |
|---|---|
| Назначение | ssg |
| Лицензия | Apache-2.0 |
| Цена | бесплатно |
| Сайт | https://gohugo.io |
| Статус | проверяется |
Поиск по сайту
В самом Hugo поиска нет — его добавляет тема. Поэтому, выбирая тему для вики, смотрите, как в ней сделан поиск.
| Где работает | встроенного поиска нет |
|---|---|
| На чём построен | Варианты, которые встречаются в темах: FlexSearch (Hextra, Lotus Docs) и MiniSearch (Hugo Book), Lunr (Relearn) — небольшие библиотеки на JavaScript, ищут прямо в браузере; Fuse.js — ищет с учётом опечаток; Pagefind — отдельная программа, которая после сборки сайта сама составляет поисковый индекс. |
| Языки | FlexSearch и MiniSearch ищут на любом языке, в том числе на украинском, но формы слов не понимают: по запросу «языками» не найдёт статью со словом «языков». Lunr формы слов понимает для английского, русского и португальского, а украинский не ищет совсем. Pagefind формы слов понимает, но не для всех языков: для русского и португальского — да, для украинского — нет (украинский он ищет так же, как FlexSearch). Поэтому перед тем, как ставить Pagefind, проверьте в его документации свои языки. |
| Что можно настроить в теме | FlexSearch можно настроить так, чтобы он искал только по названиям и описаниям статей, а не по всему тексту, — но такие настройки должна давать тема. Pagefind делит индекс на небольшие части и для каждого языка делает свой, поэтому подходит и для большой вики. |
| Проверено | 2026-10-17 |
Темы
| Тема | Цена | Готовность для мультиязычного проекта | Мнение автора |
|---|---|---|---|
| Hextra — описание темы ↗ | бесплатно | вики 92 % проверено 19 из 31 сайт 93 % проверено 20 из 34 | выберу Выбрана для новой вики. Меню языков и hreflang доработаны своими шаблонами, поиск — по названию и началу статьи (режим summary). (2026-10-17) |
| Hugo Book — описание темы ↗ | бесплатно | вики 90 % проверено 19 из 31 сайт 94 % проверено 20 из 34 | можно рассмотреть Можно рассмотреть. С языками лучше всех, но боковое меню и место переключателя языков придётся переписывать. (2026-10-17) |
| Relearn — описание темы ↗ | бесплатно | вики 85 % проверено 20 из 31 сайт 90 % проверено 21 из 34 | можно рассмотреть Можно рассмотреть. С языками лучшая, но поиск не ищет по-украински — придётся менять поиск. (2026-10-17) |
| PaperMod — описание темы ↗ | бесплатно | вики 82 % проверено 19 из 31 сайт 88 % проверено 20 из 34 | не выберу Для вики не выберу — нет бокового меню, оглавление только сверху. Для каталога и блога подходит. (2026-10-17) |
| Blowfish — описание темы ↗ | бесплатно | вики 88 % проверено 19 из 31 сайт 93 % проверено 20 из 34 | не выберу Рассматривать только для одноязычных сайтов — в этом он без подводных камней. (2026-10-17) |
| Lotus Docs — описание темы ↗ | бесплатно | вики 68 % проверено 21 из 31 сайт 77 % проверено 22 из 34 | не выберу Не подходит: для нового проекта слишком много недочётов. Главное — языки (меню языков ведёт на несуществующие страницы, нет hreflang) и поиск (полный текст всех статей вшит в каждую страницу). (2026-10-17) |
Результаты по требованиям
Многие результаты задаёт сам Hugo, и они одинаковы для всех тем: языковые адреса, работа без базы данных, генерация страниц из данных. От темы зависят меню языков, hreflang, поиск и места для своего кода — их нужно проверять у каждой темы отдельно. Значок в пунктирной рамке — результат перенесён из проверки с другой темой этого движка. Наведите на значок, чтобы увидеть подробности.
| Требование | PaperMod | Blowfish | Hugo Book | Hextra | Relearn | Lotus Docs |
|---|---|---|---|---|---|---|
| Мультиязычность | ||||||
Материал можно начать на неосновном языке ml-author-any-lang | да | да | да | да | да | да |
Рубрики, теги и меню независимы по языкам ml-taxonomy-per-lang | ? | ? | ? | ? | ? | ? |
Переключатель языков показывает только существующие переводы ml-switcher-existing | доработка | да | да | доработка как доработано | да | доработка |
hreflang только на существующие переводы ml-hreflang-existing проверить ↗ | доработка как доработано | доработка | доработка | доработка как доработано | да | доработка |
Нет автостраниц с контентом основного языка ml-no-fallback-pages проверить ↗ | да | да | да | да | да | да |
Основной язык в корне, остальные с префиксом ml-default-root | да | да | да | да | да | да |
У каждого перевода свой slug ml-translated-slugs | ? | ? | ? | ? | ? | ? |
Перевод может иметь тот же slug, что и оригинал ml-same-slug | ? | ? | ? | ? | ? | ? |
Атрибут lang в нужном формате ml-html-lang | да | да | да | доработка как доработано | да | да |
Тема поддерживает выбранный плагин мультиязычности theme-i18n-compat | ? | ? | ? | ? | ? | ? |
Переводы интерфейса для en, uk, ru, pt-BR ml-ui-strings | да | да | да | доработка как доработано | доработка как доработано | доработка |
Контент доступен для автоматического перевода ИИ ml-ai-translatable | да | да | да | да | да | да |
| Статьи, навигация и поиск | ||||||
Управление боковым меню sidebar-control | нет | нет | доработка | да | да | нет |
Оглавление статьи toc-control | да | да | да | да | да | да |
Перелинковка как в DokuWiki internal-links | ? | ? | ? | ? | ? | доработка |
Таксономии (теги, рубрики, свои классификаторы) taxonomies | да | да | да | да | да | доработка |
Поиск по сайту site-search | доработка | доработка как доработано | да | да | нет | доработка как доработано |
Гибкость поиска search-replaceable | доработка | доработка | доработка | доработка | доработка | доработка |
Подсветка кода code-highlight | да | да | да | да | да | да |
Пошаговые инструкции content-steps | нет | да | да | да | нет | нет |
Свой код в шаблоны без правки темы (Inject Partials) theme-inject-partials | да | да | да | да | да | нет |
Генерация страниц из данных (pSEO) data-pages | да | да | да | да | да | да |
Визуальная админка admin-ui | ? | ? | ? | ? | ? | ? |
| SEO | ||||||
title, description и OG на уровне записи seo-meta проверить ↗ | ? | ? | ? | ? | ? | да |
sitemap с языковыми версиями seo-sitemap | ? | ? | ? | ? | ? | ? |
Корректный canonical seo-canonical проверить ↗ | ? | ? | ? | ? | доработка как доработано | ? |
Микроразметка schema.org seo-schema | да | да | доработка как доработано | доработка | да | доработка |
Полный контроль URL seo-url-control | ? | ? | ? | ? | ? | ? |
Адреса латиницей, даже если текст на кириллице seo-url-translit | ? | ? | ? | ? | ? | ? |
Скорость (Core Web Vitals) seo-cwv | ? | ? | ? | ? | ? | ? |
| Хранение и окружение | ||||||
Работает без сервера БД no-db | да | да | да | да | да | да |
Работает в окружении Nginx + PHP-FPM 8.5 runtime-php | да | да | да | да | да | да |
| Стоимость | ||||||
Стоимость (движок + тема + платные плагины) cost-total | ? | ? | ? | ? | ? | ? |
| Работа с ИИ | ||||||
Насколько хорошо ИИ работает с фреймворком ai-fluency | ? | ? | ? | ? | ? | ? |
Заметки
Многое зависит от темы, поэтому тест Hugo — это тест темы. Факты слоя engine (i18n-маршрутизация, .Translations, sitemap) проверяются один раз, у каждой темы проверяется только её слой. Проблемы тем часто обходятся переопределением partial в layouts/ без правки темы.
Из заметок (2026-09-06): у Hextra переключатель перебирает все языки, а при отсутствии
перевода ведёт на главную языка. Подтверждено на Hextra 0.13.0 тестом 2026-10-17, там же
описан обход (просмотрщик site/ этого репозитория собран на Hugo + Hextra).
История проверок
2026-10-17 — Hugo + Hextra: бразильский португальский · без вывода · в рабочем проекте
hextra 0.13.0; hugo 0.168.0;
| Требование | Результат | От чего зависит | Примечание |
|---|---|---|---|
Атрибут lang в нужном формате ml-html-lang | доработка | тема | html lang берётся из ключа языка (pt), а не из locale; исправлено копиями baseof.html (17 строк) и 404.html — одна строка, lang из locale: pt-BR |
Переводы интерфейса для en, uk, ru, pt-BR ml-ui-strings | доработка | тема | интерфейс переведён на en, uk, ru, но португальский в теме только европейский (i18n/pt.yaml: «secção», «Saltar para o conteúdo», «Projecto»); для pt-BR — свой i18n/pt.yaml в проекте, все 46 строк |
Проверено при создании нового сайта на Hextra. Обе доработки сделаны и работают: <html lang="pt-BR">, hreflang
pt-BR, кнопка «Pular para o conteúdo», поле поиска «Pesquisar…».
Прошлые проверки отмечали «интерфейс переведён на pt» как «да» — это было неверно для бразильского варианта.
2026-10-17 — Hugo + Hextra: код языка в html lang · без вывода · в рабочем проекте
hextra 0.13.0; hugo 0.168.0;
| Требование | Результат | От чего зависит | Примечание |
|---|---|---|---|
Атрибут lang в нужном формате ml-html-lang | доработка | тема | html lang берётся из ключа языка, а не из locale: для португальского lang=“pt”, а не pt-br; ru, uk, en верны. hreflang (своя доработка) — pt-br. Исправить можно только своей копией baseof.html |
Исправление прошлой проверки (2026-10-17--hugo--hextra-wiki.md): там было записано, что <html lang> берётся из
locale. В шаблоне темы baseof.html стоит .Site.Language.Lang, и сборка это подтверждает: <html lang="pt">.
Для поисковиков это мелочь — языковые версии они берут из hreflang.
2026-10-17 — Hugo + Hextra: поиск в режимах «весь текст», «начало статьи», «заголовки», «названия» · без вывода · в рабочем проекте
hextra 0.13.0; hugo 0.168.0;
| Требование | Результат | От чего зависит | Примечание |
|---|---|---|---|
Гибкость поиска search-replaceable | доработка | тема | замена: только своими копиями шаблонов; языки: любые, формы слов не понимает; где искать: настройкой params.search.flexsearch.index — весь текст, начало статьи (summary Hugo, а не description), заголовки или только названия — все четыре режима проверены |
Одни и те же запросы на русской части тестовой вики в четырёх режимах. Запрос из нескольких слов во всех режимах находит статьи, где есть хотя бы одно слово.
| Запрос | весь текст (content) | начало статьи (summary) | заголовки (heading) | названия (title) |
|---|---|---|---|---|
| nginx | LEMP, 2 статьи про WordPress | LEMP, 1 статья про WordPress | ничего | ничего |
| настройка nginx | 6 статей, первой — 1080 (без nginx) | LEMP, 1 статья про WordPress | только 1080 | ничего |
| nginx абракадабра | как «nginx» | как «nginx» | ничего | ничего |
| установка lemp | LEMP | LEMP | LEMP | LEMP |
| udp | не проверялось | 6 статей | 5 статей | 4 статьи |
Статья про порт 1080 попадала первой из-за заголовка «Настройка безопасности и рекомендации»: в режиме
«заголовки» она находится так же. В режиме summary ищется название и начало статьи: поле summary в front matter,
текст до `
или первые 70 слов — полеdescription` в поиск не попадает.
2026-10-17 — Hugo + Hextra: оглавление на узком экране · без вывода · в рабочем проекте
hextra 0.13.0; hugo 0.168.0;
| Требование | Результат | От чего зависит | Примечание |
|---|---|---|---|
Оглавление статьи toc-control | да | тема | справа от статьи, подсветка текущего раздела, подпись переведена; toc: false прячет оглавление, но пустая колонка справа остаётся. Видно только на экране шире 1280 пикселей: на ноутбуке с узким окном, планшете и телефоне оглавления нет совсем, кнопки вместо него тоже нет — проверено |
Проверено, на какой ширине экрана Hextra показывает оглавление: при ширине окна 1300 пикселей оно есть, при 1200
и 1000 — нет, и ничего взамен не появляется. Так задано в шаблоне темы toc.html (класс hx:xl:block).
2026-10-17 — Hugo + Relearn 9.2.1: тестовый набор вики, перепроверка на Hugo 0.168 · без вывода · в рабочем проекте
hugo 0.168.0; relearn 9.2.1;
| Требование | Результат | От чего зависит | Примечание |
|---|---|---|---|
Переключатель языков показывает только существующие переводы ml-switcher-existing | да | тема | в меню языков только существующие переводы статьи; на статье только на ru — один русский. Место меняется настройкой: внизу бокового меню или вверху, под поиском. В верхнюю панель настройкой не ставится (тема выдаёт ошибку) — только своим шаблоном элемента |
hreflang только на существующие переводы ml-hreflang-existing | да | тема | hreflang только на существующие переводы, на саму страницу и x-default; код языка из locale (pt-br) — верно |
Нет автостраниц с контентом основного языка ml-no-fallback-pages | да | тема | статья только на ru существует только на ru и не попадает в меню других языков |
Атрибут lang в нужном формате ml-html-lang | да | тема | html lang = ru, для португальского pt-br |
Переводы интерфейса для en, uk, ru, pt-BR ml-ui-strings | доработка | тема | интерфейс переведён на ru и pt-BR, но украинский файл в теме назван ua, а язык сайта — uk, поэтому на /uk/ интерфейс английский. Исправлено копией файла i18n/ua.toml в i18n/uk.toml проекта. Кнопка «Home» в меню не переведена ни на ru, ни на uk |
Корректный canonical seo-canonical | доработка | тема | canonical на страницах нет; добавлен одной строкой в заготовку custom-header.html. Ещё: по умолчанию ссылки с index.html на конце — выключается настройкой disableExplicitIndexURLs |
Микроразметка schema.org seo-schema | да | тема | микроразметка в HTML (не JSON-LD): Article и BreadcrumbList |
Управление боковым меню sidebar-control | да | тема | боковое меню — дерево разделов; настройками: порядок, раскрыть или свернуть разделы, скрыть страницу, свои меню сверху и снизу |
Оглавление статьи toc-control | да | тема | оглавление — кнопкой в верхней панели, открывается поверх страницы, а не колонкой сбоку; на странице выключается disableToc |
Таксономии (теги, рубрики, свои классификаторы) taxonomies | да | тема | теги и категории со страницами списков |
Поиск по сайту site-search | нет | тема | Lunr в браузере; тексты — отдельный файл на язык (ru — 135 КБ), грузится на каждой странице сразу. Выдаёт только статьи на языке страницы. Украинский Lunr не поддерживает: статьи на uk в поиск не попадают вообще (тема сама предупреждает при сборке). Второй движок темы, Orama, по-русски и по-украински не нашёл ничего — в 9.2.1 так же, как в 9.1.0 |
Гибкость поиска search-replaceable | доработка | тема | замена: настройкой — только на второй движок Orama (экспериментальный); свой шаблон индекса и своя страница поиска — настройкой плюс свой файл; Pagefind — только своим кодом. Языки: формы слов понимает для en, ru, pt; украинский не ищет. Где искать: только через свой шаблон индекса |
Подсветка кода code-highlight | да | тема | подсвечивает сам Hugo при сборке, кнопка «копировать» |
Пошаговые инструкции content-steps | нет | тема | блока «шаги» нет; есть подсказки, вкладки, раскрывающиеся блоки, карточки, кнопки, Mermaid, формулы |
Свой код в шаблоны без правки темы (Inject Partials) theme-inject-partials | да | тема | заготовки: в head, в подвале, до и после заголовка, над и под статьёй, до и после меню, низ меню, комментарии |
Перепроверка Relearn 9.2.1 на Hugo 0.168 тем же набором вики (4 языка, часть статей только на ru). Прошлая
проверка — 9.1.0 на Hugo 0.165 (2026-10-17--hugo--relearn-wiki.md).
По языкам, оглавлению и поиску ничего не изменилось. Новое в 9.2: верхнюю панель можно настраивать так же, как боковое меню, но переключателя языков среди её элементов нет. Сборка — без ошибок и без предупреждений об устаревших настройках; осталось одно — украинский не поддерживается поиском. Страница статьи весит 39 КБ.
2026-10-17 — Hugo + Blowfish: тестовый набор вики · без вывода · в рабочем проекте
blowfish 3.9.0; hugo 0.165.0;
| Требование | Результат | От чего зависит | Примечание |
|---|---|---|---|
Переключатель языков показывает только существующие переводы ml-switcher-existing | да | тема | меню языков появляется, только если у статьи есть перевод, и ведёт только на существующие переводы; на статье только на ru его нет |
hreflang только на существующие переводы ml-hreflang-existing | доработка | тема | hreflang только на существующие переводы и на саму страницу, код языка из locale (pt-br) — верно; нет только x-default |
Нет автостраниц с контентом основного языка ml-no-fallback-pages | да | тема | статья только на ru существует только на ru |
Атрибут lang в нужном формате ml-html-lang | да | тема | html lang = ru, плюс meta content-language |
Переводы интерфейса для en, uk, ru, pt-BR ml-ui-strings | да | тема | интерфейс темы переведён, в том числе uk, ru, pt-BR |
Микроразметка schema.org seo-schema | да | тема | JSON-LD: Article и BreadcrumbList (настройка enableStructuredBreadcrumbs) |
Управление боковым меню sidebar-control | нет | тема | бокового меню с навигацией по разделам нет — тема для блога и портфолио |
Оглавление статьи toc-control | да | тема | оглавление справа и остаётся на месте при прокрутке; включается настройкой, на странице — showTableOfContents |
Таксономии (теги, рубрики, свои классификаторы) taxonomies | да | тема | теги, рубрики, авторы, серии — с оформленными страницами |
Поиск по сайту site-search | доработка | тема | Fuse.js в окне поиска; тексты — отдельный файл на язык (~130 КБ), грузится при открытии поиска. Ошибка для мультиязычного сайта: в выдачу языка попадают статьи на других языках, у которых нет перевода. Настройки нет — убирается своей копией шаблона index.json (3 строки) |
Гибкость поиска search-replaceable | доработка | тема | замена: только копией шаблонов; языки: любые, формы слов не понимает, ищет точное совпадение (threshold 0); где искать: зашито в скрипте — название, раздел, описание, текст; страницу можно исключить параметром excludeFromSearch |
Подсветка кода code-highlight | да | тема | подсвечивает сам Hugo при сборке, кнопка «копировать» |
Пошаговые инструкции content-steps | да | тема | шорткоды steps и step; ещё alert, tabs, accordion, timeline, mermaid, chart |
Свой код в шаблоны без правки темы (Inject Partials) theme-inject-partials | да | тема | 3 заготовки: extend-head, extend-head-uncached, extend-footer; заготовок до и после статьи нет |
Проверка на тестовом наборе вики: 4 языка, часть статей только на ru. Тема скачана в themes/blowfish
без Go, конфиг разложен по config/_default/, как советует документация темы. Сборка на Hugo 0.165 — без
предупреждений. Страница статьи весит 45 КБ.
2026-10-17 — Hugo + Hextra (просмотрщик CMS Lab) · используется · в рабочем проекте
hextra 0.13.0; hugo 0.165.0;
| Требование | Результат | От чего зависит | Примечание |
|---|---|---|---|
Материал можно начать на неосновном языке ml-author-any-lang | да | движок | страница только на ru (/ru/o-proekte/) собирается без заглушки en |
Переключатель языков показывает только существующие переводы ml-switcher-existing | доработка | тема | Hextra 0.13.0 перечисляет все языки, без перевода ведёт на главную языка; исправлено переопределением partial language-switch.html |
hreflang только на существующие переводы ml-hreflang-existing | доработка | тема | Hextra 0.13.0 не выводит hreflang вообще; добавлено в custom/head-end.html по .AllTranslations + x-default |
Основной язык в корне, остальные с префиксом ml-default-root | да | движок | defaultContentLanguageInSubdir = false: en в корне, ru на /ru/ |
Переводы интерфейса для en, uk, ru, pt-BR ml-ui-strings | да | движок | i18n/*.yaml движка; переводы темы есть для en и ru |
Работает без сервера БД no-db | да | движок | SSG, контент в Markdown и YAML |
Работает в окружении Nginx + PHP-FPM 8.5 runtime-php | да | движок | PHP не нужен: Nginx отдаёт статику |
Генерация страниц из данных (pSEO) data-pages | да | движок | module.mounts: data/products → content/cms, data/*.yaml → hugo.Data, без копирования |
Тест на себе: локальный просмотрщик базы собран на Hugo + Hextra. Связка была в списке на тестирование, а проблема переключателя языков уже встречалась в заметках от 2026-09-06.
Что подтвердилось
- В Hextra 0.13.0 (релиз 2026-09-29) переключатель по-прежнему перебирает все языки сайта:
utils/lang-linkпри отсутствии перевода возвращает главную выбранного языка. - В теме нет вывода
hreflangвообще (вlayouts/нет ни одногоalternate). - Оба провала — на слое темы и закрываются переопределением файлов в
site/layouts/без правки темы (механизм lookup order в Hugo).
Подвохи
- В Hugo 0.153+ параметры
langиincludeFilesу mounts устарели: нужны[module.mounts.sites.matrix] languages = [...]иfiles = [...]. - В TOML ключи после заголовка
[params.theme]попадают вparams.theme, а не вparams. markdownifyмолча выбрасывает HTML-теги из текста (<lastmod>пропадает) — теги в заметках оборачивать в обратные кавычки.
2026-10-17 — Hugo + Hextra: микроразметка и хлебные крошки · используется · в рабочем проекте
hextra 0.13.0; hugo 0.165.0;
| Требование | Результат | От чего зависит | Примечание |
|---|---|---|---|
Микроразметка schema.org seo-schema | доработка | тема | только базовые meta itemprop из встроенного шаблона Hugo (name, description, wordCount); BreadcrumbList и Article в JSON-LD нет — добавлять своим кодом через head-end.html |
Хлебные крошки тема строит стандартно для Hugo — по разделам (.Ancestors). В просмотрщике страница
темы /cms/hugo/hextra/ лежит рядом со страницей движка, а не внутри раздела, поэтому без доработки
крошки показывали «Движки › Hextra» без Hugo. Это следствие структуры страниц просмотрщика, а не
недостаток темы: с любой темой Hugo было бы так же. Исправлено своей копией breadcrumb.html.
Настоящий минус темы — в разметке: у крошек нет Schema.org BreadcrumbList, у страниц нет Article в JSON-LD. Есть только несколько meta itemprop из встроенного шаблона Hugo.
2026-10-17 — Hugo + Hextra: настройка и замена поиска · без вывода · в рабочем проекте
hextra 0.13.0;
| Требование | Результат | От чего зависит | Примечание |
|---|---|---|---|
Гибкость поиска search-replaceable | доработка | тема | замена: только своими копиями шаблонов; языки: любые, формы слов не понимает; где искать: настройкой — весь текст, описания, заголовки или названия |
По коду темы (layouts/_partials/scripts/search.html, assets/json/search-data.json): поддерживается только тип
поиска flexsearch. Объём индекса настраивается без кода — можно индексировать только названия статей или заголовки.
2026-10-17 — Hugo + Hextra: поиск по сайту · используется · в рабочем проекте
flexsearch 0.8; hextra 0.13.0; hugo 0.165.0;
| Требование | Результат | От чего зависит | Примечание |
|---|---|---|---|
Поиск по сайту site-search | да | тема | FlexSearch в браузере, индекс — JSON на каждый язык; ищет по началу слова, без словоформ |
Проверено в просмотрщике на русской версии: «мульти» находит страницы со словом «мультиязычность», «языков» находит Drupal, а «языками» не находит ничего — словоформы не учитываются. Таблицы и разделы, которые выводит шаблон (например, «Хостинг для …»), в индекс не попадают.
2026-10-17 — Hugo + Hextra: свой код без правки темы · используется · в рабочем проекте
hextra 0.13.0; hugo 0.165.0;
| Требование | Результат | От чего зависит | Примечание |
|---|---|---|---|
Свой код в шаблоны без правки темы (Inject Partials) theme-inject-partials | да | тема | 8 заготовок в layouts/_partials/custom/: head-end, banner, navbar-title, page-begin, page-end, content-begin, content-end, footer |
Дополнение к проверке Hextra от того же дня: отдельно отмечено требование «свой код без правки
темы». В просмотрщике через эти заготовки сделаны hreflang (head-end.html) и все таблицы базы
(content-begin.html, content-end.html); файлы темы не менялись.
2026-10-17 — Hugo + Hextra: тестовый набор вики · без вывода · в рабочем проекте
hextra 0.13.0; hugo 0.165.0;
| Требование | Результат | От чего зависит | Примечание |
|---|---|---|---|
Нет автостраниц с контентом основного языка ml-no-fallback-pages | да | тема | статья только на ru существует только на ru; пустых страниц на других языках нет |
Атрибут lang в нужном формате ml-html-lang | да | тема | html lang берётся из locale языка: ru, pt-br |
Переводы интерфейса для en, uk, ru, pt-BR ml-ui-strings | да | тема | интерфейс темы переведён на en, uk, ru, pt |
Управление боковым меню sidebar-control | да | тема | дерево всего сайта; на странице sidebar.exclude — скрыть из меню, sidebar.hide — убрать меню, sidebar.open и separator |
Оглавление статьи toc-control | да | тема | справа от статьи, подсветка текущего раздела, подпись переведена; toc: false прячет оглавление, но пустая колонка справа остаётся — проверено |
Таксономии (теги, рубрики, свои классификаторы) taxonomies | да | тема | есть шаблоны страниц тегов и терминов, теги выводятся под оглавлением (params.toc.displayTags); по коду темы — в тестовом наборе тегов нет |
Поиск по сайту site-search | да | тема | индекс — отдельный JSON на язык (ru — 78 КБ на 17 статей), грузится при первом поиске; страница статьи 87 КБ |
Подсветка кода code-highlight | да | тема | подсвечивает сам Hugo при сборке (Chroma, все его языки), кнопка «копировать»; чтобы взять цвета темы, в конфиге нужен markup.highlight.noClasses = false |
Пошаговые инструкции content-steps | да | тема | шорткод steps: шаги — это обычные заголовки ### внутри, текст остаётся Markdown |
Проверка на тестовом наборе вики: 4 языка, часть статей только на ru. Тема склонирована в themes/hextra,
зависимостей-модулей у неё нет — Go не нужен. Сборка на Hugo 0.165 без единого предупреждения.
Главная показывает свой контент. Меню языков на странице, которая есть только на ru, ведёт на главные
страницы других языков (/, /uk/, /pt/) — не 404, но и не перевод; hreflang в теме нет (известно по
предыдущим проверкам).
Для сравнения с Lotus Docs на тех же данных: страница статьи 87 КБ против 175 КБ — потому что индекс поиска лежит отдельным файлом, а не вшит в каждую страницу.
2026-10-17 — Hugo + Hugo Book: Inject Partials по документации · без вывода · по документации
| Требование | Результат | От чего зависит | Примечание |
|---|---|---|---|
Свой код в шаблоны без правки темы (Inject Partials) theme-inject-partials | да | тема | 9 заготовок в layouts/_partials/docs/inject/: head, body, menu-before, menu-after, content-before, content-after, toc-before, toc-after, footer |
По документации темы: https://book.alxs.dev/docs/customization/inject-partials/ Из заметок о минусах Hugo Book: нет хлебных крошек, навигация жёстко завязана на боковое меню.
2026-10-17 — Hugo + Hugo Book: рабочая вики dieg.net · используется · в рабочем проекте
hugo 0.165.0; hugo-book ветка main от 2026-09-10;
| Требование | Результат | От чего зависит | Примечание |
|---|---|---|---|
Переключатель языков показывает только существующие переводы ml-switcher-existing | да | тема | с настройкой BookTranslatedOnly = true в меню языков только существующие переводы; на статье только на ru список пустой |
hreflang только на существующие переводы ml-hreflang-existing | доработка | тема | hreflang только на существующие переводы — верно; но страница не ссылается сама на себя, нет x-default, португальский помечен pt, а не pt-BR. Исправляется своим кодом в inject/head.html |
Нет автостраниц с контентом основного языка ml-no-fallback-pages | да | тема | статья только на ru существует только на ru |
Атрибут lang в нужном формате ml-html-lang | да | тема | html lang = ru, en, uk, pt-br |
Переводы интерфейса для en, uk, ru, pt-BR ml-ui-strings | да | тема | интерфейс темы переведён, в том числе uk, ru, pt и pt-BR |
Микроразметка schema.org seo-schema | доработка | тема | в теме разметки нет; в рабочей вики добавлены Organization, Person, WebSite и TechArticle в JSON-LD через inject/head.html |
Управление боковым меню sidebar-control | доработка | тема | меню — дерево разделов; на странице: bookHidden — скрыть, bookCollapseSection — свернуть, bookFlatSection — без вложенности; убрать меню на странице нельзя. Переключатель языков стоит в меню под поиском — переставить только копией шаблона меню |
Оглавление статьи toc-control | да | тема | оглавление справа; на странице выключается параметром bookToC: false — проверено |
Таксономии (теги, рубрики, свои классификаторы) taxonomies | да | тема | есть шаблоны страниц тегов и терминов; по коду темы |
Поиск по сайту site-search | да | тема | MiniSearch в браузере; тексты статей — отдельный файл на язык (ru — 139 КБ), скачивается, когда человек нажимает на поле поиска |
Гибкость поиска search-replaceable | доработка | тема | замена: поиск выключается настройкой BookSearch, другой — только копией шаблонов; языки: любые, формы слов не понимает; где искать: всегда название и весь текст, страницу можно исключить параметром bookSearchExclude |
Подсветка кода code-highlight | да | тема | подсвечивает сам Hugo при сборке, кнопка «копировать» |
Пошаговые инструкции content-steps | да | тема | шорткод steps; ещё hint, tabs, details, columns, mermaid, katex |
Свой код в шаблоны без правки темы (Inject Partials) theme-inject-partials | да | тема | 9 заготовок: head, body, menu-before, menu-after, content-before, content-after, toc-before, toc-after, footer; в рабочей вики через них сделаны JSON-LD, хлебные крошки, баннеры и ссылка на карту сайта |
Проверка на рабочем проекте вики dieg.net: собрана его копия, сам проект не менялся.
Тема лежит в проекте обычными файлами (themes/hugo-book), без сабмодуля. Сайт собирается на своём VPS:
git push в репозиторий на сервере, сборку запускает git-хук.
2026-10-17 — Hugo + Lotus Docs: настройка и замена поиска · отклонён · в рабочем проекте
lotus-docs 0.3.0;
| Требование | Результат | От чего зависит | Примечание |
|---|---|---|---|
Гибкость поиска search-replaceable | доработка | тема | замена: настройкой на Algolia DocSearch (внешний сервис), Pagefind — только своими копиями шаблонов; языки: любые, формы слов не понимает; где искать: не настраивается, всегда весь текст |
По коду темы (layouts/partials/docs/footer/flexsearch.html, layouts/docs/baseof.html): индекс всегда содержит
название, описание и полный текст статьи и вставляется в каждую страницу. Вместо FlexSearch можно включить
Algolia DocSearch — это внешний сервис со своими условиями.
2026-10-17 — Hugo + Lotus Docs: тестовый набор вики · без вывода · в рабочем проекте
bootstrap 5.3.8; hugo 0.165.0; lotus-docs 0.3.0;
| Требование | Результат | От чего зависит | Примечание |
|---|---|---|---|
Переключатель языков показывает только существующие переводы ml-switcher-existing | доработка | тема | для языков без перевода меню ведёт на /en/docs, /uk/docs, /pt/docs — таких страниц нет, это 404; исправляется своей копией i18nlist.html |
hreflang только на существующие переводы ml-hreflang-existing | доработка | тема | в <head> hreflang нет; в меню языков rel=alternate hreflang стоит и на несуществующие переводы; заготовки для своего кода в head нет — придётся копировать head.html |
Нет автостраниц с контентом основного языка ml-no-fallback-pages | да | тема | статья только на ru существует только на ru; пустых страниц на других языках нет, в sitemap их тоже нет |
Атрибут lang в нужном формате ml-html-lang | да | тема | html lang берётся из locale языка: en, ru, pt-br |
Переводы интерфейса для en, uk, ru, pt-BR ml-ui-strings | доработка | тема | переводы интерфейса темы только de, en, fr, pt; подписи «Table of Contents» и «On this page» вшиты в шаблоны на английском |
title, description и OG на уровне записи seo-meta | да | тема | title, description, Open Graph; тема сама генерирует картинку-карточку для og:image |
Микроразметка schema.org seo-schema | доработка | тема | хлебные крошки размечены BreadcrumbList; Article в JSON-LD нет, заготовки для своего кода в head нет |
Управление боковым меню sidebar-control | нет | тема | показывает только текущий раздел; скрыть статью или рубрику параметром нельзя; отключить меню на странице нельзя; вложенность до 4 уровней |
Оглавление статьи toc-control | да | тема | справа от статьи, на телефоне — выпадающим списком; отключается на странице параметром toc: false; глубина — настройкой Hugo; подписи на английском |
Перелинковка как в DokuWiki internal-links | доработка | тема | обычные ссылки Markdown; в теме есть обработчик ссылок, который находит битые внутренние ссылки (уровень ошибки настраивается) |
Таксономии (теги, рубрики, свои классификаторы) taxonomies | доработка | тема | шаблонов для тегов и рубрик в теме нет, в статье теги не выводятся; страницы списков строит сам Hugo в общем шаблоне |
Поиск по сайту site-search | доработка | тема | по умолчанию ищет только в разделе /docs/; для своих разделов — параметр searchSectionsIndex. Индекс с полным текстом всех статей вшит в HTML каждой страницы |
Подсветка кода code-highlight | да | тема | Prism в браузере, 297 языков подгружаются по мере надобности, кнопка «копировать», выделение строк; можно переключить на подсветку самим Hugo (prism = false) |
Пошаговые инструкции content-steps | нет | тема | блока «шаги» нет; есть alert, tabs, table, katex |
Свой код в шаблоны без правки темы (Inject Partials) theme-inject-partials | нет | тема | заготовок для своего кода (в head, до и после статьи) нет — только копировать шаблоны темы |
Проверка на тестовом наборе вики: 4 языка (en основной, uk, ru, pt), часть статей только на ru.
Тема и её зависимости (hugo-mod-bootstrap-scss, Bootstrap 5.3.8, Popper) склонированы в themes/
и подключены через replacements — сборка прошла без Go.
Что пришлось настроить (без кода)
- Разделы вики лежат в корне, а тема рассчитана на
/docs/. Чтобы не менять адреса, всем страницам назначен типdocsчерезcascadeв конфиге. - Главная по умолчанию показывает рекламный лендинг самой темы («Lotus Docs — A lightweight…»);
после добавления главной в тот же
cascadeна ней свой контент. - Поиск по умолчанию индексирует только
/docs/; включён параметромsearchSectionsIndex = ["docs"].
Что выяснилось
- Индекс поиска с полным текстом всех статей языка вставляется в HTML каждой страницы: на 17 русских страницах статья выросла с 53 до 175 КБ. На большой вики каждая страница будет весить мегабайты.
- Боковое меню показывает только текущий раздел; верхнее меню пустое, пока не задано
menu.primaryв конфиге. С главной на разделы вики без этой настройки не попасть. - Тема использует устаревшие функции Hugo (предупреждения при сборке на 0.165): риск поломки при обновлении Hugo.
- Шорткоды самой вики (
local-gist,child-pages,sitemap,ai-excuse) от темы не зависят — в тестовом наборе для них заглушки.
2026-10-17 — Hugo + PaperMod: заготовки для своего кода по заметкам · без вывода · по опыту
| Требование | Результат | От чего зависит | Примечание |
|---|---|---|---|
Свой код в шаблоны без правки темы (Inject Partials) theme-inject-partials | да | тема | layouts/partials/: extend_head.html, extend_footer.html, comments.html, extend_post_content.html; свой CSS — assets/css/extended/ |
По заметкам (https://wiki.dieg.info/hugo, раздел о настройке PaperMod): тема даёт пустые
файлы-заготовки для своего кода и подхватывает свои стили из assets/css/extended/, так что файлы
темы менять не нужно.
2026-10-17 — Hugo + PaperMod: тестовый набор вики и рабочий сайт antidetecthub.com · без вывода · в рабочем проекте
hugo 0.165.0; papermod обновлена в рабочем проекте 2026-09-19;
| Требование | Результат | От чего зависит | Примечание |
|---|---|---|---|
Переключатель языков показывает только существующие переводы ml-switcher-existing | доработка | тема | меню языков в шапке всегда ведёт на главные других языков, даже со статьи, которой на них нет; существующие переводы статьи тема показывает отдельно, строкой «Переводы» под заголовком |
hreflang только на существующие переводы ml-hreflang-existing | доработка | тема | hreflang только на существующие переводы и на саму страницу — верно; но португальский помечен pt, а не pt-BR, и нет x-default. В рабочем проекте исправлено 4 строками в своей копии head.html |
Нет автостраниц с контентом основного языка ml-no-fallback-pages | да | тема | статья только на ru существует только на ru |
Атрибут lang в нужном формате ml-html-lang | да | тема | html lang = ru |
Переводы интерфейса для en, uk, ru, pt-BR ml-ui-strings | да | тема | интерфейс темы переведён, в том числе uk, ru, pt |
Контент доступен для автоматического перевода ИИ ml-ai-translatable | да | движок | статьи — обычные Markdown-файлы; в рабочем проекте их переводит скрипт через Gemini |
Микроразметка schema.org seo-schema | да | тема | в теме есть JSON-LD: BlogPosting, BreadcrumbList, WebPage, Organization |
Управление боковым меню sidebar-control | нет | тема | бокового меню нет — это тема для блога |
Оглавление статьи toc-control | да | тема | оглавление сверху статьи, сворачиваемым блоком (не сбоку); ShowToc, TocOpen, на странице ShowToc: false |
Таксономии (теги, рубрики, свои классификаторы) taxonomies | да | тема | теги и рубрики выводятся в статье, есть страницы списков; в рабочем проекте отключены |
Поиск по сайту site-search | доработка | тема | Fuse.js на отдельной странице поиска; нужно включить вывод JSON и создать страницу поиска. Тексты — отдельный файл на язык (ru — 142 КБ), грузится только на странице поиска |
Гибкость поиска search-replaceable | доработка | тема | замена: только копией шаблонов; языки: любые, Fuse.js ищет приблизительно и прощает опечатки; где искать: настраивается (params.fuseOpts.keys — название, описание, текст) |
Подсветка кода code-highlight | да | тема | подсвечивает сам Hugo при сборке, кнопка «копировать» (ShowCodeCopyButtons) |
Пошаговые инструкции content-steps | нет | тема | блока «шаги» нет; есть collapse, figure, rawhtml |
Свой код в шаблоны без правки темы (Inject Partials) theme-inject-partials | да | тема | 4 заготовки: extend_head, extend_footer, extend_post_content, comments; hreflang и шапку ими не поправить — нужна копия head.html и header.html |
Тема прогнана на общем тестовом наборе вики (4 языка, часть статей только на ru) и собрана копия рабочего проекта antidetecthub.com (7 языков). Сами проекты не менялись.
В рабочем проекте тема лежит файлами в репозитории, сайт собирает Cloudflare Pages. Шаблоны head, header,
footer, хлебные крошки и разметка там переписаны своими копиями. На Hugo 0.165 тема выдаёт предупреждения
об устаревших функциях.
2026-10-17 — Hugo + Relearn: тестовый набор вики · без вывода · в рабочем проекте
hugo 0.165.0; relearn 9.1.0;
| Требование | Результат | От чего зависит | Примечание |
|---|---|---|---|
Переключатель языков показывает только существующие переводы ml-switcher-existing | да | тема | в меню языков только существующие переводы статьи; на статье только на ru — один русский. Место меняется настройкой: внизу бокового меню или вверху, под поиском |
hreflang только на существующие переводы ml-hreflang-existing | да | тема | hreflang только на существующие переводы, на саму страницу и x-default; код языка из locale (pt-br) — верно |
Нет автостраниц с контентом основного языка ml-no-fallback-pages | да | тема | статья только на ru существует только на ru и не попадает в меню других языков |
Атрибут lang в нужном формате ml-html-lang | да | тема | html lang = ru, для португальского pt-br |
Переводы интерфейса для en, uk, ru, pt-BR ml-ui-strings | доработка | тема | интерфейс переведён на ru и pt-BR, но украинский файл в теме назван ua, а язык сайта — uk, поэтому на /uk/ интерфейс английский. Исправлено копией файла i18n/ua.toml в i18n/uk.toml проекта. Кнопка «Home» в меню не переведена ни на ru, ни на uk |
Корректный canonical seo-canonical | доработка | тема | canonical на страницах нет; добавлен одной строкой в заготовку custom-header.html. Ещё: по умолчанию ссылки с index.html на конце — выключается настройкой disableExplicitIndexURLs |
Микроразметка schema.org seo-schema | да | тема | микроразметка в HTML (не JSON-LD): Article и BreadcrumbList |
Управление боковым меню sidebar-control | да | тема | боковое меню — дерево разделов; настройками: порядок, раскрыть или свернуть разделы, скрыть страницу, свои меню сверху и снизу |
Оглавление статьи toc-control | да | тема | оглавление — кнопкой в верхней панели, открывается поверх страницы, а не колонкой сбоку; на странице выключается disableToc |
Таксономии (теги, рубрики, свои классификаторы) taxonomies | да | тема | теги и категории со страницами списков |
Поиск по сайту site-search | нет | тема | Lunr в браузере; тексты — отдельный файл на язык (ru — 135 КБ), грузится на каждой странице сразу. Выдаёт только статьи на языке страницы. Украинский Lunr не поддерживает: статьи на uk в поиск не попадают вообще (тема сама предупреждает при сборке). Второй движок темы, Orama, по-русски и по-украински не нашёл ничего |
Гибкость поиска search-replaceable | доработка | тема | замена: настройкой — только на второй движок Orama (экспериментальный); свой шаблон индекса и своя страница поиска — настройкой плюс свой файл; Pagefind — только своим кодом. Языки: формы слов понимает для en, ru, pt; украинский не ищет. Где искать: только через свой шаблон индекса |
Подсветка кода code-highlight | да | тема | подсвечивает сам Hugo при сборке, кнопка «копировать» |
Пошаговые инструкции content-steps | нет | тема | блока «шаги» нет; есть подсказки, вкладки, раскрывающиеся блоки, карточки, кнопки, Mermaid, формулы |
Свой код в шаблоны без правки темы (Inject Partials) theme-inject-partials | да | тема | заготовки: в head, в подвале, до и после заголовка, над и под статьёй, до и после меню, низ меню, комментарии |
Проверка на тестовом наборе вики: 4 языка, часть статей только на ru. Тема скачана в themes/relearn без Go.
Проверялась версия 9.1.0: свежая 9.2 требует Hugo 0.166. Сборка на Hugo 0.165 — без ошибок, одно
предупреждение темы: украинский не поддерживается поиском. Страница статьи весит 40 КБ.
Хостинг для Hugo
Hugo собирает сайт в обычные HTML-файлы, поэтому ему не нужны ни PHP, ни база данных. Подойдёт любой хостинг для статики: бесплатные сервисы вроде Cloudflare Pages и GitHub Pages, обычный виртуальный хостинг или недорогой VPS с Nginx. Главное при выборе — скорость отдачи файлов, бесплатный HTTPS и удобная выкладка новых версий сайта. Сравнить предложения по этим параметрам можно в каталогах TOP-10 Hosting:
- Виртуальный хостинг — самый недорогой вариант: сервер настраивает и обслуживает провайдер, подходит для небольших сайтов.
- VPS — свой виртуальный сервер: любая версия PHP, Nginx и доступ по SSH под вашим управлением.
- Выделенные серверы — целый физический сервер для проектов с высокой нагрузкой.
Как установить Hugo самостоятельно и правильно обновлять
Hugo — это одна программа без установщика зависимостей. Ставьте версию extended: без неё многие темы не соберутся. Если сайт собирается на Cloudflare Pages, там нужно указать ту же версию Hugo, что у вас.
Тему проще всего держать прямо в проекте, в папке themes/. Тогда сайт соберётся где угодно — на вашем
компьютере, на Cloudflare Pages из приватного репозитория, на своём сервере — и для этого нужен только Hugo.
Как подключают тему:
| Способ | Удобно | Неудобно |
|---|---|---|
Тема в папке themes/ (шаги ниже) | Работает везде, ничего лишнего ставить не нужно | Обновлять тему — скачать новую версию командой из шагов ниже |
Hugo Modules + hugo mod vendor | Обновление одной командой | На своём компьютере нужен Go; файлы темы тоже лежат в проекте, в папке _vendor/ |
| Git submodule | Так показано в быстром старте Hugo | На Cloudflare Pages из приватного репозитория сборка не прошла |
Hugo Modules без vendor | Ничего не хранится в проекте | Go нужен везде, где собирается сайт |
По шагам
Команды для PowerShell в Windows 11 — копируйте по очереди.
Шаг 1. Откройте PowerShell от имени администратора и установите Hugo:
winget install Hugo.Hugo.ExtendedШаг 2. Откройте новое окно PowerShell и посмотрите версию — она понадобится для Cloudflare Pages:
hugo versionШаг 3. Создайте проект (папку замените на свою):
mkdir C:\Projects\my-wiki
cd C:\Projects\my-wiki
hugo new site . --force
git initШаг 4. Укажите, какую тему и какую её версию ставить. Версия — это тег релиза на странице темы на GitHub:
$THEME_REPO = "https://github.com/imfing/hextra.git"
$THEME_NAME = "hextra"
$THEME_TAG = "v0.13.0"Шаг 5. Скачайте тему и включите её:
git clone --depth 1 --branch $THEME_TAG $THEME_REPO "themes/$THEME_NAME"
Remove-Item -Recurse -Force "themes/$THEME_NAME/.git"
Add-Content hugo.toml "theme = '$THEME_NAME'"Вторая команда убирает у темы её собственную историю git, чтобы файлы темы сохранились в вашем проекте как обычные. Сообщение git про «detached HEAD» — нормальное, на него можно не смотреть.
Если в документации темы сказано, что ей нужны ещё модули (как у Lotus Docs), скачайте их так же в themes/
и перечислите в replacements в разделе [module] конфига.
Шаг 6. Чтобы в git не попадала собранная копия сайта:
Set-Content .gitignore "public/`nresources/`n.hugo_build.lock"Шаг 7. Запустите сайт и откройте http://localhost:1313/:
hugo server -DШаг 8. Сохраните проект:
git add .
git commit -m "Hugo + тема $THEME_NAME $THEME_TAG"Cloudflare Pages. В настройках сборки: Build command — hugo --minify, Build output directory — public,
переменная окружения HUGO_VERSION — версия из шага 2, например 0.165.0.
Обновить тему. Впишите новую версию — команда сначала скачает её рядом и заменит старую, только если скачивание прошло. Если ошиблись в номере версии, тема останется прежней:
$THEME_TAG = "v0.14.0" # впишите новую версию темы
Remove-Item -Recurse -Force "themes/$THEME_NAME.new" -ErrorAction SilentlyContinue
git clone --depth 1 --branch $THEME_TAG $THEME_REPO "themes/$THEME_NAME.new"
if ($LASTEXITCODE -eq 0) {
Remove-Item -Recurse -Force "themes/$THEME_NAME.new/.git"
Remove-Item -Recurse -Force "themes/$THEME_NAME"
Rename-Item "themes/$THEME_NAME.new" $THEME_NAME
"Тема обновлена до $THEME_TAG"
} else {
"Версия $THEME_TAG не найдена, тема не тронута"
}Потом соберите сайт, посмотрите, что поменялось, и сохраните:
hugo
git diff --stat
git add .
git commit -m "Тема $THEME_NAME обновлена до $THEME_TAG"Подробности — в официальной документации: https://gohugo.io/documentation/.
Проверено: 2026-10-17