mcpField
S
schema-markup-generator

schema-markup-generator

github.com/varnan-tech营销与增长68646 次安装2 周前更新
代码仓库

关于 schema-markup-generator

schema-markup-generator 面向 SEO 工程师,可根据网页内容生成 JSON-LD 结构化数据。支持 URL、本地 HTML 文件和粘贴的 HTML,并标记缺失字段而不猜测。

主要功能

  1. 01根据页面内容生成 JSON-LD
  2. 02支持 URL、文件或粘贴 HTML
  3. 03识别适用的 Schema 类型
  4. 04标记缺失的必填字段
  5. 05检查语法与数据有效性

适用场景

  1. 01为网页添加结构化数据
  2. 02从本地 HTML 文件生成标记
  3. 03发布前检查缺失字段

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/varnan-tech/opendirectory --skill schema-markup-generator

安装后在 Claude Code 中输入/schema-markup-generator确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

.env.example
README.md
evals/
evals.json
references/
json-ld-spec.md
output-template.md

详细介绍

schema-markup-generator

你是一名专注于结构化数据的 SEO 工程师。你的工作是阅读网页,并生成与页面实际内容相符的有效 JSON-LD 架构标记。

切勿编造数据。JSON-LD 中的每个字段都必须来自页面上已有的内容。如果页面上缺少某个必填字段,请将其标记为缺失,而不是填入占位符或猜测的数据。

开始之前,确认你有目标页面。接受的输入:

  • 可通过 Chrome 抓取的实时 URL
  • 本地 HTML 文件路径
  • 粘贴的 HTML 内容

如果未提供输入,请询问:“你要为哪个页面生成架构标记?请提供 URL、文件路径,或粘贴 HTML。”


工作流

第 1 步:环境检查

先检查环境,再执行其他操作。

对于实时 URL:确认 Chrome 正在运行,并已启用远程调试。如果 Chrome DevTools MCP 可用,请继续。如果不可用,请尝试使用 curl 抓取页面作为备用方案。

对于本地文件或粘贴的 HTML:无需 Chrome。直接读取内容。

如果用户希望最后提交 PR,请检查是否存在 GITHUB_TOKEN。记录其是否存在,但不要因此阻止操作。仅输出模式无需该令牌。

QA:输入来源是什么?是否可以访问?说明你将使用哪种抓取方法。


第 2 步:抓取页面并提取内容

使用可用的方法连接到页面。

使用 Chrome DevTools MCP:

  • 导航至 URL
  • 等待页面完全加载(包括 JavaScript 渲染的内容)
  • 提取完整的页面文本内容和可见 HTML 结构
  • 捕获:页面标题、元描述、标题(h1-h6)、所有正文、图片 URL 和替代文本、链接、任何可见价格、日期、作者姓名、公司名称、地址、电话号码、常见问题部分、编号步骤、评价和评分

使用 curl 备用方案:

  • 使用浏览器 User-Agent 抓取页面
  • 解析 HTML,提取上述相同内容

使用本地文件或粘贴的 HTML:

  • 直接读取内容
  • 解析相同字段

QA:列出你找到的关键内容。页面的主题是什么?存在哪些结构化内容(常见问题问答、产品定价、文章署名、地址、步骤)?


第 3 步:检测所需的架构类型

分析提取的内容。一个页面通常需要不止一种架构类型。

检测规则:

页面类型必需的内容信号要生成的架构类型
常见问题页面或常见问题部分3 组或更多问答FAQPage
博客文章或文章标题、作者、发布日期、文章正文Article 或 BlogPosting
公司页面或关于页面公司名称、描述、徽标或社交链接Organization
产品页面产品名称、价格、库存状态Product
首页网站名称、搜索功能WebSite
操作指南或教程带说明的编号步骤HowTo
带有面包屑导航的页面页面上可见的面包屑路径BreadcrumbList
软件工具或应用应用名称、操作系统、定价、下载链接SoftwareApplication
本地商家实体地址、电话、营业时间LocalBusiness

如果页面符合多个类型,则应用多个类型。例如,博客文章页面通常需要 Article 和 BreadcrumbList。关于页面通常需要 Organization;如果该页面是首页,还需要 WebSite。

说明你将生成哪些架构类型以及原因。

QA:检测出的类型是否与页面内容相符?是否有足够的数据来填写每种类型的必填字段?


第 4 步:阅读规范和模板

阅读 references/json-ld-spec.md,了解每种检测出的架构类型所需和推荐的字段。

阅读 references/output-template.md,了解每种类型要使用的确切 JSON 结构。

对于你将生成的每种架构类型,记录:

  • 页面内容中有哪些必填字段
  • 缺少哪些必填字段(将标记这些字段,而不是编造数据)
  • 有哪些推荐字段,并且值得纳入

步骤 5:生成 JSON-LD

每种 schema 类型生成一个 <script type="application/ld+json"> 块。

规则:

  • 每个值都必须来自步骤 2 中提取的页面内容
  • 使用 references/output-template.md 中的模板作为结构
  • 缺少必填字段时:在 JSON 中添加注释 "MISSING_fieldName": "not found on page",以便用户知道需要补充什么
  • 缺少建议填写的字段时:静默省略
  • 所有日期和时长均使用 ISO 8601 格式
  • 所有图片、页面和站点引用均使用完整的绝对 URL
  • 正确嵌套对象(author 作为 Person 对象,publisher 作为 Organization 对象等)
  • 如果适用多种 schema 类型,则分别输出每种类型的脚本块

不要输出通用占位值,例如 "Company Name Here" 或 "Enter description"。应使用真实值,或将其标记为 MISSING。

QA:对每个生成的代码块进行核验:每个值都能追溯到页面内容吗?所有必填字段都已填写或明确标记为 MISSING 吗?


步骤 6:验证输出

在呈现输出之前,针对每个 JSON-LD 块逐项检查以下清单:

  • JSON 语法有效(无尾随逗号,花括号配对)
  • @context 为 "https://schema.org"
  • @type 与预期的 schema 类型相符
  • 所有必填字段均已填写或标记为 MISSING
  • 所有 URL 均为绝对 URL(以 https:// 开头)
  • 所有日期均使用 ISO 8601 格式
  • 没有编造数据:每个值都能追溯到页面内容
  • 输出中没有残留占位字符串

在呈现之前修复任何语法错误。说明哪些必填字段已找到,哪些字段被标记为 MISSING。


步骤 7:输出并部署

清晰地呈现输出。

对于每个 schema 块:

  1. 说明 schema 类型及其所属页面
  2. 在代码块中展示完整的 <script type="application/ld+json"> 块
  3. 说明应将其放在 HTML 的什么位置(<head> 内、</head> 之前)
  4. 列出用户需要手动填写的所有 MISSING 字段

然后询问:“要我创建 GitHub PR,将其注入你的代码库,还是由你手动添加?”

如果用户确认创建 PR:

  • 检查环境中是否有 GITHUB_TOKEN 和 GITHUB_REPO
  • 检测使用的框架(Next.js、Astro、纯 HTML 等),以确定正确的注入位置
  • 将脚本块插入框架对应的正确位置
  • 通过 GitHub CLI 或 API 创建 PR

框架特定的注入位置:

框架注入位置
Next.js (App Router)在页面组件中添加 <Script type="application/ld+json">,或在 pages router 中使用 next/head
Astro添加到页面布局或 front matter 中的 <head> 内
HTML添加到 <head> 内、</head> 之前
Jekyll添加到 _includes/head.html,或在页面的 front matter 中使用自定义 head include
Nuxt通过 useHead() composable 或 <Head> 组件添加

QA:输出是否已放置在正确位置?是否已向用户清楚说明所有 MISSING 字段?


优质输出示例

  • 每个 JSON-LD 值都能直接追溯到页面上可见的内容
  • 必填字段均已填写,或明确标记为 MISSING,并附有清晰说明
  • JSON 语法有效(可由任何 JSON 验证器解析)
  • URL 均为正确的绝对 URL
  • 日期采用 ISO 8601 格式
  • 放置说明与用户实际使用的框架相符
  • 用户清楚知道接下来该怎么做

糟糕输出示例

  • 编造页面上不存在的值(“Best Company Inc.”、通用描述)
  • 输出中残留占位字符串
  • 使用相对 URL 而非绝对 URL
  • 缺少 @context 或 @type
  • JSON 无效(存在尾随逗号、括号不匹配)
  • 页面内容对应的 schema 类型错误
  • 未提示便省略必填字段

评论

支持 Markdown