Agent skill

Blog Schema

by AgriciDaniel in AgriciDaniel/claude-blog

Generate complete JSON-LD schema markup for blog posts with Article/BlogPosting, Person, Organization, BreadcrumbList, ImageObject, and optional FAQPage.

MITAuto-check passedMarketing & SEO

Install Blog Schema

skills CLI
$ npx skills add AgriciDaniel/claude-blog --skill blog-schema -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install AgriciDaniel/claude-blog blog-schema --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/AgriciDaniel/claude-blog.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/blog-schema .claude/skills/blog-schema && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
blog-schema
GitHub stars
2.3k
Token cost
~2.7k tokens
SKILL.md length
959 words
Files
1
Skills in repo
39
Repo updated
First seen
Licence
MIT

At a glance

Generate complete JSON-LD schema markup for blog posts with Article/BlogPosting, Person, Organization, BreadcrumbList, ImageObject, and optional FAQPage.

  • Works in 10 steps: Read Content → Generate BlogPosting Schema → Generate Person Schema → …
  • User says schema
  • Reaches twitter.com and linkedin.com
  • Structured data

What it does

Blog Schema is an agent skill from AgriciDaniel/claude-blog. Generate complete JSON-LD schema markup for blog posts with Article/BlogPosting, Person, Organization, BreadcrumbList, ImageObject, and optional FAQPage. Validates against Google requirements and warns about deprecated types. Use when user says "schema", "blog schema", "json-ld", "structured data", "schema markup", "generate schema".

Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Marketing & SEO, covering Schema markup and Blog and article writing. The repository describes itself as: Claude Code blog skill suite: 30 sub-skills, 5 agents, 5-gate v1.9.0 Blog Delivery Contract, dual-optimized for Google rankings and AI citations. Active development at… The licence is MIT.

When your agent uses it

  • User says schema
  • Structured data
  • Generate schema

Example prompts

  • “schema”
  • “blog schema”
  • “json-ld”
  • “/blog-schema”

Workflow steps

10 steps, taken from the step headings in SKILL.md.

  1. Read Content
  2. Generate BlogPosting Schema
  3. Generate Person Schema
  4. Generate Organization Schema
  5. Generate BreadcrumbList
  6. Generate FAQPage Entity Schema (Optional)
  7. Generate VideoObject (if videos present)
  8. 5: Generate ImageObject
  9. Validate & Warn
  10. Output

What it can do on your machine

Read from SKILL.md and the folder at commit 2500d4c. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are json and html).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • twitter.com
    • linkedin.com
    • github.com
    • youtube.com
    • img.youtube.com
    • cdn.pixabay.com
    • schema.org

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Blog Schema loads about 2.7k tokens when it runs. Until then it costs about 87 tokens; SKILL.md has 959 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~87
When it runs · the whole SKILL.md, loaded when a task matches
~2.7k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from AgriciDaniel/claude-blog at commit 2500d4c, republished under its MIT licence (© AgriciDaniel). 959 words, ~2,675 tokens.

Download SKILL.mdSave it as .claude/skills/blog-schema/SKILL.md (or your agent's skills folder).
name
blog-schema
description
Generate complete JSON-LD schema markup for blog posts with Article/BlogPosting, Person, Organization, BreadcrumbList, ImageObject, and optional FAQPage. Validates against Google requirements and warns about deprecated types. Use when user says "schema", "blog schema", "json-ld", "structured data", "schema markup", "generate schema".
user-invokable
true
argument-hint
<file-path>
license
MIT

Blog Schema: JSON-LD Structured Data Generation

Generates complete, validated JSON-LD schema markup for blog posts using the @graph pattern. Combines multiple schema types into a single script tag with stable @id references for entity linking.

Workflow

Step 1: Read Content

Read the blog post and extract all schema-relevant data:

  • Title (headline)
  • Author (name, job title, social links, credentials)
  • Dates (datePublished, dateModified / lastUpdated)
  • Description (meta description)
  • FAQ section (question and answer pairs)
  • Images (cover image URL, dimensions, alt text; inline images)
  • Organization info (site name, URL, logo)
  • Word count (approximate from content length)
  • Tags/categories (for BreadcrumbList category)
  • Slug (from filename or frontmatter)
Step 2: Generate BlogPosting Schema

Complete BlogPosting with recommended properties when applicable:

json
{
  "@type": "BlogPosting",
  "@id": "{siteUrl}/blog/{slug}#article",
  "headline": "Concise post title",
  "description": "Concise page-specific meta description",
  "datePublished": "YYYY-MM-DD",
  "dateModified": "YYYY-MM-DD",
  "author": { "@id": "{siteUrl}/author/{author-slug}#person" },
  "publisher": { "@id": "{siteUrl}#organization" },
  "image": { "@id": "{siteUrl}/blog/{slug}#primaryimage" },
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "{siteUrl}/blog/{slug}"
  },
  "wordCount": 2400,
  "articleBody": "First 200 characters of content as excerpt..."
}

Google's Article structured data docs do not define required Article properties. Include headline, datePublished, author, publisher, and image when applicable, validate with the Rich Results Test, and treat missing fields as warnings unless the target surface requires them. Recommended properties: description, dateModified, mainEntityOfPage, wordCount, articleBody (excerpt).

Step 3: Generate Person Schema

Author schema with stable @id for cross-referencing:

json
{
  "@type": "Person",
  "@id": "{siteUrl}/author/{author-slug}#person",
  "name": "Author Name",
  "jobTitle": "Role or Title",
  "url": "{siteUrl}/author/{author-slug}",
  "sameAs": [
    "https://twitter.com/handle",
    "https://linkedin.com/in/handle",
    "https://github.com/handle"
  ]
}

Optional properties (include when available):

  • alumniOf - Educational institution (Organization type)
  • worksFor - Employer (reference to Organization @id if same entity)
Step 4: Generate Organization Schema

Blog's parent organization entity:

json
{
  "@type": "Organization",
  "@id": "{siteUrl}#organization",
  "name": "Organization Name",
  "url": "{siteUrl}",
  "logo": {
    "@type": "ImageObject",
    "url": "{siteUrl}/logo.png",
    "width": 600,
    "height": 60
  },
  "sameAs": [
    "https://twitter.com/org",
    "https://linkedin.com/company/org",
    "https://github.com/org"
  ]
}

Logo requirements: use a valid crawlable image URL and follow the active Organization and Article documentation for the target surface. Do not invent hard logo dimensions unless the project or current docs require them.

Step 5: Generate BreadcrumbList

Navigation breadcrumb schema showing content hierarchy:

json
{
  "@type": "BreadcrumbList",
  "@id": "{siteUrl}/blog/{slug}#breadcrumb",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "{siteUrl}"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Category Name",
      "item": "{siteUrl}/blog/category/{category-slug}"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Post Title",
      "item": "{siteUrl}/blog/{slug}"
    }
  ]
}

If no category is available, use "Blog" as the second breadcrumb item with {siteUrl}/blog as the URL.

Step 6: Generate FAQPage Entity Schema (Optional)

Extract Q&A pairs from the blog post's FAQ section:

json
{
  "@type": "FAQPage",
  "@id": "{siteUrl}/blog/{slug}#faq",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "What is the question?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "The complete visible answer text."
      }
    }
  ]
}

Google retired FAQ rich results for all sites on 2026-05-07. FAQPage is not a Google rich-result or generative-AI optimization path, and it earns no SEO or AI-readiness credit. Only emit it when a visible FAQ genuinely helps readers, with at least one valid Question and matching visible answer. Do not pad an answer to a target length or add an FAQ solely for markup.

Do not substitute QAPage. Google supports QAPage for a page focused on one question where users can submit answers. Editorial FAQs, support FAQs, and blog Q&A sections do not meet that model.

Step 7: Generate VideoObject (if videos present)

For each YouTube video embedded in the post, generate a VideoObject schema:

json
{
  "@type": "VideoObject",
  "@id": "{siteUrl}/blog/{slug}#video-{index}",
  "name": "Video title",
  "description": "Video description excerpt (first 200 chars)",
  "thumbnailUrl": "https://img.youtube.com/vi/{videoId}/hqdefault.jpg",
  "uploadDate": "{ISO 8601 date}",
  "contentUrl": "https://www.youtube.com/watch?v={videoId}",
  "embedUrl": "https://www.youtube.com/embed/{videoId}",
  "duration": "PT{M}M{S}S",
  "interactionStatistic": {
    "@type": "InteractionCounter",
    "interactionType": { "@type": "WatchAction" },
    "userInteractionCount": {viewCount}
  }
}

Add each VideoObject to the @graph array. Use #video-1, #video-2 etc. for the @id fragment. Extract video metadata from the embed's noscript fallback or from YouTube Data API if available via blog-google.

Step 7.5: Generate ImageObject

Cover image schema for the post's primary image:

json
{
  "@type": "ImageObject",
  "@id": "{siteUrl}/blog/{slug}#primaryimage",
  "url": "https://cdn.pixabay.com/photo/.../image.jpg",
  "width": 1200,
  "height": 630,
  "caption": "Descriptive caption matching alt text"
}

Image requirements:

  • URL must be crawlable and publicly accessible
  • Width and height should reflect actual image dimensions
  • Caption should match or closely align with the image alt text
  • Preferred dimensions: 1200x630 (OG-compatible) or 1920x1080
Show full SKILL.md (490 more words)Show less
Step 8: Validate & Warn

Check per-surface support before recommending schema types:

TypeGoogle Search statusValid entity/context use
HowToNo current Google rich-result experienceValid schema.org type for genuine how-to content
DatasetUsed by Dataset Search, not general Google Search rich resultsValid only for an actual dataset
QAPageSupported for one question with user-submitted answersDo not use for editorial FAQ content
CourseCourse list remains distinct from the retired Course Info experienceUse only when the current Course list documentation and visible content match
ClaimReview, SpecialAnnouncement, Course Info, Estimated Salary, Learning Video, Vehicle ListingFormer Google Search experiences; support was retiredMay remain schema.org-valid, but never recommend them for Google eligibility
PracticeProblemRemoved from Google Search and its documentationDo not recommend for Google eligibility
Sitelinks Search BoxNo dedicated Google Search visual elementGoogle generates sitelinks algorithmically

Validation checks:

  1. All @id references resolve to entities within the @graph
  2. dateModified is equal to or after datePublished
  3. headline is concise. Warn when it may truncate or becomes unclear
  4. description is concise, page-specific, and not duplicated across posts
  5. All URLs are absolute (not relative)
  6. Image dimensions are positive integers
  7. BreadcrumbList positions are sequential starting from 1
  8. If FAQPage is emitted, visible Q&A content exists and includes at least 1 valid Question

Generative AI note: Structured data is not required for Google generative AI search, and there is no special AI schema. Prioritize accurate, visible-content-consistent Article/BlogPosting, Person, Organization, and BreadcrumbList entities. Add ImageObject or VideoObject when the assets exist. FAQPage remains optional reader-facing markup and adds no Google AI advantage.

Step 9: Output

Combine all schemas into a single <script> tag using the @graph pattern:

Security requirement: build the JSON-LD with a real JSON encoder, never string interpolation. Before embedding in HTML, make the JSON text script-safe by escaping closing script sequences and literal less-than characters, for example replace </ with <\/ and < with \u003c. User-controlled fields such as headline, description, author name, image URL, and breadcrumb labels must only enter the block as JSON-encoded values.

html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    { "@type": "BlogPosting", ... },
    { "@type": "Person", ... },
    { "@type": "Organization", ... },
    { "@type": "BreadcrumbList", ... },
    { "@type": "FAQPage", ... },
    { "@type": "VideoObject", ... },
    { "@type": "ImageObject", ... }
  ]
}
</script>

@graph pattern benefits:

  • Single script tag instead of multiple - cleaner HTML
  • Entity linking via stable @id references (e.g., author references Person by @id)
  • Google and AI systems parse @graph arrays correctly
  • Easier to maintain and update as a single block

Output options:

  • Embedded HTML - Ready to paste into <head> or before </body>
  • Standalone JSON - For CMS schema fields or API injection
  • MDX component - If the project uses MDX, wrap in a component

Save the generated schema to the blog post file or to a separate schema file as the user prefers.

Google can process JSON-LD generated by JavaScript when it is present in the rendered DOM. Server-rendered markup is still more portable for non-Google crawlers, but source-only JSON-LD is not a Google requirement. For dynamic markup, validate the rendered URL, confirm the values match visible content, and avoid delayed or failed client requests that leave the rendered DOM empty.

© AgriciDaniel, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/blog-schema of AgriciDaniel/claude-blog.

Open the folder on GitHubat commit 2500d4c

Compare with similar skills

Blog Schema next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Blog Schema compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Blog Schema this skillAgriciDaniel/claude-blog2.3k—~2.7kAutomated safety check: PassMIT
SEOgridaco/grida2.7k—~2.1kAutomated safety check: PassApache-2.0
SEO Optimizersecondsky/claude-skills227—~1.6kAutomated safety check: PassMIT
Youtube Search API Skillbrowser-act/skills6.1k1 repos~1.5kAutomated safety check: PassMIT
Wordpress Centric High SEO Optimized Blogwriting Skillsickn33/agentic-awesome-skills47k1 repos~2.1kAutomated safety check: PassMIT
Article Writingericrisco/rsc-harness174—~2.9kAutomated safety check: PassMIT

Similar skills

  • SEO

    gridaco/grida

    SEO best practices for the Grida project across Next.js pages, blog posts, and documentation.

    2.7k GitHub stars~2.1k tokensUpdated yesterday
    Marketing & SEOAuto-check passed
  • SEO Optimizer

    secondsky/claude-skills

    SEO optimization with keyword analysis, readability assessment, technical validation, content quality.

    227 GitHub stars~1.6k tokensUpdated 11 days ago
    Marketing & SEOAuto-check passed
  • Youtube Search API Skill

    browser-act/skills

    This skill helps users automatically extract structured data from YouTube search results using the BrowserAct API.

    6.1k GitHub starsUsed in 1 repo~1.5k tokens
    Marketing & SEOAuto-check passed
  • Generate clean, human-sounding, SEO-optimized WordPress blog posts with optional Yoast metadata, JSON-LD schema markup, and image SEO planning.

    47k GitHub starsUsed in 1 repo~2.1k tokens
    Writing & ContentAuto-check passed
  • Article Writing

    ericrisco/rsc-harness

    A skill your agent uses when writing one long-form article end to end — answer-first lede, question-shaped headings, plus its on-page surface (title, meta, slug, FAQ, Article/FAQPage JSON-LD) — or…

    174 GitHub stars~2.9k tokensUpdated yesterday
    Writing & ContentAuto-check passed
  • SEO Geo

    ericrisco/rsc-harness

    A skill your agent uses when one existing page needs to rank in Google AND get cited by AI answer engines — auditing a URL for on-page SEO, structured-data JSON-LD, GEO citation levers, Core Web…

    174 GitHub stars~2.8k tokensUpdated yesterday
    Marketing & SEOAuto-check passed

More from AgriciDaniel/claude-blog

All 39 skills in this repo
  • Blog Google

    AgriciDaniel/claude-blog

    Google API integration for blog performance: PageSpeed Insights, CrUX Core Web Vitals with 25-week history, Search Console performance, URL Inspection, Indexing API, GA4 organic traffic, NLP entity…

    2.3k GitHub starsUsed in 1 repo~3.3k tokens
    Auto-check: notes
  • Blog Audio

    AgriciDaniel/claude-blog

    Generate audio narration of blog posts using Google Gemini TTS.

    2.3k GitHub starsUsed in 1 repo~2.2k tokens
    Auto-check: notes
  • Blog Flow

    AgriciDaniel/claude-blog

    FLOW framework integration for bloggers. An agent skill from AgriciDaniel/claude-blog.

    2.3k GitHub starsUsed in 1 repo~2k tokens
    Auto-check passed
  • Blog Notebooklm

    AgriciDaniel/claude-blog

    Query Google NotebookLM notebooks for source-grounded, citation-backed answers from user-uploaded documents.

    2.3k GitHub starsUsed in 1 repo~2.5k tokens
    Auto-check: warnings
  • Blog Image

    AgriciDaniel/claude-blog

    AI image generation and editing for blog content powered by Gemini via MCP.

    2.3k GitHub stars~3.4k tokensUpdated today
    Auto-check passed
  • Blog Cluster

    AgriciDaniel/claude-blog

    Semantic topic cluster planning and automated execution engine for claude-blog.

    2.3k GitHub starsUsed in 1 repo~4.9k tokens
    Auto-check passed

Questions about Blog Schema

What does Blog Schema do?

Generate complete JSON-LD schema markup for blog posts with Article/BlogPosting, Person, Organization, BreadcrumbList, ImageObject, and optional FAQPage. Blog Schema is an agent skill from AgriciDaniel/claude-blog. Generate complete JSON-LD schema markup for blog posts with Article/BlogPosting, Person, Organization, BreadcrumbList, ImageObject, and optional FAQPage.

When should I use Blog Schema?

Blog Schema fits situations like: user says schema; structured data; generate schema.

How do I install Blog Schema in Claude Code?

Run `npx skills add AgriciDaniel/claude-blog --skill blog-schema -a claude-code`. Or copy the skill folder (skills/blog-schema in AgriciDaniel/claude-blog) into .claude/skills/blog-schema in your project. Claude Code loads it when a task matches its description.

How do I install Blog Schema in Codex?

Run `npx skills add AgriciDaniel/claude-blog --skill blog-schema -a codex`. Or copy the skill folder (skills/blog-schema in AgriciDaniel/claude-blog) into .agents/skills/blog-schema in your project. Codex loads it when a task matches its description.

Can I use Blog Schema in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add AgriciDaniel/claude-blog --skill blog-schema -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/blog-schema, .gemini/skills/blog-schema, .github/skills/blog-schema and .opencode/skills/blog-schema in your project.

What does Blog Schema need to run?

SKILL.md names no scripts, command-line tools or credentials: Blog Schema is instructions for the agent only.

Does Blog Schema access the network?

SKILL.md names 7 domains. In commands or code: twitter.com, linkedin.com, github.com, youtube.com, img.youtube.com, cdn.pixabay.com and schema.org; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.

Is Blog Schema safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Blog Schema use?

Blog Schema is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Blog Schema use?

About 2.7k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Blog Schema?

Skills that share tags, products or a category with Blog Schema: SEO (gridaco/grida, 2.7k stars), SEO Optimizer (secondsky/claude-skills, 227 stars), Youtube Search API Skill (browser-act/skills, 6.1k stars) and Wordpress Centric High SEO Optimized Blogwriting Skill (sickn33/agentic-awesome-skills, 47k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Blog Schema?

AgriciDaniel (a GitHub user) maintains it in AgriciDaniel/claude-blog, which has 2,347 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on October 9, 2026.

Source: AgriciDaniel/claude-blog on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.