Using Tags and Categories

Hugo ships with two default taxonomies: tags and categories.

Assigning terms

Add them to any article’s front matter:

---
title: "My Article"
tags: ['python', 'tools']
categories: ['tutorials']
---

What Hugo generates

For each taxonomy, Hugo creates:

  • A taxonomy list page: /tags/ — shows all terms.
  • A term page per value: /tags/python/ — lists all articles with that tag.

Custom taxonomies

Define additional taxonomies in hugo.toml:

[taxonomies]
  tag = "tags"
  category = "categories"
  series = "series"

Then use series: ['my-series'] in front matter. Hugo generates /series/ and /series/my-series/ automatically.

Automatic Dating with Git

Hugo can pull dates from Git history so you never have to update lastmod by hand.

Enable Git info

# hugo.toml
enableGitInfo = true

Configure front matter date resolution

[frontmatter]
  date = [':filename', ':default']
  publishDate = [':filename', ':default']
  lastmod = [':git', ':fileModTime']

How it works

  • .Date — tries the filename first (2026-04-03-post.md), then the date field in front matter.
  • .Lastmod — uses the Git author date of the last commit that touched the file, falling back to filesystem mtime.
  • .PublishDate — same resolution chain as .Date.

Filename date formats

Hugo recognizes these patterns:

Organizing This Site

A reference for how this Hugo site is organized and what configuration options are available.

Sections

Sections are created automatically from the directory tree under content/. Any directory with an _index.md file becomes a section with its own list page.

content/
├── _index.md           ← home page
├── about/
│   ├── _index.md       ← /about/ list page
│   ├── whoami.md
│   └── now.md
├── software/
│   ├── _index.md       ← /software/ list page
│   ├── ollama.md
│   └── hugo-setup/     ← page bundle (leaf)
│       ├── index.md
│       └── architecture.svg
└── config/
    ├── _index.md       ← /config/ list page
    └── this-file.md

No config changes are needed — Hugo derives sections from the filesystem.

CI/CD resume publication

I am terrible at word processors / editing so I build my resume with LaTeX templates. I gain a pretty, highly configurable resume, but it can be a pain to modify, build, share, etc. A couple weeks ago someone pointed out to me that I forgot to update my most recent role to reflect a promotion (staff software engineer, yeahh!!). I was not at home and I had to work quite a bit to only change a word in my resume. This has always been a pain to me so I figured, why not set up a CI/CD pipeline to build and publish my resume. These are the steps I took.