Перейти к содержимому

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, поиск и места для своего кода — их нужно проверять у каждой темы отдельно. Значок в пунктирной рамке — результат перенесён из проверки с другой темой этого движка. Наведите на значок, чтобы увидеть подробности.

ТребованиеPaperModBlowfishHugo BookHextraRelearnLotus 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)
nginxLEMP, 2 статьи про WordPressLEMP, 1 статья про WordPressничегоничего
настройка nginx6 статей, первой — 1080 (без nginx)LEMP, 1 статья про WordPressтолько 1080ничего
nginx абракадабракак «nginx»как «nginx»ничегоничего
установка lempLEMPLEMPLEMPLEMP
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