How to build jekyll-compatible yaml frontmatter
- Step 1Bring in the post body — Paste the Markdown into the textarea, or upload a single
.md/.txt. This body is what the new header is prepended to. - Step 2Set Title and Date — Type the post title and an ISO date
YYYY-MM-DD. The date also needs to go in the filename (next step) — Jekyll uses the filename date for the post URL. - Step 3Add Slug, Description, Tags — Slug feeds the URL fragment; Description is your meta summary; Tags become
page.tags. Leave any of them blank to omit the key. - Step 4Run and add `layout: post` by hand — Run, then in the downloaded block add
layout: post(the form has no layout field) unless you set adefaultslayout in_config.yml. - Step 5Remove the `draft` line if present — Jekyll has no
draftkey — it uses a_draftsfolder. The tool always writesdraft: false; delete that line for a published post, or move the file to_draftsfor an unpublished one. - Step 6Name the file `YYYY-MM-DD-slug.md` and drop into `_posts` — Save with the date-prefixed filename matching the post date, then place it in
_posts/. The filename date is what Jekyll uses to build the permalink.
Jekyll header: what the tool gives you vs. what you add
The six form fields cover the common keys. Jekyll-specific essentials outside those six are listed so you know exactly what to add manually after running.
| Jekyll need | From the form? | How to satisfy it |
|---|---|---|
Valid --- YAML block | Yes | Produced automatically |
title: | Yes | Title field |
date: | Yes | Date field (also put it in the filename) |
tags: for page.tags | Yes | Tags field (comma list) |
description: | Yes | Description field |
layout: post | No | Add manually, or set in _config.yml defaults |
Filename YYYY-MM-DD-slug.md | No | Rename the saved file yourself |
categories: | No | Add manually, or use the URL/folder convention |
| Drafts | No (writes draft: false) | Delete the line; use the _drafts/ folder |
Where Jekyll posts silently fail to render
Common reasons a _posts file does not appear on the built site, and whether this tool prevents the issue.
| Symptom | Cause | This tool's effect |
|---|---|---|
| Post missing from site, no error | No valid frontmatter block | Fixed — always emits a --- block |
| Post missing, has frontmatter | Filename lacks YYYY-MM-DD- prefix | Not fixed — rename the file yourself |
| Build error on the post | Unquoted colon in title/description | Fixed — values auto-quoted |
| Post dated wrong on the site | Filename date differs from date: | Partly — keep both in sync manually |
| No layout / raw text shown | layout: missing and no default | Not fixed — add layout: post |
| Future post hidden | Post date is in the future | Not fixed — use --future or set today's date |
Cookbook
Jekyll-focused examples. The output is a valid _posts header; comments flag the two manual steps Jekyll still needs (filename date, layout).
A clean `_posts` header
Fill the four common fields. The result parses in Jekyll; you still rename the file and add a layout.
Form: title=Deploying to GitHub Pages, date=2026-06-13,
slug=deploying-to-github-pages,
description=A step-by-step Pages deploy,
tags=jekyll, github-pages, ci
Output:
---
title: Deploying to GitHub Pages
date: '2026-06-13'
slug: deploying-to-github-pages
description: A step-by-step Pages deploy
tags:
- jekyll
- github-pages
- ci
draft: false
---
# Manual: add `layout: post`; save as
# 2026-06-13-deploying-to-github-pages.md in _posts/Colon in title would have dropped the post
Jekyll silently skips a post whose YAML fails to parse. An unquoted colon is the classic cause; the tool quotes it.
Form: title=Jekyll: From Zero to Live Output: --- title: 'Jekyll: From Zero to Live' draft: false --- # Without the quotes Jekyll would treat this as a static # file and never render it.
Adding the manual `layout` and removing `draft`
The two hand edits a Jekyll author makes after downloading: insert layout, drop the draft line.
Downloaded: --- title: My Post date: '2026-06-13' draft: false --- After manual edit: --- layout: post title: My Post date: '2026-06-13' ---
Re-importing a post with an old header
A post pulled from another site carries a foreign block. The tool replaces it; you re-add Jekyll-specific keys.
Paste: --- title: Imported permalink: /old-url/ --- # Imported Form: title=Imported Post, date=2026-06-13 Output: --- title: Imported Post date: '2026-06-13' draft: false --- # Imported # Note: old `permalink: /old-url/` was stripped — re-add it # if you need the legacy URL.
Tags surface as `page.tags` in Liquid
The YAML sequence the tool emits is what your Jekyll template loops over.
Output block:
---
tags:
- jekyll
- liquid
draft: false
---
Template usage:
{% for tag in page.tags %}
<span class="tag">{{ tag }}</span>
{% endfor %}Edge cases and what actually happens
Post in `_posts` does not appear on the built site
Jekyll silent skipJekyll skips any _posts file whose name lacks the YYYY-MM-DD- prefix, or whose frontmatter does not parse. This tool guarantees a valid block, but it cannot rename your file — save it as 2026-06-13-my-slug.md or the post will silently not render.
Filename date differs from the `date:` key
URL mismatchJekyll builds the post URL from the filename date, while date: controls sort order and the displayed date. If they disagree, your published date and URL date diverge. Keep both identical — the Date field in the form does not rename the file for you.
`draft: false` written, but you wanted a draft
Wrong modelJekyll has no draft key; it uses a _drafts/ folder (dateless filenames, shown only with --drafts). The tool always emits draft: false. For an actual Jekyll draft, delete that line and move the file into _drafts/.
Post renders as raw text, no theme
Missing layoutIf layout: is absent and you have not set a defaults layout in _config.yml, Jekyll renders the body without your theme. Add layout: post to the downloaded block — it is not one of the six form fields.
Unquoted colon in title broke an earlier build
FixedA title like Jekyll: A Primer typed directly into YAML fails to parse and the post vanishes from the build. The serializer quotes it ('Jekyll: A Primer'), so this class of failure is prevented when you use the form.
Wanting `categories` from the URL or a key
Not a fieldThere is no categories control. Jekyll can derive categories from the folder path, or you can add a categories: key by hand. Folding categories into the comma-separated Tags field changes their meaning in Liquid, so add the explicit key instead.
Future-dated post is hidden
ExpectedJekyll hides posts whose date is in the future unless you build with --future. If you set a future Date in the form (and matching filename), the post will not appear until that date — this is Jekyll behaviour, not a tool bug.
TOML block on the imported file
ReplacedJekyll itself does not use TOML, but an imported Hugo post might carry a +++ block. The splitter strips it and writes YAML. Any Hugo-specific keys inside are discarded — copy what you need first.
Frequently asked questions
Should the date match the filename?
Yes — and this is the most common Jekyll gotcha. Jekyll derives the post URL from the filename, which must be YYYY-MM-DD-slug.md. The Date field in the form fills the date: key (used for sort order and display) but it does not rename the file. Set both to the same date so your URL and displayed date agree.
How do I set the layout?
Add layout: post to the downloaded block by hand — the form has no layout field. Alternatively, set a default in _config.yml under defaults so every file in _posts gets layout: post automatically and you never type it per-post.
Why does the output include `draft: false`? Jekyll doesn't use it.
The draft field defaults to false and is always written. Jekyll has no draft key — it uses a _drafts/ folder instead. For a published post, simply delete the draft: false line. For an unpublished one, remove the line and move the file into _drafts/ (with a dateless filename).
Will this work on GitHub Pages?
Yes. GitHub Pages runs Jekyll and reads the same --- YAML frontmatter, so the output works with no extra configuration. Just keep within the Pages-supported plugin set and follow the _posts filename convention.
Can I add Jekyll plugin-specific fields?
Not through the form — it has six fixed fields. Plugin keys (jekyll-seo-tag's image, jekyll-feed settings, pagination keys) must be added manually to the downloaded block. If you import a post that already has them, note they are stripped when the block is rebuilt, so copy them first.
How do categories work?
There is no categories field. Jekyll can infer categories from the folder structure under _posts, or you can add a categories: key by hand. Don't put categories in the Tags field — Jekyll exposes those separately as page.tags vs page.categories.
Does it output YAML or TOML?
Always YAML, delimited by ---, which is exactly what Jekyll expects. The tool never emits TOML. If you imported a Hugo post with a +++ TOML block, the tool strips it and writes YAML in its place.
Will my existing frontmatter be kept?
No — an existing leading YAML or TOML block is stripped and rebuilt from the six form fields. Jekyll-specific keys not in those six (layout, categories, permalink, custom plugin keys) are discarded. Copy them out before running, then re-add them to the downloaded block.
Does the date auto-fill?
No. The Date field is blank until you type an ISO date like 2026-06-13. There is no auto-insert of today's date, and the value is written exactly as typed.
Can I batch a whole `_posts` folder?
No — the tool processes one file or one paste at a time. For a folder migration, run posts individually, or script the same split-and-prepend logic in a build step. Remember each file still needs the YYYY-MM-DD- filename prefix.
Is my post content sent to a server?
No. Processing runs in your browser whether you paste the post or upload a single .md/.txt. Only an anonymous processed-file counter is stored server-side for dashboard stats; the post body and metadata never leave your machine.
What other tools help with a Jekyll site?
Generate a post TOC with md-toc-generator, validate links before pushing to Pages with md-link-validator, lint the Markdown body with md-lint, and fix relative image paths during a restructure with md-image-path-rewriter.
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.