Fixing Missing Required Fields in JSON-LD
A "missing required field" finding means a JSON-LD block uses a type that a search feature supports, but leaves out something that feature cannot work without, such as an event with no start date or a recipe with no image.
The block may be perfectly valid JSON and valid schema.org, yet the page is no longer eligible for that rich result. This guide explains which fields are truly required and for what, why templates and plugins drop them, how to fix nesting and spelling mistakes that look like missing data, and what to do when the value simply does not exist.
- Three different meanings of "required"
- Required fields for common types
- Why hand-written and plugin markup loses fields
- Required fields inside nested objects
- Reading the report without chasing noise
- The fix, step by step
- When the data genuinely does not exist
- Keeping required fields filled
- Questions and answers
Three different meanings of "required"
Much of the confusion around this finding comes from the word itself. Three different parties can call a property required, and they rarely agree.
| Who says so | What "required" means | What happens if it is missing |
|---|---|---|
| schema.org | Nothing. The vocabulary defines which properties a type can have, but none is mandatory. | The block is still valid schema.org. validator.schema.org will not raise an error. |
| Google (and other consumers) | A property a specific search feature needs before it will show an enhanced result, listed in that feature's documentation as required. | The page is not eligible for that rich result. Search Console reports an error in the feature's report. |
| Google, "recommended" | A property that improves the result or its chances but is not a condition. | A warning, shown as a missing field marked optional. The result can still appear. |
This is why two validators can disagree. The Schema Markup Validator checks vocabulary and passes
a bare Event with only a name. The Rich Results Test checks Google's feature rules and fails the same
block because startDate and location are absent. The JSON Checker reports both
layers, so you can see which rule a finding comes from.
Product has one set
of required fields for product snippets and a stricter set for merchant listings, and Article
has none at all for Google.Required fields for common types
These are the properties Google's documentation lists as required for common features at the time of writing. Google revises its guidelines, so treat this as a working checklist and confirm against the feature's own page when something does not add up.
| Feature | Required | Often overlooked |
|---|---|---|
| Article | None; all properties are recommended. | Warnings for image,
author and dates are advice, not errors. |
| Product snippets | name, plus one of offers, review
or aggregateRating. | A bare Product on non-product pages fails this. |
| Merchant listings | name, image, offers with price
and priceCurrency. | Price must sit inside the Offer, not on the Product. |
| Event | name, startDate, location. | For a
physical event the Place needs an address. |
| Recipe | name, image. | Blogs that set no featured image lose eligibility. |
| JobPosting | title, description, datePosted, hiringOrganization,
jobLocation. | Fully remote roles use jobLocationType and applicantLocationRequirements
instead of a location. |
| Local business | name, address. | An address written as a single string rather than a PostalAddress. |
| Breadcrumb | itemListElement; each ListItem needs position and
name, and item on every crumb except the last. | Positions that restart at 0 or skip numbers. |
| Video | name, thumbnailUrl, uploadDate. | Embeds from video platforms that output no date. |
| Review snippet | author, reviewRating with ratingValue,
and itemReviewed when the review is not nested inside the item. | author
given as plain text instead of a Person or Organization. |
If a type your pages use is not in the table, look up the feature in Google's search gallery documentation. If Google offers no rich result for the type at all, there is nothing "required" in Google's sense, and a missing property is at most a gap in how completely you describe the page.
Why hand-written and plugin markup loses fields
Markup produced by a theme, plugin or custom template rarely omits a field because someone forgot it. It omits it because the data behind it was empty, or because the value was printed somewhere the consumer does not look.
- Conditional output with empty source data. Well-written templates skip a property
when its source field is blank, which avoids invalid values but leaves the field missing. A post with
no featured image produces a Recipe with no
image; an event entered without a venue produces nolocation. - Plugin settings never completed. SEO plugins build Organization, LocalBusiness and publisher data from a settings screen. If nobody filled in the address, logo or business name during setup, every page inherits the gap.
- A type printed on the wrong pages. Themes sometimes output a Product or Event block on archive and category templates, where there is no single price or date to give. The result is a flood of missing field errors from pages that should carry no such markup.
- The value is present but at the wrong level.
priceplaced directly on a Product, oraddressplaced on an Event instead of inside its Place, looks complete to a person reading the code, but the consumer looks for it in a specific object and reports it as missing. - A near-miss property name. Property names are case-sensitive.
startdate,StartDateandstart_dateare all unknown properties, sostartDateis reported missing even though a date is sitting right there. - The wrong kind of value. Some consumers ignore a value that is not the expected
type. An Event
locationgiven as the bare string "Town Hall" may not satisfy a rule that expects a Place with an address.
Required fields inside nested objects
Many requirements apply to an object inside the main one. The finding names the top-level type, but the fix is one or two levels down. This Event shows the shape that satisfies the rules for an in-person event, with the required values at the level where they are read:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Event",
"name": "Spring Pottery Open Studio",
"startDate": "2027-04-17T10:00:00+01:00",
"endDate": "2027-04-17T16:00:00+01:00",
"eventStatus": "https://schema.org/EventScheduled",
"eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
"location": {
"@type": "Place",
"name": "Millbrook Clay Works",
"address": {
"@type": "PostalAddress",
"streetAddress": "4 Canal Yard",
"addressLocality": "Millbrook",
"postalCode": "MB1 2CW",
"addressCountry": "GB"
}
},
"image": "https://www.example.co.uk/images/open-studio-1200.jpg",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "GBP",
"url": "https://www.example.co.uk/events/open-studio/",
"availability": "https://schema.org/InStock"
}
}
</script>
The common nesting mistakes, and where each value should live:
| Written as | Reported as | Should be |
|---|---|---|
Product.price | Missing field "offers" | Product.offers.price |
Event.address | Missing field "location" | Event.location.address |
Review.rating | Missing field "reviewRating" | Review.reviewRating.ratingValue |
JobPosting.company | Missing field "hiringOrganization" | JobPosting.hiringOrganization.name |
ListItem.url | Missing field "item" | ListItem.item |
If the nested object is referenced by @id rather than written in place, the definition
it points to must carry the required values. A reference to an entity that is not defined anywhere is
a separate problem, covered in the dangling
references guide.
Reading the report without chasing noise
A large site can show hundreds of missing field entries. Most come from a small number of templates, so group before you fix.
- Sort errors from warnings. In Google's tools, a required field appears as an error, and a recommended one appears with "(optional)" after the name. Fix errors first; they are the ones that remove eligibility.
- Group by template. Take the affected URLs and note which page template each uses: product, post, event, category, location. If every URL in the group shares a template, one change fixes them all.
- Group by source. Check whether the failing block comes from the theme, a plugin, an app or a hand-written snippet. The JSON Checker shows each block separately, so you can tell a theme's Product apart from a review app's Product on the same page.
- Look at one good page. If some pages on a template pass, compare the source data of a passing page with a failing one. The difference is usually an empty admin field.
The fix, step by step
Step 1
List the types each template outputs
Pick one representative URL for every page template on the site, such as home, post, product, category, event and contact, and run each through the JSON Checker. Write down every type each template prints and where it comes from. This quickly shows types that should not be there at all, like a Product on a category page, which are better removed than completed with values that do not exist.
Step 2
Separate errors from optional warnings
For each type, split the findings into required fields, which remove rich result eligibility, and recommended fields marked optional, which do not. Check which Google feature each requirement belongs to, because Product snippets and merchant listings need different things. Work on required fields first, and treat recommended ones as later improvements you add only when you have genuine data to support them on every page.
Step 3
Check nesting and property spelling
Before
assuming the data is absent, search the block for the value. Check that each property name matches schema.org
exactly, including capitals, and that it sits inside the right object: price in the Offer,
address in the Place, ratingValue in the Rating. Many missing field reports
are fixed by moving or renaming one line in the template, with no new data needed at all.
Step 4
Map each missing field to a data source
For every genuinely missing field, find the admin field, custom field, plugin setting or database column that should supply it. Note whether it is empty for all pages, which points to an unfinished setting, or only for some, which points to incomplete content. Check that the value is also shown on the page, because structured data should describe what visitors can see rather than add facts found nowhere else.
Step 5
Fill the source or drop the type
Where the information exists, complete the source field, plugin setting or template so every page on that template supplies it. Where it does not exist, such as an event with no confirmed date or a product that is not for sale, remove the type or switch to one whose requirements you can meet. Never fill a required field with a placeholder, a fake date or a zero price to silence the error.
Step 6
Retest one page per template
Test the same representative URLs again in the JSON Checker and the Rich Results Test, and confirm the required fields now appear with sensible values. Then open each affected enhancement report in Search Console and choose Validate fix, so Google rechecks the listed pages as it recrawls them. Keep the list of test URLs, because it becomes your regression check after theme, plugin or app updates.
When the data genuinely does not exist
Some missing fields cannot be fixed honestly. Google's guidelines expect structured data to reflect the visible page and real facts, and markup that invents values can lead to a manual action that removes rich results across the site. Better options:
- An event with no fixed date yet. Leave out Event markup until the date is confirmed.
When it is postponed with no new date, keep the old
startDateand seteventStatustoEventPostponed. - A product with no price because it is "price on application". You cannot meet merchant listing rules, but you can describe the product with real reviews or ratings for product snippets, or describe it without chasing a rich result.
- A recipe or article with no image. Add a real photo of the finished dish or a relevant image. A generic logo or stock placeholder used on every page does not represent the content.
- A job with no stated location. If the role is remote, say so with
jobLocationTypeset toTELECOMMUTEand the countries applicants may live in. If it is office-based, the office address exists and should be added. - A business with no public address. Service-area businesses that do not receive customers at their premises may prefer not to publish an address. In that case LocalBusiness rich features may not apply, and a plain Organization is the honest choice.
Keeping required fields filled
- Make the source fields mandatory. If recipes need an image, make the featured image a required field in the editor, or add a pre-publish checklist item. Fixing the input is cheaper than fixing the output.
- Print types only where they apply. Restrict Product markup to product templates and Event markup to single event pages, so archive pages never produce half-empty blocks.
- Test per template, not per page. Keep one URL per template and re-run it through the JSON Checker after every theme, plugin or app update, and after any change to custom fields.
- Watch the enhancement reports. A sudden rise in missing field errors in Search Console after a release usually means a template stopped printing a value, not that content changed.
1. Why does the Schema Markup Validator pass my block when Google reports a missing field?
The two tools test different things. The Schema Markup Validator checks your markup against the schema.org vocabulary, which has no mandatory properties, so a bare Event with only a name is valid there. Google tests against the rules for its own search features, which do list required properties. A block can therefore be valid schema.org and still ineligible for a rich result. Use the vocabulary check for correctness and Google tools for eligibility.
2. What is the difference between a missing field error and a missing field warning?
An error means a property that the search feature requires is absent, so the page cannot show that rich result until it is added. A warning, shown with the word optional after the field name, means a recommended property is absent. The result can still appear, though it may carry less information. Fix errors first, then add recommended fields only where you have real data for them across every page on the template.
3. Does Article schema have any required fields?
Not for Google. Its Article documentation lists every property as recommended, including headline, image, author and the publish and modified dates. That means missing fields on Article markup produce warnings rather than errors. They are still worth adding, because a clear headline, a real author and accurate dates help search engines and AI systems understand and attribute the content, but no single missing Article property on its own makes the page ineligible.
4. Can I use a placeholder value to clear a required field error?
No. Structured data should describe real information that visitors can also see on the page. A fake date, a zero price, a default image used everywhere or an invented address may silence the validator, but it misrepresents the page and breaks Google guidelines, which can lead to rich results being removed through a manual action. If the real value does not exist, leave the type out or use a type whose requirements you can meet honestly.
5. The value is in my markup, so why is it reported as missing?
Usually because it is in the wrong place or spelt slightly wrong. Property names are case-sensitive, so startdate is not startDate. Values also have to sit inside the object that the rule expects: a price belongs in the Offer rather than on the Product, and an address belongs in the event location rather than on the Event. Search the block for the value, then check both its name and the object it sits inside.
6. Why are my category pages showing missing field errors for Product?
Many themes print a Product block on every template, including categories and collections, where there is no single price, image or offer to describe. Those half-empty blocks trigger missing field errors in the Product snippets report. The fix is to stop printing Product markup on listing pages rather than to fill it in. Mark up each product on its own page, and use ItemList or BreadcrumbList on categories if you want structured data there.
7. How long does it take for Search Console to clear the errors?
Search Console only updates a page once Google recrawls it, which can take anything from a day to a few weeks depending on how often the pages are visited. After fixing the template, test a sample URL live with URL Inspection to confirm the change, then choose Validate fix in the relevant report. Google then works through the listed pages and reports progress, and the error count falls as each page passes.
The JSON Checker parses every JSON-LD block on your page, validates the syntax, checks each type against schema.org, verifies required fields, detects conflicting types and runs the result against Google rich result criteria.
Open JSON-LD Fixes โ