Create and publish a blog
Create a section, write a post, connect tags and authors, then publish.
On this page
Start from the Quick start site. Run the commands from the site root and keep the blog outside the theme directory.
1. Create the section
Create content/blog/_index.md:
+++
title = "Blog"
description = "Project notes and tutorials."
sort_by = "date"
paginate_by = 5
template = "blog.html"
page_template = "blog-page.html"
+++
Add { name = "Blog", path = "/blog/" } to your existing navigation links.
Every post needs date because the section sorts by date. Posts without sorting
data are excluded from the sorted list. Omit paginate_by to list all posts.
2. Register tags and authors
Add these settings to zola.toml before any tables. Extend an existing
taxonomies array rather than declaring it twice:
author = "Alex Morgan"
generate_feeds = true
feed_filenames = ["atom.xml"]
taxonomies = [
{ name = "tags", paginate_by = 10 },
{ name = "authors", feed = true },
]
Create data/authors.toml:
[alex]
name = "Alex Morgan"
role = "Project maintainer"
The key alex connects a post to this record and its /authors/alex/ page.
Known profiles require a non-empty name. Unknown keys fall back to their plain
name. Blog authors covers avatars, links,
multiple writers and profile feeds.
3. Write the first post
Create content/blog/first-post.md:
+++
title = "First project release"
description = "Install the first release and check its configuration."
date = 2026-10-06
[taxonomies]
tags = ["release", "installation"]
authors = ["alex"]
+++
## Install
Explain the command and its expected result.
## Check
Show how readers can verify the installation.
Use updated when you change the article after publication. extra.release
adds an optional release badge. Prefer a short description for article lists
and metadata. Without a description, a post's <!-- more --> summary supplies
a plain-text list excerpt, limited to 280 characters. The full article keeps
its Markdown formatting.
Tag links appear in lists and articles and lead to generated tag archives.
Older/Newer links follow the containing section's date order. Set
extra.devlab.blog.show_pagination = false in zola.toml to hide those links. Standalone
articles outside a sorted section have no adjacent-post links.
4. Preview a draft
Set draft = true in the post front matter while writing. Run:
zola serve --drafts
Normal builds omit drafts. Remove the draft flag before publication. For a
renamed route, use Zola's native aliases field to preserve old incoming links.
Keep dated filenames and aliases site-owned. Zola's
page front matter reference
explains these native settings.
5. Verify and publish
zola check --skip-external-links
zola build
zola serve
Open /blog/, the article, /tags/release/, /authors/alex/, atom.xml and the
author feed. Check dates, bylines, excerpts, tag links and Older/Newer links.
Test the menu and search with a keyboard. A site under a path prefix must keep
that prefix in article and asset links.
Follow Deploy a site to upload public/, then
subscribe to the published feed to verify its URLs. Publication metadata and
cache policy are covered in Publishing.