/ JSON Checker Fixes / Schema Types

How to Fix Schema Types

Schema.org's @type tells search engines what kind of entity you're describing. Using generic types (CreativeWork, Thing, WebPage) when specific ones exist (Recipe, Product, NewsArticle) costs rich-result eligibility. Each specific type unlocks type-specific rich results: NewsArticle for Top Stories carousel, Recipe for recipe cards, Event for event search. This guide covers the schema.org hierarchy, the most-common type mappings, and how to pick the right one consistently.

1. Audit current types

Step 1
List every @type used
# Across all pages, get unique types
grep -roh '"@type":\s*"[^"]*"' . | sort -u
Should match content categories. A blog with NewsArticle, Article, BlogPosting, CreativeWork all mixed is inconsistent — pick one per content type.
Step 2
Compare to Google rich result eligibility
Each Google rich result requires specific @type. Generic types don't qualify:
  • News carousel: NewsArticle (not Article)
  • Recipe card: Recipe (not HowTo)
  • Product carousel: Product (not Offer)
  • Event search: Event (not just WebPage)

2. The schema.org hierarchy

Types inherit from parents. Specific types are subtypes of more general types:

Thing
├── CreativeWork
│   ├── Article
│   │   ├── BlogPosting
│   │   ├── NewsArticle
│   │   ├── Report
│   │   ├── ScholarlyArticle
│   │   └── TechArticle
│   ├── Book
│   ├── Recipe
│   ├── Movie
│   ├── VideoObject
│   └── WebPage
│       ├── AboutPage
│       ├── CheckoutPage
│       ├── ContactPage
│       ├── FAQPage
│       ├── ItemPage          ← product detail
│       ├── ProfilePage
│       ├── QAPage
│       └── SearchResultsPage
├── Event
│   ├── BusinessEvent
│   ├── EducationEvent
│   ├── ExhibitionEvent
│   ├── Festival
│   └── ...
├── Organization
│   ├── Corporation
│   ├── LocalBusiness         ← geo-located businesses
│   │   ├── Restaurant
│   │   ├── Store
│   │   └── ...
│   ├── NGO
│   └── ...
├── Person
├── Place
│   ├── LocalBusiness (also subtype here)
│   ├── TouristAttraction
│   └── ...
├── Product
│   ├── IndividualProduct
│   ├── ProductModel
│   └── SomeProducts
└── ...

Subtypes inherit all properties from their parents. A NewsArticle has everything Article has, plus news-specific fields. Use the deepest applicable subtype.

3. Common type mappings

ContentBest @typeWhy
News articleNewsArticleTop Stories carousel eligibility
Blog postBlogPostingBlog-specific signals
Magazine articleArticleGeneric article fallback
Opinion / editorialOpinionNewsArticleOpinion-piece specific
RecipeRecipeRecipe card rich result
How-to guide (non-recipe)HowToHowTo step-by-step display
Product pageProductShopping carousel, Product rich result
RestaurantRestaurantLocal Pack, restaurant-specific fields
Physical storeStoreLocal Pack with shop-specific fields
Local business (generic)LocalBusinessLocal Pack eligibility
Software productSoftwareApplicationApp rating, download links
BookBookBook-specific fields (ISBN, format)
CourseCourseCourse-specific search features
Job postingJobPostingGoogle Jobs eligibility
EventEvent or subtypeEvent search and tickets
FAQ sectionFAQPageStandard FAQ markup
Q&A discussionQAPageSingle question, multiple answers
VideoVideoObjectVideo rich result with thumbnail

4. Multi-typing

Some content fits multiple types. Schema.org allows arrays for @type:

// A recipe video that's also a how-to
{
  "@type": ["Recipe", "HowTo"],
  "name": "How to make sourdough",
  // Recipe fields
  "recipeIngredient": [...],
  "recipeInstructions": [...],
  // HowTo fields
  "totalTime": "PT24H",
  "tool": [
    { "@type": "HowToTool", "name": "Dutch oven" }
  ]
}

Google reads both. Page becomes eligible for Recipe rich results AND HowTo rich results.

5. Wrong-type fixes

WebPage instead of Article

// WRONG — blog post tagged generically
{ "@type": "WebPage", "name": "How we tripled conversions..." }

// RIGHT — specific Article subtype
{
  "@type": "BlogPosting",
  "headline": "How we tripled conversions through better onboarding",
  "datePublished": "2024-01-15",
  "author": { ... },
  "publisher": { ... }
}

Article instead of NewsArticle

// SUBOPTIMAL — generic for news
{ "@type": "Article", "headline": "Breaking: Major event..." }

// BETTER — eligible for News carousel
{
  "@type": "NewsArticle",
  "headline": "Breaking: Major event...",
  "datePublished": "2024-01-15T08:30:00-05:00",
  "dateline": "London, UK",
  // ... rest
}

Thing or Product instead of LocalBusiness

// WRONG — restaurant tagged generically
{ "@type": "Thing", "name": "Joe's Pizza" }

// RIGHT — Local Pack eligible
{
  "@type": "Restaurant",
  "name": "Joe's Pizza",
  "address": { ... },
  "telephone": "+44 20 1234 5678",
  "servesCuisine": "Italian",
  "priceRange": "$$",
  "openingHoursSpecification": [ ... ]
}

6. WebPage subtypes

WebPage has specific subtypes Google understands for site navigation context:

"@type": "AboutPage"        — your /about page
"@type": "ContactPage"      — your /contact page
"@type": "FAQPage"          — pages with Q&A content
"@type": "QAPage"           — single question + answers (forum-style)
"@type": "ProfilePage"      — author/team member pages
"@type": "CollectionPage"   — category/listing pages
"@type": "ItemPage"         — single product/item detail
"@type": "CheckoutPage"     — checkout flow steps
"@type": "SearchResultsPage" — internal search results

These don't unlock specific rich results but help Google understand page purpose for ranking and indexing decisions.

7. Type-specific required fields

Changing to a more specific type means meeting the required fields for that type's rich result. See the required fields guide for what each type needs.

⚠️ Don't declare @type Recipe just to claim Recipe rich results without actual recipe content. Google detects content-schema mismatch — applies manual penalties for spam structured data.

8. Validate

Step 1
Rich Results Test per page type
For each content type, run Rich Results Test on a representative page. Confirm detected @type matches what you specified and the rich-result eligibility is granted.
Step 2
Search Console reports per type
Search Console Enhancements section gains a new report for each new schema type Google detects. NewsArticle gets a "Top Stories" or news-specific enhancement; Recipe gets a Recipe enhancement, etc.
💡 Audit @type quarterly. Schema.org and Google's rich results catalogue evolve — new specific types get supported, old ones get deprecated. Staying current means using the latest applicable types for maximum rich-result eligibility.

📋 Re-run the JSON Checker

Verify @type findings are cleared.

Run JSON Checker →
Related Guides: JSON Checker Fixes  ·  Fix Required Fields  ·  Rich Snippets Fixes  ·  JSON Checker Guide
💬 Got a problem?