Quick Overview The 10 Mistakes
Before diving into each mistake in detail, here's a quick reference table showing all 10 mistakes, their severity, and what they cause:
| # | Mistake | Severity | Result |
|---|---|---|---|
| 1 | Missing @context | Critical | Schema completely ignored |
| 2 | Missing @type | Critical | Schema completely ignored |
| 3 | Invalid JSON syntax | Critical | Schema cannot be parsed |
| 4 | Schema doesn't match page content | Critical | Manual penalty risk |
| 5 | Missing required fields | High | Rich results suppressed |
| 6 | Wrong date format | Medium | Validation error |
| 7 | Broken image or URL | Medium | Rich result thumbnail missing |
| 8 | Using wrong schema type | Medium | Wrong rich result or none |
| 9 | Outdated or expired values | Medium | Rich results suppressed |
| 10 | Schema in body instead of head | Low | Minor display issues |
Check your schema for these mistakes now
Free schema validator instant results, no signup needed
The 10 Mistakes In Detail
The @context field tells Google which vocabulary you're using. Without it, Google has no idea how to interpret your structured data so it ignores the entire block. This is the single most common schema error.
{
"@type": "FAQPage",
"mainEntity": [...]
}
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [...]
}
"@context": "https://schema.org" as the very first field in every JSON-LD block. Every schema generator on Schemify includes this automatically.The @type field identifies what kind of entity your schema describes. Without it, Google cannot determine what type of rich result to display and will skip your schema entirely.
{
"@context": "https://schema.org",
"name": "Sony Headphones",
"offers": {…}
}
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Sony Headphones",
"offers": {…}
}
"@type" as the second field, immediately after @context. Use an exact Schema.org type name; it is case-sensitive (Product, not product; FAQPage, not faqpage).A single missing comma, unclosed bracket, or unquoted key makes the entire JSON block invalid. Google cannot parse invalid JSON no matter how correct the schema logic is. This is especially common when manually editing schema code.
{
"@context": "https://schema.org"
"@type": "Product",
"name": "Headphones"
}
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Headphones"
}
Google cross-checks your schema against what's actually visible on your page. If you add FAQ schema with questions that aren't on the page, fake review ratings, or product prices that differ from what's shown, Google may issue a manual action against your site. This is the most serious schema mistake you can make.
Every schema type has required fields. Missing even one required field prevents Google from generating a rich result. The required fields differ by type, which catches many people out when they copy the schema from examples that are missing fields.
| Schema Type | Required Fields |
|---|---|
| FAQPage | @context, @type, mainEntity (with Question + Answer) |
| Product | @context, @type, name + offers or aggregateRating |
| Recipe | @context, @type, name, image, author, recipeIngredient, recipeInstructions |
| Event | @context, @type, name, startDate, location |
| JobPosting | @context, @type, title, hiringOrganization, jobLocation, datePosted |
| VideoObject | @context, @type, name, description, thumbnailUrl, uploadDate |
Dates in schema markup must follow the ISO 8601 format. Plain text dates like "May 18, 2026" or "18/05/2026" are invalid and will cause validation errors. This affects datePublished, dateModified, startDate, endDate, datePosted, and priceValidUntil fields.
"datePublished": "May 18, 2026", "dateModified": "18/05/2026"
"datePublished": "2026-05-18", "dateModified": "2026-05-18"
2026-05-18T09:00:00+05:30. For durations (Recipe, HowTo, Video): use ISO 8601 duration format like PT30M for 30 minutes.Google fetches the image URLs in your schema to display as thumbnails in rich results. If the URL is broken, returns a 404, requires login to access, or redirects to another URL, Google cannot display the image, and the rich result may be suppressed or shown without a thumbnail.
Using a generic schema type when a more specific one exists means you miss out on richer, more targeted rich result features. For example, using HowTo schema for a recipe instead of Recipe schema means you don't get the recipe carousel, ratings, or calorie display.
| Your Content | ❌ Common Wrong Type | ✅ Correct Type |
|---|---|---|
| Food recipe | HowTo | Recipe |
| Blog post | Article | BlogPosting |
| News article | Article | NewsArticle |
| Online course | Product | Course |
| App or software | Product | SoftwareApplication |
| Job listing | Article | JobPosting |
Schema with expired dates signals stale content to Google and can suppress rich results. This is especially common with priceValidUntil on Product schema, past dates on Event schema, and expired validThrough on JobPosting schema.
"priceValidUntil": "2025-12-31", // This date is in the past!
"priceValidUntil": "2026-12-31", // Always set a future date
priceValidUntil, always set it 6–12 months ahead. For events, update or remove schema as soon as the event ends. Expired job postings should be removed from both the page and the schema.Google officially supports JSON-LD anywhere in the HTML document in the head or the body. However, placing it in the <head> is strongly recommended as best practice because it ensures Google encounters your schema before parsing the body content and reduces any risk of parsing interference.
<body> <!-- page content --> <script type="application/ld+json"> { ... } </script> </body>
<head> <!-- meta tags etc --> <script type="application/ld+json"> { ... } </script> </head>
<head> section of your HTML. The only exception is WordPress's Custom HTML block, which adds schema to the body, but Google handles this correctly for WordPress sites.Validate your schema now
The Schemify Validator checks for all 10 mistakes instantly