Skip to content

Writing a Page

In BlogMore, there are two types of content: posts and pages. Posts are dated entries that appear in your blog's listing, archive, RSS feed, and tag/category indexes. Pages are timeless documents that stand on their own — things like an about page, a contact page, or a projects page.

Posts vs pages

The key differences are:

Posts Pages
Appear in blog listing Yes No
Included in feeds Yes No
Appear in archive Yes No
Tagged and categorised Yes No
Sorted by date Yes No
Appear in site navigation No Yes

Use a page when you want to publish something that isn't a time-based entry — something that doesn't really "belong" in the stream of posts.

The pages directory

Pages live in a pages/ subdirectory inside your content directory:

posts/
├── pages/
│   ├── about.md
│   └── projects.md
├── hello-world.md
└── python-tips.md

BlogMore detects the pages/ directory automatically. Any .md file you place there will be treated as a page rather than a post.

Creating a page

A page looks very much like a post. Create a new .md file inside pages/ with frontmatter at the top:

---
title: About Me
---

Hi, I'm Dave. I write about Python, open source software, and whatever else
catches my interest.

You can find me on [GitHub](https://github.com/davep) and
[Mastodon](https://fosstodon.org/@davep).

Page frontmatter

Pages support a subset of the frontmatter fields available to posts.

Required fields

title

The title of the page. Appears as the page heading and in the browser tab.

title: About Me

Optional fields

description

A short description of the page. Used in <meta name="description"> and social sharing tags. If not set, BlogMore falls back to the first paragraph of the page's content.

description: A little about who I am and what I do.

cover

A URL or path to a cover image, used for Open Graph and Twitter Card social sharing previews.

cover: /images/about-cover.png

twitter_creator

The Twitter/X handle of the page's author. Used in Twitter Card meta tags.

twitter_creator: "@davep"

twitter_site

The Twitter/X handle of the site. Used in Twitter Card meta tags.

twitter_site: "@my_blog"

The special case of 404.md

Many hosting services, including GitHub Pages, support a custom 404 page that is shown whenever a visitor tries to access a URL that doesn't exist on your site. BlogMore has built-in support for this.

Create a file named 404.md inside your pages/ directory:

---
title: Page Not Found
---

Sorry, the page you were looking for does not exist.

[Return to the home page](/)

BlogMore generates a 404.html file in the root of your output directory. The 404 page is intentionally excluded from the site navigation — visitors are not meant to find it by browsing; they land there only when a URL does not match.

When you use blogmore serve for local testing, the development server will automatically serve this custom page whenever a resource cannot be found, so you can preview the 404 experience before publishing.

If 404.md is absent, no 404.html is generated and the server falls back to its built-in 404 response.