How to generate hugo-compatible yaml frontmatter
- Step 1Load the content file — Paste the Markdown body, or upload a single
.md/.txt. This is the content the new YAML block is prepended to. - Step 2Enter Title and Date — Type the title and an ISO date
YYYY-MM-DD. Hugo usesdatefor ordering and for the default.Date; the serializer single-quotes it so it stays a string. - Step 3Set Slug and Description — Slug overrides the URL segment; Description populates
.Description(used by SEO partials). Blank fields are omitted from the block. - Step 4List Tags — Comma-separate tags, e.g.
go, hugo, ssg. Hugo treatstagsas a built-in taxonomy and generates/tags/<tag>/pages from them. - Step 5Set the Draft flag deliberately — Leave Draft unticked for content you want in a normal build; tick it to keep the post out until you run
hugo -D. The flag is always present in the output. - Step 6Add Hugo extras and save to `content/` — After downloading, add any of
weight,categories,menu,aliases, orsummaryby hand, then save into yourcontent/tree (e.g.content/posts/).
Hugo frontmatter: covered vs. add-by-hand
The six form fields against the Hugo keys you most often need. Anything marked manual is not a control in this tool.
| Hugo key | From the form? | Notes |
|---|---|---|
title | Yes | Title field |
date | Yes | Date field; controls ordering and .Date |
slug | Yes | Overrides the URL segment |
description | Yes | Feeds .Description for SEO partials |
tags | Yes | Built-in taxonomy → /tags/<tag>/ pages |
draft | Yes (always written) | true excluded from build unless hugo -D |
categories | No | Add by hand (second built-in taxonomy) |
weight | No | Add by hand to control menu/section order |
menu | No | Add by hand to place in a Hugo menu |
aliases / summary | No | Add by hand for redirects / manual excerpts |
Hugo draft behaviour with the always-written flag
How Hugo treats the draft value this tool emits, across common build commands.
| Frontmatter | `hugo` (normal build) | `hugo -D` / `--buildDrafts` |
|---|---|---|
draft: false (default) | Included | Included |
draft: true (box ticked) | Excluded | Included |
| Line deleted after download | Treated as published | Included |
Future-dated date: | Excluded by default | Use --buildFuture to include |
Cookbook
Hugo-focused before/after examples. The output is YAML ready for content/; comments note where you add Hugo-specific keys.
A standard Hugo post header
Four fields filled. The block is YAML, which Hugo reads natively even if your theme docs show TOML examples.
Form: title=Building With Hugo Modules, date=2026-06-13,
slug=hugo-modules,
description=Vendoring themes the modern way,
tags=go, hugo, modules
Output:
---
title: Building With Hugo Modules
date: '2026-06-13'
slug: hugo-modules
description: Vendoring themes the modern way
tags:
- go
- hugo
- modules
draft: false
---Draft kept out of the production build
Ticking Draft sets draft: true, which a normal hugo build excludes — exactly Hugo's intended workflow.
Form: title=WIP: Hugo Pipes Deep Dive, draft=checked Output: --- title: 'WIP: Hugo Pipes Deep Dive' draft: true --- hugo -> post excluded hugo -D -> post included
Adding Hugo-only keys by hand
After downloading, append weight and categories — neither is a form field but both are common Hugo keys.
Downloaded: --- title: Section Intro draft: false --- After manual edit: --- title: Section Intro weight: 10 categories: - guides draft: false ---
Migrating a post that had a TOML block
An older Hugo post used +++ TOML. The splitter strips it and writes YAML; TOML-only keys are dropped and must be re-added.
Paste: +++ title = "Old TOML Post" weight = 5 +++ # Old TOML Post Form: title=Old TOML Post, date=2026-06-13 Output: --- title: Old TOML Post date: '2026-06-13' draft: false --- # Old TOML Post # Note: `weight = 5` from the TOML block was discarded — # re-add `weight: 5` if you still need it.
Tags become taxonomy term pages
The YAML tag sequence Hugo reads triggers automatic /tags/<tag>/ list pages.
Output: --- tags: - go - performance draft: false --- Hugo generates: /tags/go/ /tags/performance/ automatically from this list.
Edge cases and what actually happens
Output is YAML, but your theme docs show TOML
SupportedHugo reads YAML, TOML, and JSON frontmatter interchangeably. This tool emits YAML; your theme works the same. You do not need to convert to TOML — but if your repo standardises on +++, convert the downloaded block manually.
`draft: true` post missing from the live site
ExpectedHugo excludes draft: true content from a normal hugo build. That is the intended behaviour, not a bug. Build with hugo -D (or --buildDrafts) to preview drafts, and untick the box (or delete the line) when you publish.
Need `weight`, `menu`, `aliases`, or `summary`
Not a fieldThese common Hugo keys are not in the six-field form. Add them by hand to the downloaded block. weight controls ordering, menu places the page in a nav menu, aliases creates redirects, and summary overrides the auto-excerpt.
`categories` vs `tags`
Single fieldThe form has only Tags. Hugo's categories is a separate built-in taxonomy. Add a categories: key manually rather than mixing categories into Tags, so Hugo builds the correct term pages for each.
Future-dated post not building
ExpectedHugo excludes content with a future date: from a normal build. If you set a future Date, the post will not appear until then unless you build with --buildFuture. This mirrors Hugo's scheduling, not a tool limitation.
Imported TOML keys silently lost
ReplacedWhen the body opens with a +++ TOML block, the splitter strips the entire block before writing YAML. TOML-only keys (weight, aliases, custom params) are discarded. Copy them out before running, then re-add the YAML equivalents.
Date typed in a non-ISO format
Written verbatimThe Date field has no validation. Hugo prefers ISO/RFC 3339 dates; a free-form string is written exactly as typed and may sort or display oddly. Use 2026-06-13 (or full RFC 3339 with a time/zone if you need precision).
Large content file over the free cap
Tier limitFree tier allows 1 MB / 500,000 characters per file. Most Hugo content files are tiny, so this only matters for unusually long pages or accidental whole-section pastes. Pro raises it to 10 MB / 5,000,000 characters.
Frequently asked questions
Hugo wants TOML — can I get that?
This tool only emits YAML (---), but Hugo reads YAML, TOML, and JSON interchangeably, so the YAML output works in any Hugo site with no conversion. If your repo standardises on TOML (+++), convert the downloaded block by hand — the tool does not produce or convert to TOML.
How does the draft flag interact with Hugo builds?
The tool always writes a draft key. draft: true (box ticked) is excluded from a normal hugo build and only appears with hugo -D / --buildDrafts. draft: false (default) is always built. This matches Hugo's native draft model exactly, so you can rely on the flag as written.
What about `weight` and `menu`?
Neither is a form field — add them by hand to the downloaded block. weight: 10 controls ordering within a section or menu; menu: main places the page in Hugo's main menu. The form covers the six most common keys only.
Can I get `categories` as well as `tags`?
The form has a single Tags field, which maps to Hugo's tags taxonomy. categories is a separate built-in taxonomy; add a categories: key manually to the downloaded block. Don't fold categories into Tags or Hugo will build the wrong term pages.
Will my existing TOML or YAML block be kept?
No. An existing leading --- (YAML) or +++ (TOML) block is stripped and rebuilt from the six form fields. Keys outside those six — weight, aliases, custom params — are discarded. Copy them before running and re-add the YAML equivalents to the downloaded block.
Does the date need a specific format?
Hugo prefers ISO/RFC 3339 dates like 2026-06-13 (or with a time and zone for scheduling). The Date field is free text with no validation, so type the ISO form yourself — a non-standard string is written verbatim and may sort or display incorrectly.
Can I bulk-add frontmatter to a whole section?
No — the tool handles one file or one paste at a time. For a section-wide migration, run files individually, or replicate the split-and-prepend logic in a script. Hugo's archetypes are the better long-term fit for generating new content headers.
Does the date auto-fill to today?
No. The Date field starts empty and is only written if you type a value — there is no auto-insert. For new content, Hugo's hugo new archetype system is what auto-stamps the date; this tool writes exactly what you enter.
Will the tags create taxonomy pages automatically?
Yes — Hugo treats tags as a built-in taxonomy and generates /tags/<tag>/ list pages from the YAML sequence this tool emits, with no extra config. For categories pages you must add the categories: key yourself.
Is the post content uploaded anywhere?
No. Everything runs in your browser whether you paste or upload a single .md/.txt. Only an anonymous processed-file counter is stored server-side; your content is never sent.
Can I rerun this safely on a post I already processed?
Yes. On each run the tool strips the existing leading ---/+++ block and writes a fresh one, so you never end up with two stacked blocks. Just remember that any keys you added by hand (like weight or categories) are removed when the block is rebuilt — re-add them after the rerun.
What companion tools help a Hugo workflow?
Build a contents list with md-toc-generator, normalize formatting with md-prettifier, rewrite image paths during a content move with md-image-path-rewriter, and check internal links with md-link-validator.
Privacy first
All Markdown processing runs locally in your browser using JavaScript. No file is ever uploaded to JAD Apps servers — only metadata counters are saved for signed-in dashboard stats.