/ โ† AI Schema Generator Fixes / Rich Result Gaps
In this guide
  1. Valid, eligible and shown are three separate tests
  2. Features that exist today and what they ask for
  3. Reading the test results for generated markup
  4. Where the missing values should come from
  5. The fix, step by step
  6. When the markup is complete and nothing shows
  7. Getting eligibility right the first time
  8. Questions and answers

Valid, eligible and shown are three separate tests

People often treat "my schema is valid" and "I should get a rich result" as the same statement. They are two steps apart, and generated markup can stall at either one.

StageWho decidesWhat it needsWhere you see it
ValidThe schema.org vocabularyReal types and properties, used in allowed places, in JSON that parsesSchema Markup Validator
EligibleGoogle's documentation for one featureThat feature's required properties, allowed values and content policies, on an indexable pageRich Results Test and Search Console enhancement reports
ShownGoogle's systems, per searchEligibility plus Google choosing to use it for that query, device and locationSearch results and the Search appearance filter in the Performance report

The AI Schema Generator validates its output against schema.org and against Google rich result criteria before handing it over, so the first stage is usually settled. The second stage is where most gaps sit, for three reasons that are specific to generated markup:

๐Ÿ’ก Before chasing a missing rich result, write down in one line which result you expect, for example "event dates and ticket link under the listing". If you cannot name one, the page may simply have no rich result to win, and complete, accurate markup is still worth keeping for the systems that read it.

Features that exist today and what they ask for

Google's search gallery has shrunk over the years, so check the current list before promising anyone a result. HowTo rich results were removed in 2023. FAQ rich results are now shown only for well-known, authoritative government and health sites, so most businesses will not see them however good the FAQPage markup is. Google also announced in 2025 that it was phasing out a further group of less-used features; if your target is an unusual type, confirm it still appears in the search gallery before spending time on it.

For the features most sites target, this is where generated markup most often falls short of what Google asks for:

FeatureGoogle requiresRecommended fields generated blocks often lack
Product snippetname plus one of offers, review or aggregateRatingbrand, gtin or mpn, a real aggregateRating
Merchant listingname, image, offers with price and priceCurrencyshippingDetails, hasMerchantReturnPolicy, availability
Recipename, imagerecipeIngredient, recipeInstructions, totalTime, recipeYield, nutrition.calories
Eventname, startDate, locationoffers, eventStatus, endDate, image, organizer
ArticleNo required propertiesimage in several aspect ratios, author with a url, dateModified
Local businessname, addressopeningHoursSpecification, geo, telephone, url
Videoname, thumbnailUrl, uploadDatecontentUrl or embedUrl, duration, description
BreadcrumbitemListElement entries with position, name and item (optional on the last entry)Nothing extra; gaps here are usually relative or missing item URLs

Required fields decide whether you can have the feature at all. Recommended fields decide how much of it you get: a recipe with totalTime and nutrition.calories can show cooking time and calories, one without cannot. Google's own wording is that adding recommended properties can make the result more useful, so a block with required fields only is eligible but thin.

Policy rules a validator cannot check

Reading the test results for generated markup

Run the page, not the snippet, through the Rich Results Test. Pasting the block as code tells you whether the JSON qualifies in isolation. Testing the URL tells you what Google sees after rendering, including any other markup on the page and whether the page can be indexed.

What the test saysWhat it means for generated markup
No items detectedThe type you generated has no Google feature, or the block is not on the rendered page. Check the source for the script tag, then check the type against the search gallery.
Item detected, "Valid items are eligible"The requirements are met. If nothing shows in search after a few weeks, look at the blockers further down this page rather than the markup.
Item detected with warningsEligible, but recommended fields are missing. These are the gaps worth filling from real data.
Item detected with an errorNot eligible. Usually a required field is missing or has the wrong format.
The feature you wanted is absent but another is detectedThe model chose a neighbouring type, for example Article where you wanted Recipe. That is a type problem, not an eligibility one.

In Search Console, each feature has its own report under Enhancements, or under Shopping for merchant listings. The reports only list pages Google has crawled since the markup went in, so an empty report straight after publishing tells you nothing. The Performance report's Search appearance filter is the only place that shows whether a feature is actually being displayed and clicked.

A quick gap audit

  1. List the feature you want and its required and recommended properties from Google's documentation page for that feature.
  2. Tick off each one present in the generated block.
  3. For each gap, write where the true value lives: on the page, in your CMS, in a supplier sheet, or nowhere.
  4. Anything that lives nowhere stays out of the markup.

Where the missing values should come from

The honest answer to most eligibility gaps is not "ask the model again" but "give it, or your template, the data it could not see". These are the usual places the missing values already exist.

Missing valueWhere the true value usually livesHow to get it into the markup
Ticket price, availabilityBooking or ticketing systemShow it on the page, then regenerate or add it from the booking data in the template
gtin, mpn, brandSupplier catalogue or product databaseA product field or metafield output by the template
Nutrition, yield, timingsThe recipe card or the cook's notesAdd them to the visible recipe card first; markup follows the page
aggregateRatingYour review platformUse the platform's own markup or its data feed, never a figure typed into the block
Extra images in 16:9, 4:3 and 1:1Your photo libraryCrop and upload them, then list all three URLs in image
shippingDetails, returnsYour delivery and returns pagesA shared block in the template, or account-level settings in Merchant Center
openingHoursSpecification, geoYour Google Business Profile and contact pageCopy them exactly; keep one source of truth

Here is a generated Event after the gaps were filled from a fictional studio's booking system. The generator had produced the name, date and venue from the page text; offers, eventStatus, endDate, organizer and the extra images were added once the ticket price and finish time were printed on the page.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Event",
  "name": "Autumn Pottery Taster Evening",
  "description": "A three-hour beginners' session on the wheel. Clay, glazing and firing included.",
  "startDate": "2026-10-17T18:30:00+01:00",
  "endDate": "2026-10-17T21:30:00+01:00",
  "eventStatus": "https://schema.org/EventScheduled",
  "eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
  "image": [
    "https://example.co.uk/img/taster-16x9.jpg",
    "https://example.co.uk/img/taster-4x3.jpg",
    "https://example.co.uk/img/taster-1x1.jpg"
  ],
  "location": {
    "@type": "Place",
    "name": "Millstream Clay Studio",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "4 Wharf Yard",
      "addressLocality": "Exampleton",
      "postalCode": "EX1 2AB",
      "addressCountry": "GB"
    }
  },
  "offers": {
    "@type": "Offer",
    "url": "https://example.co.uk/book/taster-october",
    "price": "45.00",
    "priceCurrency": "GBP",
    "availability": "https://schema.org/InStock",
    "validFrom": "2026-09-01T09:00:00+01:00"
  },
  "organizer": {
    "@type": "Organization",
    "name": "Millstream Clay Studio",
    "url": "https://example.co.uk/"
  }
}
</script>
โš ๏ธ Adding a field to the markup that is not on the page does not close a gap; it opens a policy problem. Put the fact on the page first, where visitors can see it, then add it to the markup.

The fix, step by step

Step 1

Name the rich result you are aiming for

Open Google's search gallery and find the one feature that fits the page, such as merchant listing, recipe or event. If the generated @type has no feature listed, or the feature has been retired, accept that the page will not earn a rich result from this markup and stop here. If your chosen feature is FAQ, check whether your site is a government or health authority before investing any time in it, because other sites will not see it.

Step 2

Test the generated block against that feature

Publish the block on a test or live URL and run that URL through the Rich Results Test, not just the pasted code. Confirm the feature you named is detected. If a different feature is detected, the generator picked a neighbouring type, so correct the type before touching any fields. Note every error and warning listed under your feature, and open the rendered HTML view to confirm the script tag survived your theme or CMS intact.

Step 3

Sort errors, warnings and silent gaps

Errors are missing or malformed required fields and stop eligibility outright, so they come first. Warnings are missing recommended fields and limit what the result can show. Silent gaps are recommended fields the test does not mention at all, which you only find by reading Google's page for the feature. Make a short list with each gap and the place its true value lives, and mark any gap with no real source as staying empty.

Step 4

Fill recommended fields from real sources

For each gap with a real source, put the fact on the visible page first, then either regenerate the markup so the model can read it or add it in the template from your database. Prefer template fields for anything that changes, such as price, stock or ratings, because a pasted block becomes wrong the day the value moves. Add extra image crops, identifiers and timings where you genuinely have them, and leave out anything you would have to estimate.

Step 5

Remove what the feature does not allow

Delete markup that the feature's policies rule out even when it validates. The common cases are an aggregateRating built from testimonials about your own business, Product markup on an article that only mentions a product, Event markup for offers or opening hours, and any value a visitor cannot see. Removing these protects the rest of the site, because misleading structured data can lead to a manual action that affects rich results everywhere.

Step 6

Publish, inspect and follow the report

Re-test the live URL until the feature shows as eligible with no errors, then use URL Inspection in Search Console and request indexing. Watch the enhancement report for that feature over the next two to three weeks as Google recrawls, and use Validate fix once corrected pages appear. Finally, check the Search appearance filter in the Performance report, which is the only place that confirms the result is actually being shown in search.

When the markup is complete and nothing shows

If the Rich Results Test says the page is eligible and weeks have passed, the markup has usually done its job and something else is in the way. Work through these before editing the JSON again.

๐Ÿ’ก Eligibility is permission, not a promise. Google's documentation is explicit that valid markup does not guarantee a rich result, so measure success over a group of pages rather than one URL.

Getting eligibility right the first time

Questions and answers

1. Why does my generated schema validate but show no rich result?

Validation only checks that the types and properties exist in the schema.org vocabulary and are used correctly. A rich result also needs the page to match one of the features Google currently supports, to include that feature's required properties, to follow its content policies and to be indexable. After all that, Google still decides per search whether to show it. Test the live URL in the Rich Results Test to see which of those stages the page has reached.

2. Are recommended properties worth adding if they are optional?

Yes, when you have true values for them. Required properties make a page eligible, but recommended ones decide what the result can display, such as cooking time and calories on a recipe, delivery cost on a merchant listing or the ticket link on an event. Google's documentation describes them as ways to make the result more useful. Only add a recommended property when the fact is visible on the page, because an estimated value is worse than a missing one.

3. Can I ask the AI to add the missing fields for me?

Only if the missing facts are on the page for it to read. If you ask a model to complete a Recipe or an Event without the data being present, it may fill the gaps with plausible guesses, such as a cooking time or a ticket price, and the markup will then describe things that are not true. Put the real value on the page first, then regenerate, or add the field from your own database in the template.

4. My testimonials are genuine, so why no stars for my business?

Google does not show star ratings for LocalBusiness or Organization markup when the reviews are about the business itself and published on its own site. These are called self-serving reviews, and the rule applies however genuine they are. The markup can still validate, which is why generated blocks often include it. Stars for a business usually come from your Google Business Profile reviews instead, which appear in the local results and on Maps.

5. Is it still worth generating FAQPage or HowTo markup?

HowTo rich results were removed from Google Search in 2023, and FAQ rich results are now limited to well-known government and health websites, so most sites will not see either. The markup is still valid schema.org and does no harm if it matches the page, and other systems may read it. But if your only goal is a Google rich result, spend the time on a type that still has a feature your site can earn.

6. How long after fixing the markup will the rich result appear?

Google has to recrawl the page before anything changes. Requesting indexing with URL Inspection usually gets a single page recrawled within a few days, and the enhancement report updates as each affected page is crawled, which can take a few weeks across a larger site. Even then, the result is shown for some queries and not others. Use the Search appearance filter in the Performance report to see whether it is actually being displayed.

7. Do I need the Merchant Center to get product rich results?

No. Product snippets and merchant listings can both come from structured data on your pages alone. Merchant Center is a separate route that sends Google a product feed, and it lets you set shipping and returns once at account level rather than in every block. If you use both, the price and availability in your markup, your feed and the visible page must agree, or you will see mismatch warnings.

Generate markup aimed at a real rich result

The AI Schema Generator reads your page content with an AI model, writes JSON-LD tailored to the content type and validates it against schema.org and Google rich result criteria before delivery, ready for you to review, complete and publish.

Open AI Schema Generator Fixes โ†’
๐Ÿ’ฌ Got a problem?
Related Guides: All AI Schema Generator Fixes  ·  AI Schema Guide  ·  Missing Required Fields in Generated Schema  ·  Recommended Schema Properties  ·  Learning Hub

About aiwebpageseo

aiwebpageseo.com is a data-driven SEO and AEO (Answer Engine Optimisation) platform providing a free suite of technical SEO tools. Rather than relying on AI-theorised assumptions, the platform analyses live URL performance, delivering objective diagnostics, page speed metrics, CLS debugging, and site crawl data alongside actionable technical tutorials.