/ โ† AI Schema Generator Fixes / Hallucinated Properties
In this guide
  1. What a hallucinated property looks like
  2. Why invented values matter more than broken ones
  3. How to spot invented values quickly
  4. The fix, step by step
  5. Which sources count, property by property
  6. Reducing hallucinations before they happen
  7. Harder cases
  8. Questions and answers

What a hallucinated property looks like

In AI writing generally, a hallucination is a confident statement with nothing behind it. In generated JSON-LD it has a narrower meaning: a property whose value does not appear on the page and does not come from any system you control. The property name is real, the format is correct, and the value is simply made up.

Here is a typical case. A small bakery has a page about its sourdough class. The page gives the title, a description, the price and the Saturday date, and nothing else. The generated markup came back looking like this:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Course",
  "name": "Beginners' sourdough class",
  "description": "A three-hour hands-on class covering starters, shaping and baking.",
  "provider": {
    "@type": "Organization",
    "name": "Crumb and Crust Bakery",
    "telephone": "+44 1632 960123",
    "sameAs": ["https://www.facebook.com/crumbandcrustbakery"]
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8",
    "reviewCount": "127"
  },
  "instructor": { "@type": "Person", "name": "Hattie Brindlecombe" }
}
</script>

Only the name and description were on the page. The phone number, the Facebook address, the 4.8 rating from 127 reviews and the instructor were all produced by the model because Course and Organization blocks in its training examples usually have them. Every one of them validates. None of them is true, or at least nobody has checked whether it is.

Why the model does this

Why invented values matter more than broken ones

A syntax error or a missing required field is annoying but honest: the markup simply does not work, and the page loses a rich result it never had. An invented value works, which is the problem. It can put false information in front of searchers, and it breaks the rule at the centre of Google's structured data guidelines, which is that markup must describe content visible to the people reading the page.

Invented propertyWhat can go wrongSeverity
aggregateRating, reviewStars shown in search for reviews that do not exist. Google treats this as misleading markup and it is a common reason for a structured data manual action.Remove immediately
offers.price, priceCurrencyA price in search that differs from the checkout, which also causes Merchant Center mismatches.Remove or correct immediately
telephone, address, openingHoursSpecificationCustomers ring a wrong number or travel to a wrong address. Search engines and AI tools may repeat the wrong details.High
author, instructor, performerA real-sounding person credited with work they did not do, or a real person's name attached to your content.High
sameAsYour business linked to someone else's social profile, or to an address that returns an error.Medium to high
gtin, mpn, isbnProduct matched to a different item. Merchant Center can reject products with invalid identifiers.Medium to high
foundingDate, award, numberOfEmployeesFalse company facts that may be picked up and repeated by answer engines.Medium
cookTime, nutrition, durationPlausible but wrong figures in recipe or course results.Medium

There is also a quieter cost. Structured data is one of the places where AI assistants and search features look for clean, machine-readable facts about a business. If your own markup states a wrong phone number or a founding year you never mentioned, you have published that error yourself, in the format most likely to be trusted. Nobody can promise that correcting your markup will change what a particular AI tool says about you, but there is no reason to feed it mistakes.

โš ๏ธ A manual action for spammy structured markup can remove rich results across the whole site, not just the page with the bad block. It appears under Security and Manual actions in Search Console. The route back is to remove the offending markup everywhere and submit a reconsideration request, which is far slower than checking the output before publishing.

How to spot invented values quickly

The most reliable test is also the simplest: every literal value in the markup must be something you can point to. Either it is printed on the page, or it comes from a system you trust, such as your product database or your CMS author records. Values that meet neither condition are suspect, however reasonable they look.

Warning signs in the output

A quick search routine

Open the live page in one window and the generated JSON-LD in a text editor in another. For each string or number in the markup, copy it and search the page with Ctrl+F (Cmd+F on a Mac). Search for a distinctive fragment rather than the whole value, so formatting differences do not hide a genuine match: the last six digits of a phone number, a surname, the digits of a price. Remember that text inside collapsed tabs and accordions is still on the page; expand them before searching, or search the page source instead.

๐Ÿ’ก In the browser console you can list every string value in a block in one go. Paste the JSON into a variable and run JSON.stringify(data).match(/"[^"]{3,}"/g) to get a list to work through. It is a checklist, not a verdict: you still have to look each value up.

The fix, step by step

Step 1

Save the generated block next to the page

Before editing anything, copy the generated JSON-LD exactly as the AI Schema Generator returned it into a text file named after the page, and keep the live page open beside it. Working from a saved copy means you can compare later versions, see what the model added on each run, and prove to yourself which values were removed. If you are reviewing many pages, keep one file per URL in a single folder.

Step 2

List every literal value in the markup

Go through the block and write down each value that states a fact: names, numbers, prices, dates, phone numbers, addresses, web addresses, durations and identifiers. Ignore structural parts such as @context, @type and property names, because those describe the shape of the data rather than claims about your business. On a typical page this list runs to between ten and thirty entries, and it becomes your review checklist.

Step 3

Trace each value to a source

Next to every entry, note where it came from: the visible page, a named system such as your shop catalogue or CMS author profile, or nowhere you can find. Search the page text and source for each value, including collapsed sections. Check phone numbers, addresses and social profiles against your own records rather than your memory. A value that only matches something the model could have guessed from the business name counts as having no source.

Step 4

Delete what has no source

Remove every property whose value has no source, together with any wrapper object left empty, such as an aggregateRating with nothing inside. Do not replace an invented value with a vaguer one or a placeholder. Losing a star rating or a recommended field costs far less than publishing a false claim, and required fields for a rich result should be supplied from real content, never guessed, even when that means the page is not eligible yet.

Step 5

Replace guessed values with real data

Where a property is useful and the true answer exists, put the real value in: the business phone number from your contact page, the author from the visible byline, the actual price from the catalogue. If the true value is not on the page yet, decide whether it should be. Adding a real opening hours table or a byline to the page and then marking it up is the honest route to a fuller block.

Step 6

Retest and record the page as reviewed

Paste the cleaned block into the Rich Results Test or the Schema Markup Validator to confirm it still parses and that nothing you deleted has left a broken structure. Then publish it, test the live URL, and mark the page as reviewed in whatever list you are keeping. For bulk work, note which invented properties appeared, because that pattern tells you what to watch on the next batch.

Which sources count, property by property

Some values can legitimately come from outside the visible page, as long as the page does not contradict them and the reader could find the same fact on your site. Others must be on the page itself. Use this as a rule of thumb when tracing values in step 3.

PropertyAcceptable sourceNot acceptable
Ratings and reviewsGenuine reviews collected on your site and shown on this pageTotals from a third-party site not shown on the page; any figure the model produced
Price and availabilityYour product catalogue, matching the price on the pageA price from an old version of the page or a competitor
Author or instructorThe visible byline or tutor name, and your author recordsA name the model supplied because the byline was missing
Phone, address, hoursYour contact page or Google Business Profile, if they agree with each otherDirectory listings you have not checked; anything recalled by the model
sameAs profilesProfiles you own and can log in toAddresses built from your business name; profiles of similarly named firms
Product identifiersBarcodes printed on the product or in the supplier's dataNumbers that merely look like a valid barcode
Logo and imagesFiles that exist on your server at that addressAddresses that follow your naming style but return a 404

Organisation-level facts, such as your logo, legal name and social profiles, are best defined once for the whole site and referenced from each page rather than regenerated page by page. That way there is a single place to check them, and the generator has no reason to reinvent them. The guide on reference loss explains how to link to those site-wide entities.

Reducing hallucinations before they happen

Review will always be needed, but you can make invented values much rarer by changing what the model is given and what it is asked to do.

  1. Make the facts visible. The model is most likely to invent a value when the page almost states it: a review quote with no reviewer, a class with no tutor named, a shop with no phone number in the footer. Put the real information on the page and the model has less reason to guess.
  2. Set the type yourself on ambiguous pages. A wrong type invites wrong properties. A page generated as a LocalBusiness will attract opening hours and a telephone number even when it is only a blog post about your business.
  3. Generate one type per page, not everything at once. Asking for an Organization, a Person and a Product in the same run gives the model many more empty slots to fill.
  4. Keep site-wide entities out of the generation. Let your SEO plugin or template own the Organization and author entities, and remove the generated copies. The less the model writes about your business as a whole, the less it can invent.
  5. Review in small batches. Generate five pages from a template, review them, and look for the invented properties that repeat. If every product page gains an invented rating, you know exactly which property to strip from the rest.
๐Ÿ’ก Keep a short "never publish without a source" list for your site: aggregateRating, review, telephone, address, sameAs, gtin and any person's name. Check those first on every page. They cover most of the risk in a fraction of the time.

Harder cases

The value is true, but not on the page

Sometimes the model is right. It may know your real phone number or your founder's name from public sources. The rule still applies: markup should describe what the reader of this page can see. For contact details the better fix is usually to show them on the page, or to reference a site-wide Organization entity that is backed by your contact page. For anything you would not put on the page, leave it out of the markup.

Reviews that live on another platform

If your reviews are collected by a third-party service and displayed on your page through a widget, the ratings are on the page and can be marked up, usually by the widget itself. A rating total that only exists on an external review site, and is not shown on your page, should not be copied into your markup. Google's review snippet guidelines also exclude self-serving reviews of your own business on LocalBusiness and Organization markup, so check those guidelines before marking up any rating about your own firm.

Testimonials turned into reviews

A quote such as "Brilliant class, I will be back!" with a first name underneath may come back as a full Review with a rating the customer never gave. If you mark up a testimonial as a review at all, the reviewer name and any rating must match what the page shows. A testimonial with no star rating should not gain one.

Old facts the model remembers

For businesses that have moved, rebranded or changed number, the generator can produce the old details. These are easy to miss because they look familiar. Compare every contact detail with your current contact page, not with what you expect to see.

Questions and answers

1. Why does AI-generated schema include information that is not on my page?

Language models produce the most likely continuation of a pattern. Blocks of Product, Course or LocalBusiness markup in the material they learned from usually include ratings, phone numbers and authors, so when your page lacks one of those the model may supply a plausible value rather than leaving the field empty. The output is well formed and passes validation, which is why the only reliable check is comparing each value with the page and your own records.

2. Will Google penalise my site for a fake rating in schema?

It can. Google's structured data guidelines require markup to describe content visible on the page, and ratings or reviews that do not exist are treated as misleading. The usual consequence is a manual action for spammy structured markup, reported in Search Console, which can remove rich results across the whole site until you clean up the markup and submit a reconsideration request. It is not guaranteed to happen, but the risk is not worth a few stars in search results.

3. Is it enough to run the markup through a validator?

No. Validators check that the JSON is readable, that the types and properties exist and that values have the right format. A made-up phone number, rating or author passes all of those checks because it looks exactly like a real one. Validation is still worth doing after you edit the block, since deleting properties can leave a broken structure, but it tells you nothing about whether the facts are true. Only comparing values with the page and your records does that.

4. What if the invented value happens to be correct?

Then it is a lucky guess, and the question becomes whether it belongs on this page. Markup should describe what a reader of the page can see, so a correct phone number that is not shown anywhere on the page is better added to the visible content first, or supplied through a site-wide Organization entity backed by your contact page. Keeping values that you cannot trace to a source makes the next review harder, because you can no longer tell checked facts from guesses.

5. Can I keep a rating from Google reviews or Trustpilot in my schema?

Only if the rating is displayed on the page itself, usually through a review widget that shows the score and the reviews. A total that exists only on an external site should not be copied into your markup. Google also does not show review stars for self-serving reviews on LocalBusiness and Organization markup, meaning reviews a business collects about itself and marks up on its own site. Read Google's review snippet guidelines before marking up any rating about your own business.

6. How do I check hundreds of generated pages without reading every line?

Focus on the properties that carry the most risk. Search all the generated blocks for aggregateRating, review, telephone, address, sameAs, gtin and author, and check those values first, because they cause the most harm when wrong. Then sample a few pages from each template in full. Invented values tend to repeat across similar pages, so a pattern found on five product pages will usually be on the rest, and you can remove it from all of them together.

7. Could hallucinated schema affect what AI assistants say about my business?

It is possible. Some AI search tools read structured data when they fetch pages, and markup is a tidy, machine-readable statement of facts, so a wrong phone number or founding date in your own markup is an error you have published in a format that is easy to reuse. How any given assistant weighs structured data is not publicly documented, so correcting it guarantees nothing, but it removes one source of wrong information that you control completely.

Generate markup, then check every value

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

Open AI Schema Generator Fixes โ†’
๐Ÿ’ฌ Got a problem?
Related Guides: All AI Schema Generator Fixes  ·  Missing Required Fields in Generated Schema  ·  Organization and Person Reference Loss  ·  AI Schema Guide  ·  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.