Structured data features
Per-feature validation fixtures for every Google search-gallery rich-result feature, with known pass and fail states.
Feature-level structured data coverage: for each of the 26 Google
search-gallery rich-result features, a valid fixture (required plus
recommended properties — zero errors, zero warnings), a valid-minimal
fixture (required properties only — zero errors, warnings for the missing
recommended properties), and failing fixtures carrying exactly one deliberate
defect each.
Format-level mechanics — JSON-LD parsing, placement, malformed blocks, Microdata and RDFa — live in the structured-data category; this category only asks whether a syntactically valid block satisfies a specific feature’s published requirements.
Every fixture’s JSON-LD payload is frozen at the values recorded in the reference plans. Defective variants are kept out of the default sitemap so a baseline crawl sees only clean structured data.
Fixtures in this category
- Article — fully valid —
sd-article-valid(safe) - Article — bare type only —
sd-article-valid-minimal(safe) - NewsArticle — fully valid subtype —
sd-article-valid-newsarticle(safe) - Article — missing headline —
sd-article-missing-headline(moderate) - Article — invalid datePublished —
sd-article-invalid-datepublished(moderate) - Article — author as plain string —
sd-article-author-string(moderate) - Article — malformed image URL —
sd-article-image-malformed-url(moderate) - Breadcrumb — fully valid trail —
sd-breadcrumb-valid(safe) - Breadcrumb — final item omits item —
sd-breadcrumb-valid-minimal(safe) - Breadcrumb — two independent trails —
sd-breadcrumb-valid-multiple-trails(safe) - Breadcrumb — missing name —
sd-breadcrumb-missing-name(moderate) - Breadcrumb — malformed item URL —
sd-breadcrumb-malformed-item-url(moderate) - Breadcrumb — position as string —
sd-breadcrumb-position-string(moderate) - Breadcrumb — single item trail —
sd-breadcrumb-single-item(moderate) - Breadcrumb — position gap —
sd-breadcrumb-position-gap(moderate) - Carousel — all-in-one Recipe list —
sd-carousel-valid(safe) - Carousel — summary page list —
sd-carousel-valid-minimal(safe) - Carousel — Recipe detail page 1 —
sd-carousel-detail-1(safe) - Carousel — Recipe detail page 2 —
sd-carousel-detail-2(safe) - Carousel — Recipe detail page 3 —
sd-carousel-detail-3(safe) - Carousel — missing position —
sd-carousel-missing-position(moderate) - Carousel — malformed item URL —
sd-carousel-malformed-url(moderate) - Carousel — item as plain string —
sd-carousel-item-string(moderate) - Carousel — mixed item types —
sd-carousel-mixed-types(moderate) - Carousel — single item list —
sd-carousel-single-item(moderate) - Course List — fully valid —
sd-course-list-valid(safe) - Course List — required only —
sd-course-list-valid-minimal(safe) - Course List — missing description —
sd-course-list-missing-description(moderate) - Course List — malformed course URL —
sd-course-list-invalid-url(moderate) - Course List — position as string —
sd-course-list-position-wrong-type(moderate) - Course List — too few courses —
sd-course-list-too-few-items(moderate) - Course List — duplicate course URL —
sd-course-list-duplicate-url(moderate) - Dataset — fully valid —
sd-dataset-valid(safe) - Dataset — required only —
sd-dataset-valid-minimal(safe) - Dataset — missing name —
sd-dataset-missing-name(moderate) - Dataset — description too short —
sd-dataset-description-too-short(moderate) - Dataset — invalid temporalCoverage —
sd-dataset-invalid-temporalcoverage(moderate) - Dataset — distribution as plain string —
sd-dataset-distribution-wrong-type(moderate) - Dataset — malformed download URL —
sd-dataset-invalid-download-url(moderate) - Discussion forum: valid —
sd-discussion-forum-valid(safe) - Discussion forum: valid minimal —
sd-discussion-forum-valid-minimal(safe) - Discussion forum: missing author —
sd-discussion-forum-missing-author(moderate) - Discussion forum: invalid datePublished —
sd-discussion-forum-invalid-datepublished(moderate) - Discussion forum: missing content —
sd-discussion-forum-missing-content(moderate) - Discussion forum: comment wrong type —
sd-discussion-forum-comment-wrong-type(moderate) - Discussion forum: invalid interactionType —
sd-discussion-forum-invalid-interactiontype(moderate) - Education Q&A: valid —
sd-education-qa-valid(safe) - Education Q&A: valid minimal —
sd-education-qa-valid-minimal(safe) - Education Q&A: missing acceptedAnswer —
sd-education-qa-missing-acceptedanswer(moderate) - Education Q&A: bad eduQuestionType —
sd-education-qa-bad-eduquestiontype(moderate) - Education Q&A: wrong type acceptedAnswer —
sd-education-qa-wrong-type-acceptedanswer(moderate) - Education Q&A: multiple acceptedAnswers —
sd-education-qa-multiple-acceptedanswers(moderate) - Employer aggregate rating: valid —
sd-employer-aggregate-rating-valid(safe) - Employer aggregate rating: valid minimal —
sd-employer-aggregate-rating-valid-minimal(safe) - Employer aggregate rating: missing itemReviewed —
sd-employer-aggregate-rating-missing-itemreviewed(moderate) - Employer aggregate rating: missing count —
sd-employer-aggregate-rating-missing-count(moderate) - Employer aggregate rating: bad ratingValue —
sd-employer-aggregate-rating-bad-ratingvalue(moderate) - Employer aggregate rating: wrong type itemReviewed —
sd-employer-aggregate-rating-wrong-type-itemreviewed(moderate) - Employer aggregate rating: out of bounds —
sd-employer-aggregate-rating-out-of-bounds(moderate) - Event: valid —
sd-event-valid(safe) - Event: valid minimal —
sd-event-valid-minimal(safe) - Event: missing startDate —
sd-event-missing-startdate(moderate) - Event: bad startDate —
sd-event-bad-startdate(moderate) - Event: wrong type location —
sd-event-wrong-type-location(moderate) - Event: endDate before startDate —
sd-event-enddate-before-startdate(moderate) - Event: bad availability —
sd-event-bad-availability(moderate) - Event: rescheduled missing previousStartDate —
sd-event-rescheduled-missing-previousstartdate(moderate) - FAQ: valid —
sd-faq-valid(safe) - FAQ: valid minimal —
sd-faq-valid-minimal(safe) - FAQ: missing mainEntity —
sd-faq-missing-mainentity(moderate) - FAQ: missing acceptedAnswer —
sd-faq-missing-acceptedanswer(moderate) - FAQ: wrong answer type —
sd-faq-wrong-answer-type(moderate) - FAQ: bad question type —
sd-faq-bad-question-type(moderate) - Image Metadata: valid —
sd-image-metadata-valid(safe) - Image Metadata: valid minimal —
sd-image-metadata-valid-minimal(safe) - Image Metadata: missing contentUrl —
sd-image-metadata-missing-contenturl(moderate) - Image Metadata: missing all credit —
sd-image-metadata-missing-all-credit(moderate) - Image Metadata: invalid license URL —
sd-image-metadata-invalid-license-url(moderate) - Image Metadata: wrong creator type —
sd-image-metadata-wrong-creator-type(moderate) - Job Posting: valid —
sd-job-posting-valid(safe) - Job Posting: valid minimal —
sd-job-posting-valid-minimal(safe) - Job Posting: valid remote —
sd-job-posting-valid-remote(safe) - Job Posting: missing title —
sd-job-posting-missing-title(moderate) - Job Posting: bad datePosted —
sd-job-posting-bad-dateposted(moderate) - Job Posting: wrong hiringOrganization type —
sd-job-posting-wrong-hiringorganization-type(moderate) - Job Posting: bad employmentType —
sd-job-posting-bad-employmenttype(moderate) - Job Posting: validThrough in the past —
sd-job-posting-validthrough-past(moderate) - Job Posting: missing jobLocation —
sd-job-posting-missing-joblocation(moderate) - Job Posting: remote missing applicantLocationRequirements —
sd-job-posting-remote-missing-applicantlocation(moderate) - Local Business: valid —
sd-local-business-valid(safe) - Local Business: valid minimal —
sd-local-business-valid-minimal(safe) - Local Business: missing address —
sd-local-business-missing-address(moderate) - Local Business: geo out of range —
sd-local-business-geo-out-of-range(moderate) - Local Business: address as plain string —
sd-local-business-address-string(moderate) - Local Business: bad opening hours —
sd-local-business-bad-opening-hours(moderate) - Local Business: priceRange too long —
sd-local-business-pricerange-too-long(moderate) - Math Solver: valid —
sd-math-solver-valid(safe) - Math Solver: valid minimal —
sd-math-solver-valid-minimal(safe) - Math Solver: missing usageInfo —
sd-math-solver-missing-usageinfo(moderate) - Math Solver: bad target URL —
sd-math-solver-bad-target-url(moderate) - Math Solver: potentialAction as plain string —
sd-math-solver-potentialaction-string(moderate) - Math Solver: bad eduQuestionType —
sd-math-solver-bad-eduquestiontype(moderate) - Movie: valid —
sd-movie-valid(safe) - Movie: valid minimal —
sd-movie-valid-minimal(safe) - Movie: missing image —
sd-movie-missing-image(moderate) - Movie: bad dateCreated —
sd-movie-bad-datecreated(moderate) - Movie: director as plain string —
sd-movie-director-string(moderate) - Movie: standalone (no ItemList) —
sd-movie-standalone(moderate) - Movie: duplicate position —
sd-movie-duplicate-position(moderate) - Organization: valid —
sd-organization-valid(safe) - Organization: valid minimal —
sd-organization-valid-minimal(safe) - Organization: missing name —
sd-organization-missing-name(moderate) - Organization: invalid country code —
sd-organization-invalid-country-code(moderate) - Organization: contactPoint wrong type —
sd-organization-contactpoint-wrong-type(moderate) - Organization: logo too small —
sd-organization-logo-too-small(moderate) - Organization: malformed iso6523Code —
sd-organization-malformed-iso6523(moderate) - Product: snippet valid —
sd-product-snippet-valid(safe) - Product: merchant valid —
sd-product-merchant-valid(safe) - Product: valid minimal —
sd-product-valid-minimal(safe) - Product: missing name —
sd-product-missing-name(moderate) - Product: invalid price —
sd-product-invalid-price(moderate) - Product: invalid currency —
sd-product-invalid-currency(moderate) - Product: bad availability enum —
sd-product-bad-availability-enum(moderate) - Product: offers wrong type —
sd-product-offers-wrong-type(moderate) - Product: no snippet signal —
sd-product-no-signal(moderate) - Product: rating out of bounds —
sd-product-rating-out-of-bounds(moderate) - Profile Page: valid —
sd-profile-page-valid(safe) - Profile Page: valid minimal —
sd-profile-page-valid-minimal(safe) - Profile Page: missing mainEntity —
sd-profile-page-missing-mainentity(moderate) - Profile Page: invalid dateCreated —
sd-profile-page-invalid-datecreated(moderate) - Profile Page: mainEntity wrong type —
sd-profile-page-mainentity-wrong-type(moderate) - Profile Page: mainEntity missing name —
sd-profile-page-missing-name(moderate) - Q&A Page: valid —
sd-qa-page-valid(safe) - Q&A Page: valid minimal —
sd-qa-page-valid-minimal(safe) - Q&A Page: missing answerCount —
sd-qa-page-missing-answercount(moderate) - Q&A Page: invalid datePublished —
sd-qa-page-invalid-datepublished(moderate) - Q&A Page: answer wrong type —
sd-qa-page-answer-wrong-type(moderate) - Q&A Page: multiple questions —
sd-qa-page-multiple-questions(moderate) - Q&A Page: answer missing text —
sd-qa-page-answer-missing-text(moderate) - Q&A Page: negative upvoteCount —
sd-qa-page-negative-upvotecount(moderate) - Recipe: valid —
sd-recipe-valid(safe) - Recipe: valid minimal —
sd-recipe-valid-minimal(safe) - Recipe: valid text instructions —
sd-recipe-valid-text-instructions(safe) - Recipe: valid carousel ItemList —
sd-recipe-valid-itemlist(safe) - Recipe: missing image —
sd-recipe-missing-image(moderate) - Recipe: invalid cookTime —
sd-recipe-invalid-cooktime(moderate) - Recipe: nutrition wrong type —
sd-recipe-nutrition-wrong-type(moderate) - Recipe: rating out of bounds —
sd-recipe-rating-out-of-bounds(moderate) - Recipe: cookTime without prepTime —
sd-recipe-cooktime-without-preptime(moderate) - Review Snippet: valid —
sd-review-snippet-valid(safe) - Review Snippet: valid minimal —
sd-review-snippet-valid-minimal(safe) - Review Snippet: missing author —
sd-review-snippet-missing-author(moderate) - Review Snippet: rating out of bounds —
sd-review-snippet-rating-out-of-bounds(moderate) - Review Snippet: wrong type reviewRating —
sd-review-snippet-wrong-type-reviewrating(moderate) - Review Snippet: aggregate missing count —
sd-review-snippet-aggregate-missing-count(moderate) - Review Snippet: self-serving —
sd-review-snippet-self-serving(moderate) - Review Snippet: unsupported itemReviewed —
sd-review-snippet-unsupported-itemreviewed(moderate) - Software App: valid —
sd-software-app-valid(safe) - Software App: valid minimal —
sd-software-app-valid-minimal(safe) - Software App: missing name —
sd-software-app-missing-name(moderate) - Software App: missing offers price —
sd-software-app-missing-offers-price(moderate) - Software App: no rating or review —
sd-software-app-no-rating-or-review(moderate) - Software App: rating out of bounds —
sd-software-app-rating-out-of-bounds(moderate) - Software App: wrong type offers —
sd-software-app-wrong-type-offers(moderate) - Software App: invalid category —
sd-software-app-invalid-category(moderate) - Speakable: valid —
sd-speakable-valid(safe) - Speakable: valid xpath —
sd-speakable-valid-xpath(safe) - Speakable: missing selector —
sd-speakable-missing-selector(moderate) - Speakable: empty selector —
sd-speakable-empty-selector(moderate) - Speakable: wrong type speakable —
sd-speakable-wrong-type-speakable(moderate) - Speakable: both selectors —
sd-speakable-both-selectors(moderate) - Speakable: selector no match —
sd-speakable-selector-no-match(moderate) - Paywalled Content: valid —
sd-paywalled-content-valid(safe) - Paywalled Content: valid minimal —
sd-paywalled-content-valid-minimal(safe) - Paywalled Content: valid multi-section —
sd-paywalled-content-valid-multi-section(safe) - Paywalled Content: missing isAccessibleForFree —
sd-paywalled-content-missing-isaccessibleforfree(moderate) - Paywalled Content: invalid cssSelector —
sd-paywalled-content-invalid-cssselector(moderate) - Paywalled Content: wrong type hasPart —
sd-paywalled-content-wrong-type-haspart(moderate) - Paywalled Content: selector no match —
sd-paywalled-content-selector-no-match(moderate) - Vacation Rental: valid —
sd-vacation-rental-valid(safe) - Vacation Rental: valid minimal —
sd-vacation-rental-valid-minimal(safe) - Vacation Rental: missing identifier —
sd-vacation-rental-missing-identifier(moderate) - Vacation Rental: invalid checkinTime —
sd-vacation-rental-invalid-checkintime(moderate) - Vacation Rental: wrong type occupancy —
sd-vacation-rental-wrong-type-occupancy(moderate) - Vacation Rental: too few images —
sd-vacation-rental-too-few-images(moderate) - Vacation Rental: low precision coords —
sd-vacation-rental-low-precision-coords(moderate) - Video: valid —
sd-video-valid(safe) - Video: valid minimal —
sd-video-valid-minimal(safe) - Video: valid clips —
sd-video-valid-clips(safe) - Video: valid SeekToAction —
sd-video-valid-seektoaction(safe) - Video: valid live —
sd-video-valid-live(safe) - Video: missing thumbnailUrl —
sd-video-missing-thumbnailurl(moderate) - Video: invalid duration —
sd-video-invalid-duration(moderate) - Video: wrong type interactionStatistic —
sd-video-wrong-type-interactionstatistic(moderate) - Video: clip duplicate start —
sd-video-clip-duplicate-start(moderate) - Video: clip offset order —
sd-video-clip-offset-order(moderate)