Blog
Content

Frontmatter

Discover how to use frontmatter to add metadata to your markdown files.

All the files are markdown files with a frontmatter at the top of the file. They are all listed on the index page, except the ones

  • with the draft: true property.
  • with the listed: false property.

Bloggrify supports multiple Front-matter attributes for pages.

Controlling visibility

Three attributes decide who sees a page, and they answer three different questions. Mixing them up is easy, so it is worth being explicit:

  • draft decides whether the page exists. A draft is never built, so its URL returns a 404.
  • listed decides whether the blog points at it. An unlisted page is built and reachable, it just never shows up in the listings, the feed or the related posts.
  • robots decides whether Google indexes it. Independent of the two above.

The last two are deliberately separate, because the useful combinations differ:

FrontmatterUse caseIn the listingsIn Google
(nothing)a normal postyesyes
listed: falsean about pagenoyes
robots: falsea post you would rather not rankyesno
listed: false + robots: falsea page you share by link onlynono

An about page is exactly why listed: false does not imply noindex: it is not a blog post, so it has no place in the listings, but you certainly want people to find it.

robots: false is a request, not a lock. It keeps the page out of search results, it does not make it private: the page is still built and anyone with the URL can read it.

It also supports frontmatter to add metadata to your markdown files.

---
pageid: "2"
title: "Use markdown power"
description: "Use markdown at its full potential."
date: "2024-02-09"
tags:
  - markdown
cover: "doc/markdown.png"
---

Here is the list of all the frontmatter attributes:

KeyDefaultTypeDescription
pageidstringmandatory if you want to use the comment system. It is used to identify the article.
titlestringDefines the page title
descriptionstringDefines the page description. Important for SEO
datestringis used to sort the articles. Date in the future will not be displayed. (format: YYYY-MM-DD)
coverstringImage for the blog post, also used as an OpenGraph cover image
commentsfalsebooleanDisable comments on this page
listedtruebooleanfalse keeps the page out of the listings, the RSS feed and the related posts. The page is still built, reachable and indexed. Example: an about page
robotsboolean | stringfalse means noindex/nofollow, a string sets the directive verbatim. See Controlling indexing
draftfalsebooleantrue means the page is never built: no URL, no sitemap entry, no feed item. It stays fully visible in npm run dev
hiddenfalsebooleanDeprecated, use listed: false. Kept as a synonym of it and reported at build time
table_of_contentsbooleantrue shows the table of contents on this post (if the theme renders one). It can also be enabled for every post site-wide with the table_of_contents option in app.config.ts. Use notoc to hide it on a single post
notocfalsebooleantrue hides the table of contents on this post, even when it is enabled site-wide
tagsarrayList of tags related to the article
categoriesarrayList of categories related to the article
authorstringThe username of one of the authors defined in app.config.ts. It sets the post byline, the RSS <dc:creator> and the schema.org author. Omit it and the post falls back to the author flagged default: true
redirect_to_domainarrayPermanent redirect (301) to another domain with the same path. See documentation
redirect_to_full_urlarrayPermanent redirect (301) to another url. See documentation
languagestringThe language of the blog post (useless if it's the same as the whole blog)
alternatesarray(for multilingual website. See sitemap reference documentation)
alternates.hreflangstringThe language of the alternative version of this page
alternates.hrefstringThe url of a page with the same content in another language (to avoid duplicate content and explicit the relation between the two pages)
Copyright © 2026