"Automated" is doing a lot of work in most schema-generation marketing, ours included. Point it at a page, get back a finished block of structured data in under a minute, and it is genuinely tempting to treat that block the way you'd treat a spellchecker's suggestion: correct until proven otherwise. We've written elsewhere about which readiness fixes are honestly automatable and which still need you. This piece goes one layer deeper into just one of those fixes, the schema generation itself, and answers a narrower, more useful question: what is actually happening when software decides what to write about your page, and where should you still look over its shoulder before you trust the result.
The problem generation actually has to solve
Given a page, and nothing else, a generator has to answer two questions correctly before it writes a single property. What kind of thing is this page, and what facts about that thing does the page itself actually contain.
Both questions look easier than they are.
What kind of thing is this page. A page can describe a recipe without being a recipe page. A blog post that explains the history of a dish, mentions three restaurants that serve it, and links to a cookbook is a page about a recipe, not a Recipe. Confusing the two produces markup that claims to be something the page never actually offered, which is a real risk, not a rare edge case: any page that discusses a product, an event, or a how-to without being a dedicated page for one is a candidate for the same mistake. Getting this right means checking what a page's stated purpose actually is (its URL pattern, its post type, its own heading) against what it's merely discussing, and treating the two as different questions, not one.
What kind of business is behind the page. The same content pattern can mean different things depending on who's publishing it. A pricing page with "Buy now" language reads like an e-commerce Product page, unless the business is a SaaS company, in which case that same page is a SoftwareApplication with a subscription price, not a physical good with a shipping address. Business-type context has to override a surface-level content pattern, not the other way around, or a software company ends up with schema that describes it as selling something it doesn't.
What it's allowed to say, and what it isn't
Once the type is settled, the harder discipline is filling in the fields honestly. There's a real difference between a generator that summarizes what a page already says and one that fills gaps with a plausible guess, and the difference matters because Google's own quality guidelines for structured data are explicit on this exact point: "Don't mark up content that is not visible to readers of the page," and structured data is expected to be "a true representation of the page content," not a nicer-sounding version of it.
A generator built to respect that constraint has to actively refuse certain things, not just passively fail to think of them:
It shouldn't invent a fact the page never stated. A founder's name, a physical address, a service area, a phone number: none of these belong in generated markup unless the page (or a business profile you filled in yourself) actually says so. The honest version of this rule isn't "the AI wasn't smart enough to guess your address," it's "guessing your address would be fabrication, and fabrication is worse than an honest gap." A dangling or invented fact is harder for anything downstream, a search engine or an AI assistant, to recover from than a field that's simply empty.
It shouldn't manufacture social proof. A page with no visible reviews shouldn't end up with a star rating in its markup. Review and rating data is exactly the kind of property that's tempting to synthesize because it's valuable and structurally simple, and exactly the kind that turns into a real policy violation the moment it doesn't match what a visitor actually sees on the page.
It shouldn't attribute authorship or ownership it can't see. A generic article template with no byline shouldn't get a named author invented for it, and a page with no clear publisher shouldn't get one assigned by assumption.
None of this is a single instruction that either works or doesn't. It's closer to a series of specific refusals, each one closing off a specific way a plausible-sounding guess could sneak into a field that's supposed to represent a fact.
Why one honest instruction isn't enough
Telling a generator not to invent things is necessary and not sufficient, because an instruction followed correctly most of the time still fails some of the time, and a system built around "usually careful" isn't safe to publish from unattended. The more defensible design has layers that don't all depend on the same thing going right.
A first layer of instruction. The specific refusals above: don't invent an author, don't manufacture a rating, don't assign a fact the page never stated.
A second layer that doesn't trust the first layer's compliance. Regardless of what got generated, certain fields get stripped back out afterward for types where they don't belong, address and phone number fields removed from anything that isn't a local, physical business, review and rating properties removed from anything that isn't the kind of entity a real review would attach to. This is the part worth understanding: it's not asking the generator to be careful and hoping. It's checking the output against a fixed rule regardless of how the output was produced, which catches a mistake even when the first layer's instruction didn't hold.
A third layer that isn't AI at all. After generation, every result runs through a plain, deterministic check against schema.org's own requirements, the fields a given type is supposed to have, whether they're present, whether they're the right shape. This is the mechanism behind a schema health score: not a second opinion from another model, but a fixed rulebook applied the same way every time, which is exactly the property you want from a check that's supposed to catch drift consistently rather than differently each time it runs.
Three layers catch different kinds of failure. The first stops most fabrication before it happens. The second catches the specific fabrication the first layer would occasionally still let through. The third catches structural problems that have nothing to do with fabrication at all, a required field left out, a type used incorrectly, regardless of why.
A worked example makes the difference concrete. Take a landscaping company's service page that says, in passing prose, "our clients rave about the results." That sentence is a compliment, not a review: no reviewer name, no date, no score. The first layer's instruction should recognize there's nothing here to structure and generate no rating at all. If it slipped and produced one anyway, treating the vague sentence as evidence of a five-star average, the second layer's backstop removes review and rating properties from page types that aren't the kind of entity a genuine review attaches to, regardless of how the first layer reasoned its way there. And if a rating somehow survived both of those checks incomplete, missing the count or the value a real AggregateRating requires, the third layer's structural check would flag it as invalid before it ever reached a live page. None of the three layers has to be perfect alone. The point of stacking them is that a mistake has to slip past all three at once, not just one, and each layer is checking for a different kind of failure rather than repeating the same check three times.
The failures this actually has to handle, not hypothetical ones
A generator that's only ever been tested on clean, obvious pages will look perfect right up until it meets a page that isn't. A few real shapes worth knowing about, because they're the kind of thing that shows up on an actual site, not a demo:
A business that could reasonably be classified two ways. A contractor who does both general renovation and a licensed trade doesn't sort neatly into one schema.org business type. The honest answer when a business is genuinely ambiguous is to prefer the broader, more defensible classification over guessing at the narrower one, because an overly specific type that's wrong is a worse outcome than a correct-but-general one.
Content that belongs to a different part of the graph than where it was found. A syllabus or a schedule described on a course's main page doesn't belong as a flat property of the course itself; it describes a specific instance of that course (a particular offering, with its own dates and instructor) and needs its own place in the structure. Content in the right place semantically but the wrong place structurally is a subtler failure than a wrong type, and easier to miss on a casual read of the output.
A value that's correct in meaning but wrong in the format a machine needs. A duration written as "about two hours" is true and useless to a machine expecting a specific interval format. The honest options when a stated value can't be converted cleanly are to convert it properly or leave it out, never to force it into a technically-valid but meaningless placeholder just so a field isn't blank.
Terminology drift between how people write and how schema.org names things. A page that says "language" when the property is actually called something else, or uses "name" where a specific type expects a different label for the same idea. Small, easy to miss, and exactly the kind of thing that produces markup which validates syntactically while still being slightly wrong.
None of these are exotic. They're the ordinary texture of real pages written by real people who weren't thinking about schema.org's vocabulary when they wrote them, which is exactly why a generator has to handle them explicitly rather than assuming every page will be as clean as a documentation example.
What happens when your page changes afterward
Generation isn't a one-time event that stays true forever; the page it describes keeps changing underneath it. A price gets updated. A service gets discontinued. A team member listed as the contact leaves.
Here's the honest state of that problem: regenerating schema for a page whose content has changed produces a fresh result reliably, because the system recognizes that the content is different and doesn't hand back a stale cached answer. What it doesn't do today is proactively notice for you that a page's content drifted and its schema is now describing something slightly out of date. Nothing currently taps you on the shoulder and says "this page changed three weeks ago, you might want to regenerate." That's a real, honest gap, not a hidden one, and it's a large part of why schema quietly goes stale without anyone noticing until something else forces the question. A periodic re-audit, covered as the Monitor stage of the readiness loop, is currently the practical way to catch this, not an automatic alert built into generation itself.
Where a human should still look
The generator does produce an internal confidence signal, a rough sense of how sure it is about a given result. Here's the part worth being exact about, because it would be easy to overstate: that signal exists, but nothing today acts on it. There's no low-confidence queue, no page flagged for your review because the system itself was unsure. The confidence is computed; it isn't yet surfaced to you or gated on before a result gets used.
That's worth knowing because it means the checklist below is genuinely yours to run, not something you can assume is already being done for you in the background:
Spot-check pages with thin or ambiguous content. A page with two sentences of text gives a generator very little to classify or extract from correctly. The deterministic validator will confirm the required fields are present and correctly shaped; it has no way to know if a required field was filled with something technically valid but generic, because the source content simply didn't have much to say.
Look closely at any page that's plausibly more than one type. A landing page that's part product showcase, part FAQ, part case study is exactly the shape where a type decision is a judgment call, and worth a human glance even when the automated choice is defensible.
Treat the health score as your real signal, not a feeling of confidence. It's the one part of this whole process that's deterministic and rule-based rather than probabilistic, which makes it the actual thing to watch, more than any sense of how "smart" a given result looks.
Re-check after a real change to your business, not just to your website. A regenerated page reflects new content correctly. It won't tell you that regenerating was worth doing in the first place after a fact changed; that part is still a decision you make.
Common mistakes
Assuming "automated" means "unattended forever." Automated describes how a single generation happens, not a guarantee that the result stays correct without anyone ever looking again.
Reading a passed validation as proof the content is accurate. The deterministic validator confirms structure: the right fields, present, in the right shape. It has no opinion on whether a field's value is actually true, because truth isn't something a syntax check can measure.
Treating a generic classification as a bug rather than a safeguard. When a business or page is genuinely ambiguous, a broader, correct classification is the honest answer, not a failure to be more specific. A narrower guess that happens to be wrong is the actual failure.
Never revisiting a page after the business itself changes. Regenerated content is only as current as the last time someone (or an audit) noticed the underlying facts had moved.
Frequently Asked Questions
Want to see what automated generation actually produces for your own pages, and where the health score flags something worth a second look? Run a free AI readiness check and see the real output, not a demo.
Is your site ready for AI?
Get a free readiness score in under a minute. No signup, no card.
Run the free check