SEO and Metadata
Contents
OnyxFolio generates rich metadata for every page automatically — no plugins or third-party services required.
OpenGraph / Twitter Card
Every page gets <meta> tags for social sharing:
| Meta tag | Source |
|---|---|
og:title / twitter:title |
Post title |
og:description / twitter:description |
Post summary |
og:image / twitter:image |
banner frontmatter URL |
og:url |
Canonical URL of the page |
og:type |
article for posts, website for homepage |
twitter:card |
summary_large_image if banner set, else summary |
These tags are injected in a {% block meta %} in base.html and overridden per page.
Banner image
Add a banner image to any note:
banner: "https://example.com/photo.jpg"
banner_x: 0.5 # horizontal focal point, 0–1 (default: 0.5)
banner_y: 0.4 # vertical focal point, 0–1 (default: 0.5)
The banner is used as the OpenGraph / Twitter Card image. It also appears as a hero image at the top of the post page, with CSS object-position set from banner_x and banner_y so the focal point stays visible at any aspect ratio.
JSON-LD structured data
OnyxFolio injects a <script type="application/ld+json"> block on each page for Google rich results.
Article schema (regular posts)
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Post Title",
"datePublished": "2026-04-16",
"dateModified": "2026-04-20",
"author": [{"@type": "Person", "name": "Jane Doe"}],
"image": "https://example.com/banner.jpg"
}
Book schema (type: book posts)
{
"@context": "https://schema.org",
"@type": "Book",
"name": "Book Title",
"author": [{"@type": "Person", "name": "Jane Doe"}]
}
WebSite schema (homepage)
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "Site Name",
"url": "https://example.com"
}
Author field
author: "Jane Doe"
Or multiple authors:
author:
- Jane Doe
- John Smith
Shown in post meta (below the title) and included in JSON-LD author array.
Updated date
updated: 2026-04-20
Shown as "Updated April 20, 2026" in post meta. Maps to dateModified in JSON-LD.
Reading time
Estimated reading time is computed at load time from word count (200 words per minute) and shown on post pages and listing cards.
Canonical URL
Each page's canonical URL is injected as <link rel="canonical"> using request.base_url (the URL without query parameters). This prevents duplicate-content issues with paginated listing pages.
Sitemap
All published URLs are listed in /sitemap.xml. See RSS and Sitemap for details.
See also
- RSS and Sitemap —
feed.xmlandsitemap.xml - Frontmatter Reference —
banner,banner_x,banner_y,author,updated - Post Types — how
type: bookuses Book JSON-LD