Schema Markup for Beginners: What It Is and Where to Start
Schema markup is structured data that tells a search engine what a page is about. What it does, which types earn their keep, and how to validate it.

Schema markup is a block of machine-readable data you add to a page so a search engine doesn't have to infer what the page is about from prose. Most beginner guides pitch it as a way to get review stars in the results, then leave you confused when the stars never appear. This post separates the vocabulary from the syntax, shows where the code goes, gives you the validators that answer two different questions, and names the types actually worth a small site's time in 2026.
What schema markup actually is
Schema markup is structured data: a standardized block of code that states, in labeled fields a machine parses without ambiguity, what a page is about and how its parts relate to each other.
That's the whole idea. Your page already says these things. A recipe page states the cook time in a sentence. The markup restates it as "cookTime": "PT45M". Nothing new is being claimed. The same fact moves out of prose, which a machine has to interpret, and into a labeled field, which it does not.
Three words get used interchangeably and shouldn't be, because the confusion causes real mistakes later.
| Term | What it means | Example |
|---|---|---|
| Structured data | The general practice of adding machine-readable data to a page | "This site has structured data on its product pages" |
| Schema, or schema.org | The shared vocabulary that defines the types and the property names | `Product`, `Organization`, `startDate`, `priceCurrency` |
| Markup, or the syntax | The code format you use to write that vocabulary into the page | JSON-LD, microdata, RDFa |
You pick one vocabulary (schema.org, in practice always) and one syntax (JSON-LD, in practice almost always). Those are two separate decisions, and guides that treat "schema" and "JSON-LD" as the same thing make the second decision invisible.
The two things that read your markup
Here's the reframe that saves beginners months of confusion. Your markup is read by two different systems with completely different standards, and only one of them has a dashboard.
| Reader | How strictly it reads | What you get when it works | Where you can see it |
|---|---|---|---|
| The rich results pipeline | Very strict. The type has to be on a supported list, required properties have to be present, and the data has to match what a visitor sees | Eligibility for an enhanced search appearance: a breadcrumb trail, a price, event dates, a video thumbnail | Rich Results Test, and the Enhancements reports in Google Search Console |
| The understanding layer | Loose. Any valid schema.org data is readable, including types with no rich result attached at all | Cleaner entity resolution. The machine knows which organization, which product, which article, and who published it | Nowhere. No report exists |
Nearly every beginner guide covers only the first row. So people add markup, watch for stars, see none, and conclude that structured data did nothing. What actually happened is that they were paid in the currency they couldn't see.
Think of it as two ledgers. The eligibility ledger is narrow, auditable and gated: your Product block either qualifies for a merchant listing appearance or it doesn't, and Search Console will tell you which. The entity ledger has no audit trail. It's the accumulated set of unambiguous statements a machine holds about your site, your brand and your pages. The second one is slower, quieter, and the whole reason to mark up types that carry no rich result at all.
This matters more now that answer engines are reading pages too. Nobody publishes a formula saying structured data earns you an AI citation, and you should distrust anyone selling you one. The defensible version is narrower and still useful: a system deciding whether "SparkCliks" on a page refers to a company, a product or a person gets a direct answer from an Organization block and a probabilistic guess from prose. Which sources actually get picked is driven by far more than markup, as we covered in how AI assistants pick their sources and in how answer engines retrieve page chunks. Structured data is one cheap input, not the mechanism.
Stuck on page two?
Real human clicks that lift your CTR and move you up the rankings.
Vocabulary and syntax: schema.org, JSON-LD, microdata
schema.org is the vocabulary. It launched in 2011 as a joint effort between Bing, Google and Yahoo, with Yandex joining shortly after, and it's now developed in the open through a W3C community group. It defines the types (Article, Organization, Product, Event, LocalBusiness, BreadcrumbList) and the properties each type accepts (name, url, logo, startDate, price). It's versioned and revised several times a year, and the full type list runs to hundreds of entries you will never touch.
The syntax is how you write that vocabulary into a page. Three exist, and the choice is mostly settled.
| Syntax | What it looks like | Main advantage | Main drawback | Verdict |
|---|---|---|---|---|
| JSON-LD | A self-contained ` |
Where the markup goes on the page
JSON-LD can sit in the or anywhere in the . Both positions are read. The is the convention, and it keeps the block clear of content edits.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "Schema Markup for Beginners",
"datePublished": "2026-08-22",
"author": { "@type": "Organization", "name": "SparkCliks" },
"mainEntityOfPage": "https://www.sparkcliks.com/blog/schema-markup-for-beginners/"
}
</script>
Four placement rules matter more than the position itself:
- Multiple blocks on one page are fine. A blog post can carry a
BlogPostingblock, aBreadcrumbListblock and anOrganizationblock as three separate scripts. You don't have to cram them into one object. - Markup injected by JavaScript only counts if rendering succeeds. If a tag manager writes your JSON-LD after page load, it exists only when the crawler renders the page successfully. Test the rendered output, never the source.
- The markup describes that URL, not your site in general. Copying one
Productblock into a site-wide template so it also appears on the contact page is a real and common mistake. - The markup has to match what a visitor sees. This is the rule that produces manual actions. Structured data is a description layer, never a content layer. If a price, a rating or a date isn't visible on the page, it doesn't belong in that page's markup.
If your URLs also have canonical problems, fix those first. Markup on a page that consolidates elsewhere is describing a URL the engine has already set aside, and how canonical tags work and how they fail covers that failure mode.
What schema markup does not do
Getting this list right is what separates a useful implementation from a disappointed one.
- It is not a ranking factor in itself. Google's documentation frames structured data as a way to help understand a page and to make it eligible for enhanced appearances. A page does not move up because the code is present.
- It will not rescue a page that isn't indexed. Markup is read during processing, which happens after crawling and only for pages the engine chose to keep. If your page shows as crawled but not indexed, schema is not your problem.
- It will not make a thin page substantive. Labeling four sentences as an
Articledoes not make them an article. - Eligible is not entitled. Every rich result is an eligibility, evaluated per query. Valid markup can produce zero enhanced appearances with nothing broken anywhere.
- Rich results get retired. Google stopped serving the sitelinks search box in late 2024, so sites carrying that markup lost the feature without touching a line of code. Build on the understanding layer, not on any single visual treatment.
There's an honest caveat on click-through rate that beginner guides skip. An enhanced appearance changes how your listing looks, and that can move CTR in either direction. A visible price or a star rating can answer the searcher's question, or disqualify you, before the click ever happens. That's good for the quality of the visits you get and potentially bad for your raw click count. Measure it against a control set rather than assuming the number goes up. Our guide to measuring organic CTR in Search Console has the mechanics.
Structured data is a description layer. It tells a machine what you already have. It doesn't create demand for it, and no amount of markup substitutes for the foundations covered in what technical SEO is and why it comes first.
Which types are worth a small site's time
Most beginner lists are alphabetical inventories of the schema.org type tree. Here's the version sorted by return instead.
| Type | What it can actually get you | Effort | Worth it for a small site |
|---|---|---|---|
| `Organization` | Entity resolution for your brand: name, logo and the profiles you control, stated once instead of inferred | Low, one block on the home page | Yes. Do this first |
| `BreadcrumbList` | Replaces the raw URL in the result with a readable trail, and states your site hierarchy explicitly | Low, one template change | Yes. Do this second |
| `BlogPosting` or `Article` | No standalone rich result for most sites, but it labels the page type, the publish date and the publisher | Low, usually a plugin setting | Yes. Cheap entity-layer win |
| `LocalBusiness` | Address, hours and contact details stated in structured form for a physical location | Low to medium | Yes, if you have a real address |
| `Product` with `Offer` | Price, availability, and merchant listing experiences | Medium to high. Needs accurate, maintained data | Yes, if you sell things |
| `Event` | Dates and venue surfaced in the result | Medium | Yes, if you run events |
| `VideoObject` | Video thumbnails and key moments | Medium | Yes, if video is the point of the page |
| `Review`, `AggregateRating` | Star snippets. Tightly policed, and self-serving reviews about your own business are a policy violation | High risk | Only with genuine first-party reviews visible on the page |
| `FAQPage` | No rich result at all any more. Still a clean, machine-readable pairing of a question with its answer. See below | Low | Yes, last. Add it for machine readability, never for looks |
| `HowTo` | Nothing. The rich result was removed in 2023. See below | Low | No |
The FAQ and HowTo correction most guides still get wrong
This is the most out-of-date section in almost every beginner schema post still ranking, and it has moved twice.
Step one, August 2023: Google scaled both features back. FAQ rich results were limited to well-known, authoritative government and health websites, and HowTo rich results were dropped outright. Almost every guide still stops here, and repeats the "government and health sites" line as though it were the current rule.
Step two, this year: the FAQ rich result was retired completely. Google's changelog records that the feature stopped appearing in search results from May 7, 2026, and that the FAQPage documentation was removed in June 2026. You can check this yourself in about ten seconds. The old documentation URL no longer resolves to a page of its own, it redirects to the changelog entry at https://developers.google.com/search/updates#removing-faq-rich-result. The HowTo documentation redirects the same way. The breadcrumb documentation, for contrast, still loads normally at its own address, so this is a targeted removal and not a reshuffle of the docs site.
So the accurate position is this. Adding FAQPage markup will not produce an FAQ rich result for anybody, and the reason is no longer that your site sits outside an eligible category. The feature does not exist. Nothing visual is coming, for any site, ever.
Add it anyway, for the other reader. A FAQPage block is still valid schema.org, and it still states, in a form a machine does not have to interpret, that this specific text is the answer to that specific question. That is the understanding layer from earlier in this post, and it never depended on a rich result existing. It is also the cleanest signal you can give an AI answer engine parsing your page about which sentences answer which question. This article's own JSON-LD carries a FAQPage block for exactly that reason, and expects no rich result from it.
HowTo is the opposite call: skip it. There's no rich result, and no comparable machine-readability argument either, because the steps are already legible in your page's headings and ordered lists. If a guide published last month still tells you FAQ schema is the quickest way to earn a rich result, it hasn't been fact-checked in years, and it's worth asking what else in it is stale.
Worked example: audit the markup you already have
Before you add anything, find out what's already there. Most CMS platforms and SEO plugins emit structured data by default, and a meaningful share of the time it's duplicated, incomplete, or describing the wrong page. Four checks, in this order, because each answers a different question.
Step 1: is my code correct? Go to validator.schema.org and paste the URL. The Schema Markup Validator checks against the full schema.org vocabulary and flags syntax errors and unrecognized properties. It has no opinion about search engine features, which is exactly why it goes first. This is where you catch two Organization blocks fighting each other.
Step 2: does it qualify for anything? Go to search.google.com/test/rich-results. The Rich Results Test answers a narrower question: does this page qualify for a supported enhanced appearance. Use the URL test rather than the code paste, so you're testing what the crawler actually renders. If your JSON-LD is injected by a script and doesn't show up here, it does not exist as far as the crawler is concerned.
Step 3: what does the engine see across the whole site? Open Google Search Console and scroll the left navigation to the Enhancements group. Every structured data type detected on your site gets its own report there. An empty group means nothing eligible has been detected yet, which is itself a finding. Open a report and read the three counts: Invalid, Valid with warnings, Valid. Click an error row to get example URLs, fix the template, then use Validate Fix so those URLs get re-crawled instead of waiting for a natural recrawl.
Step 4: did it survive rendering? In Search Console, use URL Inspection, paste the URL, click Test live URL, then View tested page, then the HTML tab. Search that HTML for ld+json. This is the only check that proves your markup exists in the rendered page rather than only in your template.
Numbers in the next paragraph are illustrative, not SparkCliks data.
A 40-page site opens its Breadcrumbs report and sees 38 valid, 2 invalid. That shape is the normal one. Structured data rarely fails site-wide, because a template either emits the block or it doesn't. It fails on the exceptions: the two pages someone edited by hand last quarter, the landing page built outside the CMS, the legacy URL still running the old template. When you open an Enhancements report, sort by the error and look at the URL list for a pattern. The pattern is the fix. Chasing individual URLs is not.
How to tell whether it did anything
Don't measure structured data by rankings. Measure it in three stages, in this order, because each one is a precondition for the next.
| Stage | What you check | Where | What a failure means |
|---|---|---|---|
| 1. Detection | Valid item count climbing to match your eligible page count | Search Console Enhancements report | A crawl or rendering problem, not a schema problem |
| 2. Appearance | Whether a rich-result row exists for the type | Performance, Search results, the Search appearance tab | You're valid but the feature isn't being served |
| 3. Effect | Impressions and CTR for treated pages against untreated ones | Performance, Pages tab, exported | Nothing at all, if you didn't hold back a control set |
Stage one is the only part fully under your control, and most people skip straight past it to stage three, then read noise.
Here's a measurement design that survives contact with a small site.
- Baseline. Pull 28 days of the Performance report before you deploy anything: Search results, Pages tab, export it. Write down the date boundaries.
- Split. Mark up 60 to 70 percent of the eligible pages in a template and deliberately leave the rest untouched as a control. Choose the control by taking every third page from the list sorted by impressions, not by picking your worst performers. A control set made of losers guarantees a flattering result.
- Lag. Nothing happens until those pages are recrawled, which on a small site can take weeks. Do not read the result before the Enhancements report shows the new valid items. That is the gate.
- Change window. 28 days after detection completes, using the same day-of-week boundaries as the baseline.
- Read. Compare the change in CTR for the treated set against the change in CTR for the control set. The number that means something is the difference between the two changes. Seasonality, algorithm updates and your own publishing schedule move both sets together, and only the gap between them is attributable to your work.
- Signal threshold. As an example rule: if the treated set moved less than the control set moved, you have no evidence of anything. Structured data effects on CTR tend to be small, so a test across five pages will never resolve above noise. If you can't put at least a few dozen pages on each side, treat the exercise as a validity check rather than an experiment.
Your first week with structured data
Run this in order. It's a week of work at a relaxed pace, and steps 1 and 2 alone catch more problems than most sites know they have.
- Run
validator.schema.orgagainst your home page and one page from each major template. Write down what already exists before you add anything. - Look specifically for duplicates. Two plugins each emitting an
Organizationblock is the most common beginner problem, and it makes both statements less trustworthy than one would have been. - Pick one syntax and standardize on it. JSON-LD, unless you inherited microdata everywhere and stripping it out is a bigger project than it's worth.
- Add
Organizationonce, on the home page: legal name, URL, logo, andsameAslinks only to profiles you genuinely control. - Add
BreadcrumbListto templates that show a visible breadcrumb trail. If there's no visible trail, build the trail first. The markup describes the page, it doesn't invent features. - Add
BlogPostingorArticleto your post template with a realdatePublishedand the Organization aspublisher. - Re-run the Rich Results Test against the live URL, not against pasted code.
- Two weeks later, open the Enhancements group in Search Console. If a report you expected still doesn't exist, you have a crawl or rendering problem to solve before writing another line of JSON-LD.
- Leave
ReviewandAggregateRatingalone unless real, genuine first-party reviews are visible on the page. - Leave
FAQPageuntil last, and add it for machine readability rather than for a rich result, because there is no longer an FAQ rich result to earn. SkipHowToentirely.
Steps 4 and 5 pay first, and they're also the two most likely to be misconfigured by a plugin you never audited. They get their own step-by-step build in the next SEO Fundamentals post in this series, covering Breadcrumb and Organization schema on a small site.
Frequently asked questions
FAQ
Schema markup is a block of code that restates the facts already on your page in labeled fields a machine can read without guessing. It uses the shared schema.org vocabulary, and it's usually written as a JSON-LD script in the page's head.
Not by itself. Google's documentation presents structured data as a way to help understand a page and to make it eligible for enhanced search appearances, not as something that raises a page's position because the code exists. The realistic benefits are rich result eligibility and cleaner entity understanding.
Use JSON-LD unless you've inherited a site already built on microdata. Google's documentation recommends JSON-LD where possible, it's easier to generate and maintain, and it survives template redesigns. Don't run both syntaxes for the same entity on one page.
Either the or the works, and the is the convention. What matters more is that the block survives rendering: if it's injected by JavaScript, confirm it appears in Search Console's live URL test before you trust it.
Yes, but never for a rich result. The FAQ rich result has been retired outright: Google's changelog records it no longer appearing in search results from May 7, 2026, and the FAQPage documentation was removed in June 2026, with the old URL now redirecting to that changelog entry. Add the markup for machine readability instead, since it still states cleanly which text answers which question for anything parsing your page, including AI answer engines.
Use three tools for three different questions: validator.schema.org for whether the code is valid, the Rich Results Test for whether it qualifies for a supported appearance, and the Enhancements reports in Google Search Console for what the engine has actually detected across your site over time.
Related articles

How to Fix Location Page Duplicate Content at Scale
Location page duplicate content is a sameness problem, not a copying one. Here is how to measure sibling distinctness and fix the pages worth keeping.

Canonical Tags: How They Work and Where They Break
Canonical tags are a hint, not a rule. Here is how a search engine picks the canonical URL, the signals that override your tag, and how to audit yours.

How to Submit a Sitemap and Check Indexed Pages
Submit a sitemap in minutes, then use the per sitemap filter in the Page indexing report to see exactly which of your submitted URLs got indexed.
