Skip to content
Back to skills

Schema Maker

ASecurity

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'.

  • 19 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added August 31, 2026
ai-agentspythongobashnode

Works with

  • claude code
  • cli

Security analysis

A100/100

Pro scans all 5 files and shows the line behind each finding

Scanned August 31, 2026

npx -y skills add Mikefluff/skills --skill schema-maker --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Schema Maker?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Schema Maker
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/mikefluff-schema-maker/badge)](https://www.skillsdirectory.com/skills/mikefluff-schema-maker)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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.

```bash
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.

Files in this skill

  • SKILL.md4.3 KB
  • examples/.gitkeep68 B
  • references/.gitkeep140 B
  • references/llms-txt.md2.1 KB
  • references/types.md3.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.