In short. Use DefinedTermSet for the vocabulary and hasDefinedTerm for its DefinedTerm entries, while keeping names and definitions visible on the page.
Definition: A controlled vocabulary is a set of terms with formal definitions, such as categories, a classification scheme, a glossary, a dictionary, or an enumeration. Schema.org models that set with
DefinedTermSetand connects its entries withhasDefinedTerm, whose values areDefinedTermobjects.
Key facts
- Schema.org defines
DefinedTermSetas a set of defined terms and says thataboutspecifies what the set is about. DefinedTermSet - The
hasDefinedTermproperty describes a defined term contained in a term set and is used onDefinedTermSet. hasDefinedTerm - A
DefinedTermhas a formal definition. Schema.org documentsname,description,about, and the optionaltermCodefor a code allocated within the set. DefinedTerm - Google Search Central describes structured data as a standardized format for providing information about a page and classifying its content. Introduction to structured data markup
What does DefinedTermSet describe?
Schema.org defines DefinedTermSet as a set of defined terms. Its examples include categories, a classification scheme, a glossary, a dictionary, and an enumeration. The type is placed under CreativeWork, so the set itself can carry properties inherited from that type, including name, description, and about. The about property identifies the subject matter of the set, while hasDefinedTerm links the set to each contained term. The Schema.org page shows version V30.1 dated 16 September 2026.
The set should represent the vocabulary published on the page. A glossary page can describe the glossary as the DefinedTermSet; a category page can describe its classification scheme. The model expresses the relationship between the collection and its entries instead of placing every term in an unrelated page-level field.
How should each entry be modeled?
Schema.org defines DefinedTerm as a word, name, acronym, phrase, or similar item with a formal definition. Its guidance assigns the term's label to name, its explanation to description, and its subject matter to about. termCode identifies the term within a DefinedTermSet when an alphanumeric code has been allocated. inDefinedTermSet provides the inverse relationship from a term back to the set.
The hasDefinedTerm property accepts a DefinedTerm and is used on DefinedTermSet. The following JSON-LD follows Schema.org's documented product and service category example, while showing the containing set and its entry together:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "DefinedTermSet",
"name": "United Nations Standard Products and Services Code",
"hasDefinedTerm": {
"@type": "DefinedTerm",
"inDefinedTermSet": "https://www.unspsc.org/",
"termCode": "261315XX",
"name": "Photovoltaic module"
}
}
</script>
The code places the set and the term in one JSON-LD item. A fuller entry can add description and about to the DefinedTerm, using the same property meanings documented by Schema.org.
What does this change for a website?
Google's structured-data introduction says that markup belongs on the page to which its information applies. It also says not to create empty pages just to hold structured data or add information that is invisible to the user. A DefinedTermSet therefore describes a vocabulary that the page actually presents, while the term names and definitions should correspond to the visible glossary or classification content.
Google also separates the Schema.org vocabulary from its own Search behavior. Its documentation says that most Search structured data uses Schema.org vocabulary, while Google Search Central is definitive for Google Search behavior and many Schema.org attributes and objects are not required by Google Search. A valid description of a vocabulary is consequently a data model for the page; feature eligibility requires the relevant Google documentation.
How can the vocabulary be checked?
Schema.org's developer documentation says that individual term pages contain machine-readable definitions as JSON-LD and that period releases provide downloadable vocabulary data. Those resources help check the spelling and meaning of DefinedTermSet, DefinedTerm, and their properties against the published vocabulary.
Google recommends JSON-LD when it is the easiest format for a site to implement and maintain. For a Google Search feature, the feature's own documentation and the Rich Results Test provide the applicable technical checks; the Schema.org type page supplies the vocabulary definition.
Related terms
- Structured data
- JSON-LD
- Does every Schema.org property have a Google rich result feature?
- How does Schema.org validation differ from Google's Rich Results Test?
FAQ
Should you add a termCode to every DefinedTerm?
Schema.org documents termCode as a code that identifies a DefinedTerm within a DefinedTermSet. Add it when the vocabulary allocates such a code; the name and description properties carry the term label and definition.
Does a DefinedTermSet create a Google rich result?
Google's structured-data introduction distinguishes the Schema.org vocabulary from the requirements for Google Search features. A DefinedTermSet can describe the page's vocabulary, while a Google Search feature requires a documented feature type and its stated properties.
Sources
- Schema.org, "DefinedTermSet", 16 September 2026
- Schema.org, "DefinedTerm", 16 September 2026
- Schema.org, "hasDefinedTerm", 16 September 2026
- Google Search Central, "Introduction to structured data markup in Google Search", 10 December 2025
- Schema.org, "Schema.org for Developers", 16 September 2026
Check how a page reads to answer engines. Open the GEO score analyzer