Rich Result Eligibility Checker
Deeper than the generic schema skill: this skill answers "which rich results CAN
this page earn, and what exactly is missing?" — per-type, against Google's own
required/recommended property lists. For markup generation, use /seo-schema.
Inputs
- URL (preferred) — the page to check, or
- Page type — an archetype ("blog post", "product page", "event page") when no live URL exists yet, or
- Local HTML file — read with Read tool instead of WebFetch
Optional: existing JSON-LD pasted by the user for offline validation.
Execution
- Fetch the page. WebFetch the URL (or Read the local file). If WebFetch is
blocked, fall back to
curl -sL <url>. - Detect existing structured data. Extract every
<script type="application/ld+json">block; also note Microdata (itemscope/itemprop) and RDFa (typeof/property). JSON-LD is Google's stated preference. - Classify the page archetype from content signals (title, H1, byline, price, dates, ingredients, salary, address, thread replies).
- Check eligibility with the decision table below — map archetype → active rich result types. Reject any type on the deprecation list.
- Diff required properties. For each eligible type, compare existing markup against the required and recommended property lists below.
- Output the gap report (format under Output), with a Rich Results Test link for live verification.
Eligibility Decision Table
| Page archetype | Eligible rich result types | Source of truth |
|---|---|---|
| Blog post / news / sports article | Article (Article, NewsArticle, BlogPosting) + BreadcrumbList |
structured-data/article |
| Product page (ecommerce) | Product snippet, Merchant listing, Review snippet, BreadcrumbList | structured-data/product-snippet |
| Event / concert / webinar page | Event | structured-data/event |
| Recipe page | Recipe (+ ItemList for carousels, HowToStep for instructions) | structured-data/recipe |
| Job listing | JobPosting | structured-data/job-posting |
| Business location page | LocalBusiness | structured-data/local-business |
| Author / user / company profile | ProfilePage | structured-data/profile-page |
| Forum thread / UGC discussion | DiscussionForumPosting (or SocialMediaPosting) + Comment | structured-data/discussion-forum |
| Q&A page (one question, many answers) | QAPage (use instead of DiscussionForumPosting) | structured-data/discussion-forum |
| Page with reviews of OTHER things | Review snippet / AggregateRating | structured-data/review-snippet |
| Video page | VideoObject | structured-data/video |
| Any page with hierarchy | BreadcrumbList | structured-data/breadcrumb |
| Homepage / brand page | Organization (knowledge panel, not a rich result card) | structured-data/organization |
Hard Rules — Deprecated & Restricted Types
Never report these as eligible (consistent with /seo-schema):
- HowTo — rich results removed September 2023 (HowToStep nested inside
Recipe
recipeInstructionsis still fine). - FAQPage — restricted August 2023: ONLY government and healthcare authority sites remain eligible. Everyone else: not eligible.
- SpecialAnnouncement — deprecated July 31, 2025.
- CourseInfo, EstimatedSalary, LearningVideo — retired June 2025.
- ClaimReview — retired from rich results June 2025.
- VehicleListing — retired from rich results June 2025.
- Practice Problem — retired from rich results late 2025.
- Dataset — retired from rich results late 2025.
Also flag self-serving abuse: aggregateRating/review on LocalBusiness or
Organization markup about yourself is not eligible for review snippets —
those properties are only for sites that capture reviews about other entities.
Required vs Recommended Properties (Google-documented)
Article (Article / NewsArticle / BlogPosting)
- Required: none. Google documents only recommended properties.
- Recommended:
author(+author.name,author.url),headline,image(multiple ratios 16x9/4x3/1x1, ≥50K pixels),datePublished,dateModified(ISO 8601 with timezone).
Product (product snippet)
- Required:
name, AND at least one ofreview|aggregateRating|offers. - Recommended: the other two of
review/aggregateRating/offers; withinOffer:price(orpriceSpecification.price),priceCurrency,availability;positiveNotes/negativeNotesfor editorial pros/cons. - Note:
offerswithoutreview/aggregateRatingtriggers a Rich Results Test warning. Per Google's Dec 2025 JS guidance, ship Product/Offer JSON-LD in server-rendered HTML, not JS-injected.
Event
- Required:
name(event title, not venue),startDate(ISO 8601 date+time),location(Placewithlocation.address). - Recommended:
endDate,description,image,eventStatus,location.name,offers(+offers.price,offers.priceCurrency,offers.availability,offers.url,offers.validFrom),organizer,performer,previousStartDate(only withEventRescheduled).
Recipe
- Required:
name,image. - Recommended:
recipeIngredient,recipeInstructions(preferHowToStep),prepTime+cookTime(always paired) ortotalTime,recipeYield(required ifnutrition.caloriespresent),nutrition.calories,author,datePublished,description,keywords,recipeCategory,recipeCuisine,aggregateRating,video.
JobPosting
- Required:
title(job title, not posting title),description(full HTML),datePosted,hiringOrganization,jobLocation(must includeaddressCountry). - Recommended:
baseSalary(employer-provided only),employmentType,validThrough(required if posting expires),identifier,directApply; for 100% remote jobsjobLocationType: TELECOMMUTEis required, plusapplicantLocationRequirementsif location-restricted.
LocalBusiness
- Required:
name,address(PostalAddress). - Recommended:
url,telephone,geo(latitude/longitude, ≥5 decimal places),openingHoursSpecification(opens/closes/dayOfWeek),priceRange(<100 chars),menu+servesCuisine(food businesses),department. (review/aggregateRatingonly for third-party review sites.)
ProfilePage
- Required:
mainEntity(PersonorOrganization) withname. - Recommended:
dateCreated,dateModified,alternateName(handle),description,identifier,image,sameAs,interactionStatistic,agentInteractionStatistic.
DiscussionForumPosting
- Required:
author(+author.name),datePublished, AND one oftext|image|video(content not required when representing a post on another page via externalurl). - Recommended:
headline,url,author.url,interactionStatistic,sharedContent, nestedcomment(eachCommentrequiresauthor+datePublished).
Output
## Rich Result Eligibility Report — <URL>
Detected page archetype: <archetype>
Existing structured data: <types found, format>
### Eligibility
| Rich result type | Eligible? | Markup present? | Verdict |
|---|---|---|---|
| Product snippet | Yes | Partial | Fix gaps |
| FAQ | No (restricted to gov/health, Aug 2023) | Yes | REMOVE |
### Gap Table (per eligible type)
| Property | Status | Required? | Fix |
|---|---|---|---|
| offers.priceCurrency | MISSING | Recommended | Add ISO 4217 code |
### Next Steps
1. <highest-impact fixes, required props first>
2. Validate live: https://search.google.com/test/rich-results
(syntax-only check: https://validator.schema.org/)
3. For generating the missing JSON-LD, use /seo-schema
Always include the Rich Results Test link. Remind the user that valid markup makes a page eligible — Google does not guarantee a rich result will show.
Cross-references
/seo-schema— markup generation, templates, full deprecation list/seo-page— broader single-page SEO review- Full type gallery: https://developers.google.com/search/docs/appearance/structured-data/search-gallery