Structured Data Isn't Optional Anymore
Rich results — star ratings under a product listing, an FAQ dropdown right in the search results, a recipe card with a photo and cook time — are one of the few remaining ways to stand out on a search results page that's otherwise dominated by ads and AI overviews. All of them are powered by the same underlying mechanism: JSON-LD structured data using the schema.org vocabulary, embedded in a <script type="application/ld+json"> tag in the page's HTML.
The problem is that most sites either skip structured data entirely or ship markup that's technically present but functionally broken — missing a required field, using the wrong nesting, or describing content that doesn't match what's visible on the page. Google's Rich Results Test will often still parse the JSON without errors while quietly declining to show the rich result, because a recommended field was empty or a required one was missing.
The Fields That Actually Matter Per Type
Each schema.org type has its own required and recommended properties, and getting them right matters more than getting the JSON syntax right:
- Article — needs
headline,image,datePublished, and anauthorwith a name. Skip the image and Google Discover eligibility drops. - Product — needs
name,image,description, and a nestedoffersobject withprice,priceCurrency, andavailability. A price with no currency is effectively invalid. - LocalBusiness — needs a full
PostalAddress,telephone, andopeningHoursin the correct schema.org day-range format (e.g.Mo-Fr 09:00-17:00). - FAQPage — needs an array of
Questionentities, each with anacceptedAnswer. Every question needs a real answer — placeholder text gets filtered by Google's quality checks. - Recipe — needs
recipeIngredientas an array of strings andrecipeInstructionsas an array ofHowToStepobjects, plusprepTimeandcookTimein ISO 8601 duration format (PT20Mfor 20 minutes). - Review — needs an
itemReviewedentity, areviewRatingwith aratingValue, and anauthor.
The Nesting Mistakes That Silently Break Rich Results
Beyond missing fields, the most common structural mistakes are: forgetting "@context": "https://schema.org" at the top level, nesting an Offer directly instead of wrapping it under offers, and using a plain string where schema.org expects a typed object — like putting an author's name directly on the Article instead of nesting it inside {"@type": "Person", "name": "..."}.
A Faster Way to Get It Right
Rather than hand-writing JSON-LD from a schema.org reference page every time, a generator that only asks for the fields a given type actually needs — and validates that none of the required ones are empty — removes most of the room for error. Fill in the form, get valid nested JSON-LD back, paste it into the <head>, and verify it in Google's Rich Results Test before publishing.
Bottom Line
Rich results aren't a ranking hack — they're a visibility upgrade that depends entirely on structured data being complete and correctly typed. Getting the required fields right the first time, for the schema type that actually matches your content, is the difference between an FAQ dropdown showing up in search results and a JSON-LD block that just sits in your page source doing nothing.
Frequently Asked Questions
The Rich Results Test can parse JSON-LD without errors while Google still quietly declines to show the rich result, because a recommended field was empty or a required one was missing — syntactic validity and having the actual fields Google needs are two different things. Getting the required and recommended properties right for the specific schema type matters more than getting the JSON syntax to simply validate.
Product schema needs name, image, and description at the top level, plus a nested offers object containing price, priceCurrency, and availability. A price listed without a currency is effectively treated as invalid, so both fields inside offers need to be present together.
The most common mistakes are forgetting the top-level '@context': 'https://schema.org' declaration, nesting an Offer directly on a Product instead of wrapping it under offers, and using a plain string where schema.org expects a typed object — like putting an author's name directly on an Article instead of nesting it inside {'@type': 'Person', 'name': '...'}. These pass basic JSON validation but still prevent the rich result from showing.
Yes — FAQPage schema needs an array of Question entities, each with a genuine acceptedAnswer; placeholder or filler text gets filtered out by Google's quality checks rather than being shown as a rich result. Every question in the markup needs a real, complete answer, not just a question with an empty or generic answer field.
Yes — a schema markup / JSON-LD generator asks only for the fields a given schema type (Article, Product, LocalBusiness, FAQPage, Recipe, Review) actually needs and validates that none of the required ones are left empty. That removes most of the room for the missing-field and nesting errors that cause a technically valid JSON-LD block to still not trigger a rich result. It's a one-time $6.99 purchase — no subscription, no account required.