Навигация

Шпаргалка ни в коей мере не является альтернативой официальной документации или руководствам по генератору статических сайтов Hugo.

Время

Часовой пояс

Официальная документация: <a href=“https://gohugo.io/configuration/all/#timezone"target="_blank">https://gohugo.io/configuration/all/#timezone

Часовой пояс указывается в hugo.toml и позволяет корректно отображать, например, время создания/редактирования страниц.

Пример:

timeZone = 'Europe/Moscow'

Варианты написания часовых поясов есть тут: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List

Изображения

Увеличение картинки по нажатию

Локальный web-сервер

Описание команды: https://gohugo.io/commands/hugo_server/#hugo-server

Дефолтный локальный адрес: http://localhost:1313/

Запуск локального сервера с указанием конкретной папки с контентом

Два равнозначных варианта команды:

hugo server --contentDir string
hugo server -c string

Пример:

hugo server --contentDir /Users/zlonov/Library/Mobile\ Documents/iCloud\~md\~obsidian/Documents/🧬live

Включить помеченное как “draft”

Два равнозначных варианта команды:

hugo server --buildDrafts
hugo server -D

Пример:

hugo server --buildDrafts --contentDir /Users/zlonov/Library/Mobile\ Documents/iCloud\~md\~obsidian/Documents/🧬live

Автоматический переход к изменённой странице

Два равнозначных варианта команды:

hugo server --navigateToChanged
hugo server -N

Пример:

hugo server --navigateToChanged --buildDrafts --contentDir /Users/zlonov/Library/Mobile\ Documents/iCloud\~md\~obsidian/Documents/🧬live

Автоматическое удаление папки со сгенерированным сайтом после остановки сервера

Вторая команда запускается после завершения первой и удаляет папку public:

hugo server && rm -rf public

Как вариант, папку можно не удалять, а переименовывать. Так и сгенерированный сайт сохранится и при следующем запуске папка public будет создана с нуля:

hugo server && rm -rf public && mv public public_last

Пример:

hugo server --navigateToChanged --buildDrafts --contentDir /Users/zlonov/Library/Mobile\ Documents/iCloud\~md\~obsidian/Documents/🧬live && rm -rf public && mv public public_last

Оформление

Заголовок страницы

HTML-элемент <title> определяет заголовок документа, который отображается в заголовке окна браузера или на вкладке страницы. Он содержит только текст, а теги внутри элемента игнорируются.

Заголовок страницы для сайтов на базе Hugo обычно устанавливается в файле layouts/partials/head.html (зависит от используемой темы).

Пример кода, который устанавливает заголовок вида "Мой сайт | Заголовок страницы" для отдельных страниц, "Мой сайт" для главной страницы и "Мой сайт | Краткое содержание" для страниц без заголовка:

<!-- Site/page Title -->
    {{ $title := print .Site.Title " | " .Title }}
    {{ if not .Title }}{{ $title = (print .Site.Title " | " (.Summary | plainify)) | truncate 512 }}{{ end }}
    {{ if .IsHome }}{{ $title = .Site.Title }}{{ end }}
    <title>{{ $title }}</title>

Максимальная длина <title> зависит от браузера и варьируется от 512 до 3250.

Подписки / RSS

RSS-лента

Ограничить число генерируемых записей в RSS-ленте можно в файле конфигурации hugo.toml:

[services]
  [services.rss]
    limit = 15

Содержание / TOC

Добавить к посту содержание/оглавление

Можно использовать модуль Table Of Contents Shortcode из состава Exclusive Hugo Modules либо отдельно:

  • Добавить файл toc.html в папку /layouts/partials. Можно его доработать, например, для проверки числа слов:
{{ if gt .WordCount 100 }}
{{ $class:= .Class }}
{{ $scratch := newScratch }}
{{ if not (.Collapsed | default true) }}
  {{ $scratch.Set "openAttr" "open" }}
{{ else }}
  {{ $scratch.Set "openAttr" "" }}
{{ end }}
<details {{ $scratch.Get "openAttr" | safeHTMLAttr }} class="table-of-content {{$class}}">
  <summary>
    {{ with i18n "toc" }}
      {{ . }}
    {{ else }}
      Содержание
    {{ end }}
  </summary>
  {{ .TableOfContents }}
</details>
{{ end }}
  • Добавить стили из файла toc.css в используемые стили:
.table-of-content {
  margin: 1rem 0 1.5rem;
}
.table-of-content summary {
  font-size: 18px;
  color: #fff;
  background-color: #555;
  padding: 5px 20px;
  margin-bottom: 0 !important;
}
.table-of-content ul li:before {
  display: none;
}
#TableOfContents {
  padding: 10px;
  background-color: #f7f7f7;
}
#TableOfContents li,
#TableOfContents a {
  color: #333 !important;
}
#TableOfContents a {
  text-decoration: none;
}
#TableOfContents a:hover {
  text-decoration: underline;
}
.content .table-of-content ul li,
.content .table-of-content ol li {
  margin-bottom: 6px !important;
}
.dark #TableOfContents {
  background-color: #333;
}
.dark #TableOfContents li,
.dark #TableOfContents a {
  color: #fff !important;
}
  • Далее надо использовать вызов просто:
    • {{ partial "toc.html" }} либо
    • {{ partial "toc.html" (dict "Class" "table-of-content" "Collapsed" true "TableOfContents" .TableOfContents "WordCount" .WordCount) }}

Проверить, что содержание не пустое

{{ with .TableOfContents }}
	<!-- the variable is set -->
	{{ if ne .TableOfContents "<nav id=\"TableOfContents\"></nav>" }}
		<!-- the variable is not an empty navigation -->
		{{ . }}
		<!-- it is a dot because we are inside of a `with` -->
	{{ end }}
{{ end }}
Источник: <a href=“https://discourse.gohugo.io/t/check-for-empty-tableofcontents/29737"target="_blank">https://discourse.gohugo.io/t/check-for-empty-tableofcontents/29737

Сокращённый вариант с реальным примером:

{{ if ne .TableOfContents "<nav id=\"TableOfContents\"></nav>" }}
	<div class="row">
	    <div class="col-sm-3 order-sm-2">{{ .TableOfContents }}</div>
		<div class="serif main-content col-sm-9 order-sm-1">{{ .Content | markdownify | safeHTML }}</div>
	</div>
{{ else }}
	<div class="serif main-content">{{ .Content | markdownify | safeHTML }}</div>
{{ end }}

Ссылки

Использование точек в именах файлов

В версии 0.146+ есть проблема с использованием точек в именах файлах: Hugo отсекает всё, что идёт после первой точки, поэтому для файла c именем, например, 2025-04 18 10.27.52.md будет создана страница /2025-04-18-10/index.html , а не /2025-04-18-10.27.52/index.html , как хотелось бы.

Варианта решения пока два:

  1. Отказаться от использования точек, заменив их, например, на дефис: 2025-04 18 10-27-52.md или нижнее подчёркивание: 2025-04 18 10_27_52.md
  2. Использовать явное указание желаемое результата в параметрах: slug: 2025-04 18 10.27.52
Справка про управление ссылками: <a href=“https://gohugo.io/content-management/urls/"target="_blank">https://gohugo.io/content-management/urls/