/schema-maker
Generate JSON-LD structured data (Article, FAQPage, HowTo, Organization, Person with knowsAbout) and llms.txt from a markdown post. Schema is now a citation lever for AI answer engines rather than a rich-result one. Use when: 'add schema markup', 'JSON-LD for this post',
$ npx -y skills add Mikefluff/skills --skill schema-maker --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/schema-maker
Context preview
The summary Claude sees to decide when to auto-load this skill.
Generate JSON-LD structured data (Article, FAQPage, HowTo, Organization, Person with knowsAbout) and llms.txt from a markdown post. Schema is now a citation lever for AI answer engines rather than a rich-result one. Use when: 'add schema markup', 'JSON-LD for this post',
SKILL.md
schema-maker.SKILL.mdname: schema-maker
description: "Generate JSON-LD structured data (Article, FAQPage, HowTo, Organization, Person with knowsAbout) and llms.txt from a markdown post. Schema is now a citation lever for AI answer engines rather than a rich-result one. Use when: 'add schema markup', 'JSON-LD for this post', 'structured data', 'разметка schema.org', 'llms.txt'."
license: MIT
allowed-tools:
- Read
- Write
- Edit
- Bash
- Grep
- Glob
<objective> Turn a finished markdown post into the structured data that decides whether an answer engine can quote it. Deterministic: reads frontmatter and headings, emits validated JSON-LD. No model call, no network. </objective>
ROLE
Structured data used to be about rich results in Google. That era ended on 2026-05-07, when Google retired the FAQ rich result. The markup did not stop mattering — it changed job. AI Overviews, ChatGPT browsing, Perplexity and Gemini parse `FAQPage` first when deciding whose answer to quote, and pages carrying Tier 1 schema turn up in AI summaries markedly more often than pages without it.
So this skill optimises for citation, not for a SERP widget.
Not for writing the copy — that is `landing-copy` (marketing surfaces) or `essay-write` (longform). Not for checking whether the prose is extractable — that is `writer --aeo`. This skill assumes the text exists and describes it.
PIPELINE
1. **Read the post.** Frontmatter supplies title, date, description and tags. The body supplies the FAQ pairs.
2. **Extract Q&A automatically.** Every question-form `##` / `###` heading plus the first paragraph under it becomes a `Question` / `acceptedAnswer` pair. This is why question headings are worth the trouble twice over: they help a human scan, and they are what an engine lifts. Run `writer --aeo` first if the headings are still statements.
3. **Attach the author entity.** `knowsAbout` is the property that ties an author to a topic, and author authority became a direct ranking input in the March 2026 update. An author node without `knowsAbout` and `sameAs` is a name, not an entity.
4. **Emit one graph.** Several types go into `@graph` rather than several script tags, so a parser can resolve references between them.
5. **Paste into the page head.** For a static site, into the layout template or the post's frontmatter, depending on the generator.
python3 -m common.runners.cli.schema --from ./post.md \
--url "https://you.dev/posts/model-drift/" \
--author-name "Your Name" --author-url "https://you.dev/about" \
--knows-about "Claude Code,SEO" \
--publisher-name "You" --publisher-url "https://you.dev"
MODES
- `--from <file.md>` — read frontmatter + body
- `--types article,faq,organization` — which nodes to emit (default `article,faq`)
- `--url` — canonical URL of the page
- `--author-name` / `--author-url` / `--knows-about` / `--same-as` — the author entity
- `--publisher-name` / `--publisher-url`
- `--date-modified` — ISO date; defaults to `datePublished`
- `--raw` — omit the `<script>` wrapper
- `--llms-txt --site-name X --site-summary Y` — render an llms.txt instead
REFERENCES (load on demand)
| File | When to load | |---|---| | [references/types.md](references/types.md) | Which schema type fits the page, and what each one needs to be valid | | [references/llms-txt.md](references/llms-txt.md) | Before promising anything about llms.txt — the honest state of the convention |
CONSTRAINTS
- **Never describe content that is not on the page.** Schema that disagrees with
the visible text is spam under Google's structured-data policy, and it is the one failure here that can cost a manual action rather than just doing nothing.
- **FAQ questions must be questions.** A statement in a `Question` node is
rejected rather than emitted — the whole value is that engines lift the pair verbatim, and a statement defeats it.
- **`dateModified` is not optional in practice.** Freshness is read from both
dates. An article that never declares a modification date reads as unmaintained however recently it was edited.
- **Headlines over 110 characters are rejected.** The Article type documents the
limit and Google truncates past it.
- **Do not oversell llms.txt.** It is a community convention with no standards
body and no vendor committed to reading it in production. Cheap and harmless, not a lever.
Read more
name: schema-maker description: "Generate JSON-LD structured data (Article, FAQPage, HowTo, Organization, Person with knowsAbout) and llms.txt from a markdown post. Schema is now a citation lever for AI answer engines rather than a rich-result one. Use when: 'add schema markup', 'JSON-LD for this post', 'structured data', 'разметка schema.org', 'llms.txt'." license: MIT allowed-tools: - Read - Write - Edit - Bash - Grep - Glob
<objective> Turn a finished markdown post into the structured data that decides whether an answer engine can quote it. Deterministic: reads frontmatter and headings, emits validated JSON-LD. No model call, no network. </objective>
ROLE
Structured data used to be about rich results in Google. That era ended on 2026-05-07, when Google retired the FAQ rich result. The markup did not stop mattering — it changed job. AI Overviews, ChatGPT browsing, Perplexity and Gemini parse `FAQPage` first when deciding whose answer to quote, and pages carrying Tier 1 schema turn up in AI summaries markedly more often than pages without it.
So this skill optimises for citation, not for a SERP widget.
Not for writing the copy — that is `landing-copy` (marketing surfaces) or `essay-write` (longform). Not for checking whether the prose is extractable — that is `writer --aeo`. This skill assumes the text exists and describes it.
PIPELINE
1. **Read the post.** Frontmatter supplies title, date, description and tags. The body supplies the FAQ pairs.
2. **Extract Q&A automatically.** Every question-form `##` / `###` heading plus the first paragraph under it becomes a `Question` / `acceptedAnswer` pair. This is why question headings are worth the trouble twice over: they help a human scan, and they are what an engine lifts. Run `writer --aeo` first if the headings are still statements.
3. **Attach the author entity.** `knowsAbout` is the property that ties an author to a topic, and author authority became a direct ranking input in the March 2026 update. An author node without `knowsAbout` and `sameAs` is a name, not an entity.
4. **Emit one graph.** Several types go into `@graph` rather than several script tags, so a parser can resolve references between them.
5. **Paste into the page head.** For a static site, into the layout template or the post's frontmatter, depending on the generator.
python3 -m common.runners.cli.schema --from ./post.md \ --url "https://you.dev/posts/model-drift/" \ --author-name "Your Name" --author-url "https://you.dev/about" \ --knows-about "Claude Code,SEO" \ --publisher-name "You" --publisher-url "https://you.dev"
MODES
- `--from <file.md>` — read frontmatter + body
- `--types article,faq,organization` — which nodes to emit (default `article,faq`)
- `--url` — canonical URL of the page
- `--author-name` / `--author-url` / `--knows-about` / `--same-as` — the author entity
- `--publisher-name` / `--publisher-url`
- `--date-modified` — ISO date; defaults to `datePublished`
- `--raw` — omit the `<script>` wrapper
- `--llms-txt --site-name X --site-summary Y` — render an llms.txt instead
REFERENCES (load on demand)
| File | When to load | |---|---| | [references/types.md](references/types.md) | Which schema type fits the page, and what each one needs to be valid | | [references/llms-txt.md](references/llms-txt.md) | Before promising anything about llms.txt — the honest state of the convention |
CONSTRAINTS
- **Never describe content that is not on the page.** Schema that disagrees with
the visible text is spam under Google's structured-data policy, and it is the one failure here that can cost a manual action rather than just doing nothing.
- **FAQ questions must be questions.** A statement in a `Question` node is
rejected rather than emitted — the whole value is that engines lift the pair verbatim, and a statement defeats it.
- **`dateModified` is not optional in practice.** Freshness is read from both
dates. An article that never declares a modification date reads as unmaintained however recently it was edited.
- **Headlines over 110 characters are rejected.** The Article type documents the
limit and Google truncates past it.
- **Do not oversell llms.txt.** It is a community convention with no standards
body and no vendor committed to reading it in production. Cheap and harmless, not a lever.
43 skills for Claude Code that make content — and refuse to let it read like a machine made it. Prose editing that strips the tells. Prompt engineering for 40+ image, video and music models, with optional one-command execution against the real APIs.
Repo: Mikefluff/skills
Other skills on mikefluff-skills.
- /audio-mix-maker
Mix music/audio onto an existing video via ffmpeg. Modes: replace, overlay, duck (sidechain compressor lowers music under speech). Volume + fade controls. Pure ffmpeg, no API. Use when: 'mix this music onto the video', 'add background music to video', 'duck the music under
Open skill - /avatar-maker
Turn a user photo into N profile-pic / headshot / avatar variants in a consistent style. Identity-preserve focused, defaults to nano-banana-pro. Multi-aspect (square, square-tight, cover 4:5, story 9:16). Use when: 'make me an avatar', 'profile picture from this photo',
Open skill - /banner-maker
Banner-ad / display-creative generator with standard-size presets: Google Display (leaderboard, medium rectangle, mobile, skyscraper), LinkedIn, OG image, Twitter card, Facebook ad, header. Text-heavy ad aesthetic, ideogram-3-quality default. Use when: 'banner ad', 'display ad',
Open skill - /bg-remover
Background removal utility — image in, transparent PNG out. Wraps Replicate-hosted models (851-labs/background-remover default; alternatives via --replicate-model). Use when: 'remove the background', 'cut out the subject', 'transparent PNG', 'убери фон', 'вырежи фон с фотки'.
Open skill - /canon-check
Read-only story-bible auditor for fiction series with a documented canon. Cross-references character / artifact / location mentions in chapters against the bible and flags drift. Produces a drift report — never edits files. Use before opening or committing a chapter, or when
Open skill - /carousel-builder
Turn a topic or research brief into an N-slide Instagram / LinkedIn / TikTok carousel with consistent visual style and ready-to-post captions. Modes: --topic / --research; --slides 3-12; --platform; --aspect; --text-mode. Use when: 'make a carousel about X', 'turn this research
Open skill

