Two concepts often get mixed up, even though they solve different problems. Schema.org is the vocabulary: a public collection of types (Product, Article, Organization, Recipe) and properties (name, price, author, datePublished) that Google, Bing, Yahoo and Yandex founded in 2011 and have maintained jointly ever since. The project exists precisely because of a problem that came before it: before 2011 each search engine pushed its own markup system, with scattered microformats and RDFa, and anyone publishing a website had to duplicate the same data in several formats to cover every search engine. That vocabulary defines what can be described on a page and under which labels, but it says nothing about how to write the code.
JSON-LD, Microdata and RDFa are the three formats used to translate that vocabulary into HTML.
JSON-LD (JavaScript Object Notation for Linked Data) is now the format Google recommends for most cases: it lives in a separate
<script type="application/ld+json"> block, without touching the page's visible HTML. Microdata, by contrast, requires attributes (itemscope, itemprop) directly on existing tags, which complicates maintenance whenever the design changes.
The practical consequence is this: two pages can use the exact same Schema.org vocabulary, the same Product type and the same properties, and differ only in the format chosen to include it. Google processes all three formats, but its Search Central documentation prioritizes JSON-LD because it is easier to generate dynamically from a
CMS and to validate without risking the visible layout.
An example makes the difference concrete. The Organization type, with the properties name, url and logo, is the same vocabulary on any page that uses it. Its JSON-LD implementation looks like this:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Company name",
"url": "https://example.com",
"logo": "https://example.com/logo.png"
}
</script>
The same information in Microdata requires spreading those same attributes across several visible HTML tags, which in dynamic templates produces more syntax errors than a single JSON-LD block kept separate from the rest of the code. See
JSON-LD and
Structured Data for the technical detail of each format.