Rich Results Schema.org Tester avatar

Rich Results Schema.org Tester

Pricing

from $0.01 / 1,000 results

Go to Apify Store
Rich Results Schema.org Tester

Rich Results Schema.org Tester

Test any URL for Google Rich Results eligibility. Validate structured data, identify schema errors & get recommendations. Batch test multiple pages for SEO audits.

Pricing

from $0.01 / 1,000 results

Rating

0.0

(0)

Developer

The Howlers

The Howlers

Maintained by Community

Actor stats

0

Bookmarked

25

Total users

0

Monthly active users

5 days ago

Last modified

Features

Limited permissions

Share

Google Rich Results Tester

Check whether your pages can earn rich results in Google Search. The actor loads each URL in a real browser (so markup added by JavaScript is included, as it is for Google), reads every structured data item on the page in JSON-LD, microdata and RDFa, and checks each one against the required and recommended properties in Google's structured data documentation.

For every URL you get the items found, the rich result types they are eligible for, errors (missing or invalid required properties, which block the rich result) and warnings (missing recommended properties, which do not block it).

Note: this actor runs in Demo Mode by default, so a default run returns sample results from three built-in sample pages and charges no URL tests. Nothing is fetched in Demo Mode, so sample rows have testStatus sample and demo: true, and the run's OUTPUT record reports totalTested: 0. Set demoMode to false to test your own URLs.

This is an independent tool. It is not made by Google and does not call Google's Rich Results Test. It follows Google's published requirements, so results usually match Google's own test, but Google can still decide not to show a rich result for reasons markup alone does not show (site quality, policies, crawl access).


Quick Start

Test with Demo Mode (free sample output)

{
"demoMode": true
}

Test your own pages

{
"demoMode": false,
"urls": [
"https://www.example.com/products/blue-widget",
"https://www.example.com/recipes/easy-pancakes"
],
"userAgent": "smartphone"
}

What it checks

Rich resultSchema.org types
ArticleArticle, NewsArticle, BlogPosting and other Article types
BreadcrumbsBreadcrumbList
CarouselItemList of Recipe, Course, Restaurant or Movie items
Course listCourse
Dataset (Dataset Search only)Dataset
Discussion forumDiscussionForumPosting, SocialMediaPosting
Employer aggregate ratingEmployerAggregateRating
EventEvent and its subtypes
Image metadataImageObject with license or credit details
Job postingJobPosting
Local businessLocalBusiness and all its subtypes (Restaurant, Dentist, Plumber and so on)
Merchant listingProduct with an Offer (a Car also needs Product in @type, see below)
MovieMovie
OrganizationOrganization and its subtypes
Product snippetProduct and its subtypes, including ProductGroup variants (a Car also needs Product in @type, see below)
Product variantsProductGroup
Profile pageProfilePage
Q&AQAPage
RecipeRecipe
Review snippetReview and AggregateRating, on their own or nested in a reviewable item
Site nameWebSite
Software appSoftwareApplication, MobileApplication, WebApplication, VideoGame
VideoVideoObject

Besides missing properties, it flags values Google cannot read: dates that are not ISO 8601, prices with currency symbols, currency codes that are not three-letter ISO 4217 codes, ratings outside their scale, durations that are not ISO 8601, JSON-LD that does not parse, and JSON-LD without a schema.org @context.

Retired features

Markup for features Google no longer shows is still detected and reported with status retired, so you know it no longer earns anything:

  • FAQ (FAQPage): Google stopped showing FAQ rich results on May 7, 2026.
  • How-to (HowTo): retired in September 2023.
  • Fact check (ClaimReview), special announcement and estimated salary: retired in 2025.
  • Vehicle listing (Car, Vehicle, Motorcycle, BusOrCoach, MotorizedBicycle): retired in 2025, and Google removed its documentation on September 9, 2025. These items are still checked as products, because they can still earn product snippets and merchant listings. Google's product documentation says Car is not read as a Product on its own, so a Car without Product in @type is reported with an error asking you to add it, as in ["Product", "Car"]. The other vehicle types get a warning instead, because the documentation names only Car.
  • Sitelinks search box (WebSite SearchAction): retired in November 2024.

Input Parameters

ParameterTypeDefaultRequiredDescription
demoModebooleantrueNoReturn labeled sample results. No URLs are fetched and no URL tests are charged.
urlsarray-NoPages to test.
userAgentstring"smartphone"NoBrowser window size: smartphone or desktop.
includeScreenshotsbooleanfalseNoSave a screenshot of each rendered page to the key-value store.
validateSchemaTypesarray-NoOnly report pages that include one of these schema.org types anywhere in their structured data, nested items included (for example a Product in WebPage.mainEntity or inside an @graph node). Subtypes match too, so LocalBusiness matches Dentist or Restaurant. Other pages are listed as skipped and not charged.
proxyConfigurationobject-NoOptional proxy for sites that block requests from Apify servers.
webhookUrlstring-NoURL that receives a POST with a results summary when the run finishes.

Output

One dataset row per URL. The main fields:

FieldDescription
urlThe URL you asked to test.
testStatustested, failed (the page could not be loaded), skipped, or sample (a Demo Mode row built from a sample page, nothing was fetched).
eligibletrue when at least one item is eligible for a rich result.
eligibleRichResultTypesRich result types with at least one valid item, for example ["Product snippet", "Breadcrumbs"].
detectedRichResultTypesEvery rich result type found, including invalid and retired ones.
richResultsOne entry per rich result type: status, item counts, errors, warnings and notes.
schemaTypesTop-level schema.org types found on the page.
allSchemaTypesEvery schema.org type on the page, nested items included. validateSchemaTypes matches against this list.
schemaItemsEvery item checked: its types, format (json-ld, microdata or rdfa), status, errors, warnings, notes, structured issues and the item's own properties.
itemsDetectedNumber of items checked.
errors, totalErrorsProblems that block a rich result, prefixed with the item type.
warnings, totalWarningsMissing recommended properties and other non-blocking issues.
notesPlain explanations, such as a retired feature or self-serving review stars.
rawJsonLd, microdata, rdfaThe structured data as read from the page.
httpStatus, finalUrl, pageTitleWhat the page returned.
fetchMethodbrowser, http when the page was read without a browser after the browser could not load it, or sample in Demo Mode.
screenshot, screenshotUrlKey and link of the screenshot, when requested.

Example row (shortened):

{
"url": "https://www.example.com/products/blue-widget",
"testStatus": "tested",
"eligible": true,
"eligibleRichResultTypes": ["Product snippet", "Merchant listing", "Breadcrumbs"],
"schemaTypes": ["Product", "BreadcrumbList"],
"totalErrors": 0,
"totalWarnings": 3,
"warnings": [
"Product: Missing recommended property: a product identifier (gtin, mpn or isbn) (Merchant listing)",
"Product: Missing recommended property: offers.shippingDetails (or a shipping policy on your Organization) (Merchant listing)",
"Product: Missing recommended property: review (Product snippet)"
]
}

Pricing

This actor uses pay-per-event billing:

EventWhen it is chargedPrice
Actor startOnce when the run starts, one event per GB of memory (minimum one). At the default 4 GB of memory a run starts at $0.40$0.10 per GB
URL TestedOnce per URL that loaded and was checked$0.03
ResultEach item written to the default dataset$0.00001

You are not charged a URL test for pages that fail to load, return an HTTP error, come back empty or show a bot check, for pages skipped by validateSchemaTypes, or for anything in Demo Mode. The run stops testing new URLs when it reaches the maximum total charge you set.


Troubleshooting

A URL shows testStatus: failed

The page could not be loaded, returned an HTTP error, came back empty or showed a bot check. The errors field says which. A page only counts as a bot check when the site served its challenge or block page instead of the real one. Pages that simply load a bot protection script are tested as normal. For sites that block Apify servers, try again with a proxy in proxyConfiguration.

Errors I did not expect

Each error names the property and the rich result it belongs to, for example Missing required property: offers.priceCurrency (Merchant listing). Google lists the same requirements on its structured data documentation page for that feature.

No structured data found

The page has no JSON-LD, microdata or RDFa that the browser could see. If your markup is added by a plugin or tag manager, check that it loads on the live page.


Built by John Rippy | Actor Arsenal