Structured Data and Schema Markup Primer
Search engines are good at reading text and bad at knowing what the text is. A page containing a number, a price and "in stock" might be a product listing, a review roundup, or a blog post complaining about prices. Structured data closes that gap: it's a machine-readable label, embedded in your page, that says "this is a Product, here is its price, here is its average rating and the number of reviews behind it."
The reward for supplying these labels is eligibility for rich results — the star ratings, FAQ dropdowns, recipe cards, event listings, and product details that make some search listings visibly larger and more clickable than others. The word "eligibility" is doing real work in that sentence, and most schema disappointment comes from ignoring it. This primer covers what schema markup actually does, which types are worth your time, how to implement it on WordPress without hand-writing code, and how to avoid the mistakes that get markup ignored or penalized.
What Structured Data Is (and the One Format You Need)
Structured data on the web means annotations following the schema.org vocabulary — a shared dictionary of types (Article, Product, Recipe, Event, LocalBusiness, and hundreds more) and their properties, maintained collaboratively and understood by Google, Bing, and others.
There have historically been three ways to embed it, but in practice there's one answer: JSON-LD. It's a block of JSON in a script tag, separate from your visible HTML, which makes it easy to generate, easy to validate, and impossible to break when you redesign your templates. Google's documentation says JSON-LD is in most cases the easiest format to implement and maintain, though it accepts all three. The older formats (microdata and RDFa) weave attributes into your HTML tags and are fragile for exactly that reason — a theme change can silently destroy them. If a tool or developer proposes microdata today, ask why.
A minimal JSON-LD block for an article describes the type, headline, author, publish date, and image. Your SEO plugin almost certainly generates this already — which brings up the first practical rule: before adding any schema, check what you already have. Run a few of your pages through Google's Rich Results Test. Duplicate or conflicting markup (two different Article blocks with different dates, say) is worse than one correct block.
The Types That Actually Earn Something
Schema.org defines nearly 800 types. Google shows rich results for a much shorter list, and it has shrunk in recent years — FAQ and HowTo rich results were dramatically restricted in 2023, and Google has continued trimming since. Prioritize by what still pays:
High value — implement these if they match your content
- Product (with price, availability, and review data): the workhorse of e-commerce SEO. Star ratings and price in the search listing measurably lift click-through on product queries. WooCommerce outputs this natively; verify it's complete rather than adding more.
- Review / AggregateRating: the stars. Only valid when attached to a supported parent type (Product, Recipe, LocalBusiness, etc.) and only when the reviews genuinely exist on that page. Self-serving reviews on your own organization markup are explicitly against Google's guidelines.
- Recipe: if you publish recipes, this is non-negotiable — recipe search is essentially a rich-results-only surface, with images, ratings, and cook times in the results.
- Event: concerts, classes, webinars with dates and locations get event listings in search. Genuinely underused by small venues and course businesses.
- LocalBusiness: address, hours, phone, geo coordinates. Reinforces your Google Business Profile and helps disambiguate your business from similarly named ones. Use the most specific subtype available (Dentist, Restaurant, Plumber — not generic LocalBusiness).
- JobPosting: if you post jobs, this feeds Google's job search experience directly.
Foundation value — cheap to add, indirect payoff
- Article / BlogPosting: no dramatic visual rich result, but helps Google understand authorship, dates, and publisher — relevant to how your content is evaluated. Standard SEO plugin output.
- BreadcrumbList: replaces the raw URL in your search listing with a readable trail (Home › Guides › Schema). Small, real, easy.
- Organization / WebSite: your name, logo, and social profiles, output once site-wide. This is knowledge-panel food.
Low or expired value — mostly skip
- FAQPage: since 2023, Google shows FAQ rich results only for well-known, authoritative government and health sites. The markup isn't harmful, but stop expecting dropdowns in your listings.
- HowTo: deprecated as a rich result. Skip.
- Speakable, and most exotic types: no meaningful search surface today. Markup that earns nothing isn't wrong, but your time is finite.
Implementation on WordPress: Three Tiers
Tier 1: Let your SEO plugin do it (covers 80% of sites)
Yoast, Rank Math, SEOPress, and The SEO Framework all output a connected JSON-LD graph: Organization, WebSite, WebPage, Article, BreadcrumbList, author Person — linked together with identifiers so search engines see one coherent entity graph rather than disconnected fragments. For a standard blog or business site, configure the plugin's schema settings (organization name, logo, social profiles) and you're done. Genuinely done — adding a second schema plugin on top of this creates duplication, not enrichment.
Tier 2: Content-type schema via plugin features
Products (WooCommerce), recipes (a dedicated recipe plugin — WP Recipe Maker and similar output excellent Recipe markup), events (The Events Calendar and similar output Event markup). The pattern: if a plugin manages the content type, it should own the schema. Check the plugin's output in a validator before assuming, though — quality varies, and required fields left blank in the plugin's UI become missing required properties in the markup.
Tier 3: Custom JSON-LD for special cases
When you need markup no plugin generates — say, a Course catalog or a custom directory — write JSON-LD from schema.org's documentation and inject it via your SEO plugin's custom schema feature or a small code snippet. Rules of engagement:
- Model the real page. Every value in the JSON must be visible or true on that page. Markup describing content that isn't there violates Google's guidelines and can earn a manual action.
- Fill required properties first, recommended second, and stop. Speculative extra properties add maintenance surface for zero gain.
- Template it — generate values from your actual post fields rather than hand-editing per page, or the markup will drift out of date within a month.
Validation: The Two Tools and What They Tell You
- Rich Results Test (Google's): answers "is this page eligible for Google rich results, and which ones?" This is your primary tool. It distinguishes errors (markup invalid or missing required fields — rich result blocked) from warnings (recommended fields missing — eligible but less complete). Fix errors always; fix warnings when the field genuinely applies.
- Schema.org validator (validator.schema.org): checks vocabulary correctness independent of Google's features. Useful for types Google doesn't reward, or for checking Bing-relevant markup.
Then, ongoing: Search Console's enhancement reports (under "Shopping", "Enhancements", etc.) show you validation status across the whole site, not one page at a time — this is where you find out a plugin update broke Product markup on 400 pages. Check it monthly, or whenever you update your SEO or e-commerce plugins.
The Mistakes That Actually Hurt
- Marking up content that isn't on the page. Review stars for reviews that don't exist, FAQ markup for questions never shown to users. This is the one schema sin with a formal penalty — a spammy structured markup manual action removes all your rich results at once.
- Duplicate schema from stacked plugins. Two Article blocks, two Organizations with different logos. Google may resolve the conflict by ignoring both. One source of truth per type.
- AggregateRating with no path to it. A 4.9 rating from 3 reviews on your own homepage about your own company is exactly the pattern Google's guidelines call self-serving. Ratings belong on products and services where third parties actually left them.
- Believing schema is a rankings dial. Structured data is not a ranking factor in the direct sense — it changes presentation (rich results) and understanding (entity clarity), which can improve click-through and indexing quality. That's valuable, but it means schema on thin content is decoration on a weak page. Content first, markup second.
- Set-and-forget. Prices change, events pass, products go out of stock. Stale structured data (an event listed as upcoming that happened in March) is misleading markup, and Google treats it as such. Anything with dates or prices needs to be generated from live data, never hardcoded.
A Realistic Rollout Plan
- Week 1 — audit: run your homepage, one post, one key landing page (and one product, if applicable) through the Rich Results Test. Inventory what exists, note errors.
- Week 1 — foundation: complete your SEO plugin's schema settings: organization name, logo (square, at least 112×112px), social profiles. Fix any errors from the audit.
- Week 2 — content types: pick the one or two high-value types that match your business (Product, Recipe, Event, LocalBusiness, JobPosting) and get them complete — required and recommended fields.
- Ongoing: check Search Console enhancement reports monthly. Re-validate after major plugin or theme updates. Resist adding types that earn nothing.
The Bottom Line
Schema markup is a labeling job, not a growth hack. Done correctly, it makes your existing content eligible for richer search listings and helps machines — including the AI systems increasingly sitting between search engines and users — understand what your pages are about with certainty instead of inference. Done lazily, it's invisible; done deceptively, it's a penalty. Configure your SEO plugin properly, add the one or two types your business genuinely matches, validate, and then go back to making the content the markup describes worth clicking on.
Photo: Tima Miroshnichenko on Pexels