schema.org 无 opensourceproject 类型,应选 softwareapplication 或 coderepository 并用 license、coderepository 等标准属性标明开源事实,嵌套时须显式声明 itemscope 和 itemtype。

itemtype 本身不提供“开源项目”这个标准类型,Schema.org 官方没有 https://schema.org/OpenSourceProject 这类 URI —— 直接这么写会被 Google、Bing 等完全忽略,结构化数据解析失败。
为什么找不到 itemtype="OpenSourceProject"
Schema.org 的类型体系是基于现实世界实体建模的(如 Person、SoftwareApplication、CodeRepository),不按“是否开源”做一级分类。开源只是软件的一个**属性**,不是独立实体类型。
- 常见误用:
itemtype="https://schema.org/OpenSourceProject"或自定义http://my.org/OSProject—— 所有主流爬虫都不识别 - 正确思路:选最贴近的 Schema 类型,再用标准属性表达“开源”事实
- 目前最匹配的是
https://schema.org/SoftwareApplication(强调功能与分发)或https://schema.org/CodeRepository(强调源码托管与协作)
用 SoftwareApplication 表达开源项目(推荐)
适用于展示项目主页、下载页、文档页等以“软件产品”为重心的页面。关键点在于用标准属性说明许可证和源码位置:
-
license必须是机器可读的 URL(如https://opensource.org/licenses/MIT),不能只写 “MIT” 文本 -
codeRepository应指向 Git 仓库首页(如 GitHub/GitLab 项目根路径),不是单个文件或 README 链接 -
sameAs可补充其他平台主页(如 OpenHub、SourceForge) - 避免把
isAccessibleForFree当作“开源”替代——它只表示免费使用,不等于开放源码
示例片段:
<div itemscope itemtype="https://schema.org/SoftwareApplication"> <h1 itemprop="name">Vue.js</h1> <meta itemprop="license" content="https://opensource.org/licenses/MIT"> <link itemprop="codeRepository" href="https://github.com/vuejs/core"> <link itemprop="sameAs" href="https://vuejs.org"> </div>
用 CodeRepository 表达开源项目(适合托管页)
适用于 GitHub/GitLab 项目首页这类以代码托管为核心场景的页面。注意它和 SoftwareApplication 的语义差异:
-
CodeRepository更强调“代码存在性”和“协作方式”,不强调运行时行为 - 必须配
programmingLanguage(字符串,如"JavaScript"),否则 Google Rich Results Test 可能报 warning -
license同样需完整 URL;sameAs可指向官网或演示页 - 不要在
CodeRepository下用offers或applicationCategory—— 这些是SoftwareApplication的属性,填了会被丢弃
示例片段:
<div itemscope itemtype="https://schema.org/CodeRepository"> <h1 itemprop="name">react-router</h1> <meta itemprop="programmingLanguage" content="JavaScript"> <meta itemprop="license" content="https://github.com/remix-run/react-router/blob/main/LICENSE"> <link itemprop="sameAs" href="https://reactrouter.com"> </div>
嵌套 license 和 repository 时容易漏掉 itemscope
如果项目许可证是自定义的(比如公司内部开源协议),或想显式标记许可证类型,不能只写 <meta itemprop="license"> —— 要把它当作一个独立实体嵌套:
- 必须加
itemscope itemtype="https://schema.org/CreativeWork"或"https://schema.org/DefinedTerm" - 子级
itemprop="url"指向协议文本,itemprop="name"写协议名(如"Apache-2.0") - 同理,
codeRepository若需补充分支、标签等信息,也得新建itemscope itemtype="https://schema.org/CodeRepository"嵌套,不能只靠父级一个<link>
最容易被忽略的是:每个嵌套层级都必须重新声明 itemscope 和对应 itemtype,缺一不可。Google 不会“推测”你省略了 scope。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











