Schema markup is supposed to be a low-risk, high-upside SEO move: add some JSON-LD, become eligible for rich results, signal page intent to AI search engines. But I see the same handful of mistakes in audits over and over — and several of them quietly hurt rankings instead of helping.
This post is eight schema patterns I've watched cause problems, with the wrong shape, the right shape, and the actual consequence.
1. Markup that doesn't match visible content
The single biggest violation. Some teams mark up Q&A pairs in JSON-LD that aren't on the page. Or list products in ItemList that aren't visible. Or claim a Review rating that has no review section.
Google has been explicit: structured data must reflect what's visible. Systematic mismatch is a manual action risk — Google can rank your site lower for "structured data issue."
Wrong: 8 questions in FAQPage JSON-LD, only 3 questions visible on the page.
Right: 1:1 between JSON-LD questions and visible content.
Why: Google parses both the structured data and the rendered page. Discrepancies above some threshold trigger manual review.
2. One FAQPage element per question
The shape some templates emit:
<script type="application/ld+json">
{ "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": { ...question 1 } }
</script>
<script type="application/ld+json">
{ "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": { ...question 2 } }
</script>
This is invalid. Google's docs require one FAQPage element per page, with all questions inside mainEntity as an array.
Right:
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{ "@type": "Question", "name": "...", "acceptedAnswer": { "@type": "Answer", "text": "..." } },
{ "@type": "Question", "name": "...", "acceptedAnswer": { "@type": "Answer", "text": "..." } }
]
}
Consequence: Google ignores the lot. No rich result eligibility, no AI Overview structure hint.
Use the Schema Generator to produce a valid FAQPage shape automatically.
3. HTML inside acceptedAnswer.text
A common CMS mistake. The CMS stores answers as rich-text HTML and serialises them straight into JSON-LD:
Wrong:
{
"@type": "Answer",
"text": "<p>A meta description should be <strong>130-160 characters</strong>.</p>"
}
This validates as JSON, but voice assistants and AI tools render it with the tags literally visible: "A meta description should be <strong>130-160 characters</strong>."
Right: strip the tags before serialising.
{
"@type": "Answer",
"text": "A meta description should be 130-160 characters."
}
For inline formatting like bold or italics, just lose it. Plain text is the spec.
4. Stale dates that lie about freshness
Article schema includes datePublished and dateModified. Some sites update dateModified to the current date on every build — even when no content changed — to look fresh.
This worked briefly in 2020. By 2022 Google had figured it out. By 2024 it was a documented spam signal in the search rater guidelines.
Wrong: dateModified set to now() in your build script.
Right: only update dateModified when content actually changed. The file's git history or your CMS's revision history is the source of truth.
Consequence: Google increasingly ignores dateModified as a freshness signal on sites that abuse it. You lose the legitimate value when you actually do update something.
5. Schema for SoftwareApplication on every page
Some sites add SoftwareApplication schema to every page on the site (including the blog, the About page, the privacy policy). The intent is to repeat the brand signal.
Wrong: same SoftwareApplication JSON-LD on 200 unrelated pages.
Right: SoftwareApplication on the homepage and product landing page. Article on blog posts. WebPage on the rest (or no schema at all on simple pages).
Consequence: structured data is a per-page signal of what the page is. Putting SoftwareApplication on a privacy policy tells Google nothing useful and dilutes the signal where it does matter.
6. Review schema with no reviews
Some sites add AggregateRating to category pages with fake ratings — "4.8 stars from 12,847 reviews" — when the page has no actual reviews visible.
This was a popular black-hat tactic 2018-2021 because the stars in the SERP looked credible. Google cracked down hard in 2022. Manual actions for "review snippet" mismatch are still issued regularly.
Wrong: hardcoded rating values on category pages with no review section.
Right: only add AggregateRating to pages with genuine reviews visible. Pull the rating from the actual data, not a constant.
Consequence: manual action removes rich result eligibility across the entire site, sometimes for months.
7. HowTo schema in 2026
Google deprecated HowTo rich results in September 2023. The schema still validates, but the rich result is gone — there's no SERP enhancement.
Wrong: continuing to add HowTo schema to step-by-step content "for SEO."
Right: drop the HowTo schema. For step-by-step content, use clear <h2> step headings and consider Article schema instead.
Consequence: not actively harmful, but a waste of templating effort. The schema budget is better spent elsewhere.
FAQPage is in a different bucket — see our FAQ schema deep dive — because while the rich result largely went away in Aug 2023, the schema still has value for AI Overview, Bing, and voice. HowTo doesn't have those compensating use cases.
8. Missing required properties
Each schema type has required and recommended properties. Most validators don't complain about missing recommended properties, but eligibility quietly drops when they're absent.
The most common missing properties I see:
| Type | Often missing | Consequence |
|---|---|---|
Product | aggregateRating, image, brand | No star rating in SERP, no product card |
Article | author, dateModified | Reduced eligibility for top-stories |
Event | location, organizer | No Event card |
LocalBusiness | geo, openingHoursSpecification | No knowledge panel signal |
Recipe | cookTime, totalTime, recipeYield | No recipe card |
Fix: run your JSON-LD through Google's Rich Results Test. It tells you both errors and warnings — the warnings list missing recommended properties. Address those.
A pre-publish schema checklist
For every new page with structured data:
- Validate with the Rich Results Test and the Schema.org validator.
- Visible-content match: every value in JSON-LD also visible on the page.
- One schema element per type per page (one
FAQPage, oneArticle, etc.). - Plain text, no HTML, inside text fields.
- Real dates, not autogenerated
now()on every build. - No
HowTo— removed September 2023. - No
AggregateRatingwithout visible reviews — manual action risk. - Required + recommended properties filled where applicable.
Tools and references
- Schema Generator — produces valid JSON-LD for FAQPage, Article, Product, Breadcrumb, Local Business. Avoids most of the structural mistakes above.
- JSON-LD glossary entry — the format reference.
- Schema markup glossary entry — what's currently surfacing in 2026.
- FAQ schema deep dive — why FAQPage still matters despite the deprecation.
Structured data is one of the few SEO moves where the wrong implementation is actively worse than no implementation at all. Most of the upside requires fewer than 50 lines of JSON-LD; most of the downside comes from auto-generating that JSON-LD without humans checking it. Slow down, validate, and ship less.