Audit Standard / 2026.6

Rule explorer: Audit Standard 2026.6

Every check that defines technical readiness in MaxiMarket Audit Standard 2026.6, exactly as the audit applies it. Open a rule to see what it checks, why it matters, how to fix it, where its authority comes from and how much it counts.

Guides by topic: technical SEO audit rules, AI readiness, structured data and ecommerce product data.

Version
2026.6
Status
Current
Published
2026-10-22
Rules
117
Scored
87
Observations
37

Authority levels

Official search-engine requirement
A search engine documents it as required for a specific outcome, such as Google eligibility.
Strongest external authority
Open standard / Schema.org
Defined by an open standard or vocabulary: HTML, WCAG, IETF RFCs, Schema.org, Sitemaps, Open Graph.
Official platform recommendation
Recommended in official platform documentation, such as Google Search Central or an AI platform.
Accepted best practice
Widely accepted practice with a cited source, but no official requirement.
MaxiMarket recommendation
MaxiMarket’s own advice. Never presented as a search engine or platform requirement.
MaxiMarket methodology

Filter

Showing 17 rules and 0 observations.

Rules

Rules pass or fail. A failed rule becomes a finding in your report; scored rules also count toward the Technical Score.

Ratings and reviews

STRUCTURED-RATING-001Official search-engine requirement · RequiredAggregateRating has required propertiesStructured dataWarning when failedWeight 2Technical SearchAI DiscoveryCommerceMachine Readability
What this checks
ratingValue and ratingCount or reviewCount on each AggregateRating.
Why it matters
Google requires these properties for review snippets.
How to fix
Add ratingValue and ratingCount (or reviewCount) to each AggregateRating.
Expected
Every AggregateRating has ratingValue and at least one of ratingCount or reviewCount.
Applies to
Pages with at least one AggregateRating entity.
Authority
Official search-engine requirement · RequiredRequired for Google review snippets.
Technical Score
Weight 2 of 3Required properties for review snippets.
How MaxiMarket detects it
Checks AggregateRating entities (and subtypes) found in the inspected JSON-LD. Reports when one lacks a non-empty ratingValue or has neither ratingCount nor reviewCount.
Sources
STRUCTURED-RATING-002Official search-engine requirement · RequiredReview has required propertiesStructured dataWarning when failedWeight 2Technical SearchAI DiscoveryCommerceMachine Readability
What this checks
author, reviewRating.ratingValue and, for reviews not nested in the reviewed item, itemReviewed.
Why it matters
Google requires these properties for review snippets.
How to fix
Add author, reviewRating.ratingValue and (for standalone reviews) itemReviewed to each Review.
Expected
Every Review has an author and a reviewRating with ratingValue; top-level reviews also name itemReviewed.
Applies to
Pages with at least one Review entity.
Authority
Official search-engine requirement · RequiredRequired for Google review snippets.
Technical Score
Weight 2 of 3Required properties for review snippets. Excluded from the score when STRUCTURED-AUTHOR-001 fails, because a nameless author can fail both checks.
How MaxiMarket detects it
Checks Review entities (and subtypes) found in the inspected JSON-LD. Reports when one lacks author, lacks a reviewRating with a non-empty ratingValue, or is a top-level entity without itemReviewed.
Sources

Product and Offer data

STRUCTURED-PRODUCT-001Official search-engine requirement · RequiredProduct has a nameProductWarning when failedWeight 3Technical SearchAI DiscoveryCommerceMachine Readability
What this checks
Whether each inspected Product entity has a usable name.
Why it matters
Google lists name as required for both Product snippets and merchant listings; items missing required properties are not eligible for rich results.
How to fix
Add a "name" property with the product name to each Product entity.
Expected
Every Product entity has a non-empty name.
Applies to
Pages with at least one fully inspected Product entity; not applicable otherwise.
Authority
Official search-engine requirement · RequiredRequired for Google Product snippet and merchant listing rich result eligibility.
Technical Score
Weight 3 of 3A Product name is required for every product rich result.
How MaxiMarket detects it
Reports when at least one fully inspected Product entity (at most 20) has no non-empty string name.
Sources
STRUCTURED-PRODUCT-002Official search-engine requirement · RequiredProduct has an offer (merchant listings)ProductWarning when failedNot scoredTechnical SearchAI DiscoveryCommerceMachine Readability
What this checks
Whether each inspected Product entity has a recognizable Offer or AggregateOffer.
Why it matters
Google requires offers for merchant listings. The separate Product-snippet requirement (offers, review or aggregate rating) is STRUCTURED-PRODUCT-008.
How to fix
Add an "offers" property with an Offer (or AggregateOffer for multiple sellers) to each Product entity.
Expected
Every Product entity has an offers property containing an Offer or AggregateOffer.
Applies to
Pages with at least one fully inspected Product entity; not applicable otherwise. Merchant-listing requirement.
Authority
Official search-engine requirement · RequiredRequired for Google merchant listing eligibility.
Technical Score
Not scoredMerchant listings apply only to pages where the product can be bought, which MaxiMarket cannot infer; Product-snippet eligibility is scored by STRUCTURED-PRODUCT-008.
How MaxiMarket detects it
Reports when at least one fully inspected Product entity has no offers value whose @type is Offer or AggregateOffer. Reviews and ratings are not considered.
Sources
STRUCTURED-PRODUCT-008Official search-engine requirement · RequiredProduct has an offer, review or aggregate rating (Product snippets)ProductWarning when failedWeight 2Technical SearchAI DiscoveryCommerceMachine Readability
What this checks
Whether each inspected Product entity has at least one of offers, review or aggregateRating.
Why it matters
Google requires one of offers, review or aggregateRating for Product snippets; items missing required properties are not eligible for rich results.
How to fix
Add an "offers" Offer, a "review" Review or an "aggregateRating" AggregateRating to each Product entity.
Expected
Every Product entity has an Offer or AggregateOffer, a Review, or an AggregateRating.
Applies to
Pages with at least one fully inspected Product entity; not applicable otherwise. Product-snippet requirement.
Authority
Official search-engine requirement · RequiredRequired for Google Product snippet eligibility.
Technical Score
Weight 2 of 3One of offers, review or rating is required for Product snippets.
How MaxiMarket detects it
Reports when at least one fully inspected Product entity (at most 20) has none of: an offers value typed Offer or AggregateOffer, a review object (typed Review or untyped), or an aggregateRating object (typed AggregateRating or untyped).
Sources
STRUCTURED-PRODUCT-003Official search-engine requirement · RequiredProduct has an imageProductWarning when failedWeight 2Technical SearchAI DiscoveryCommerceMachine Readability
What this checks
Whether each inspected Product entity has a usable image.
Why it matters
Google lists image as required for merchant listings.
How to fix
Add an "image" property with the URL of a product photo to each Product entity.
Expected
Every Product entity has an image URL or ImageObject.
Applies to
Pages with at least one fully inspected Product entity; not applicable otherwise.
Authority
Official search-engine requirement · RequiredRequired for Google merchant listing eligibility.
Technical Score
Weight 2 of 3An image is required for merchant listings.
How MaxiMarket detects it
Reports when at least one fully inspected Product entity has no non-empty image string, array item or ImageObject. Image URLs are not fetched or validated.
Sources
STRUCTURED-PRODUCT-009Official search-engine requirement · RequiredProductGroup declares a name and a group identifierProductWarning when failedWeight 2Technical SearchAI DiscoveryCommerceMachine Readability
What this checks
ProductGroup name, and a product group identifier as productGroupID or as inProductGroupWithID on its variants.
Why it matters
Google requires a ProductGroup name, and each product group needs a unique ID given by productGroupID or by inProductGroupWithID on its variants.
How to fix
Add name and productGroupID to the ProductGroup.
Expected
A name and a group identifier.
Applies to
Pages with at least one ProductGroup entity.
Authority
Official search-engine requirement · RequiredRequired for Google product variant support.
Technical Score
Weight 2 of 3A ProductGroup without a name or group ID is not usable for variants.
How MaxiMarket detects it
Checks ProductGroup entities in the inspected JSON-LD. Reports when one has no non-empty name, or has no productGroupID while none of its variants (hasVariant Products, or Products whose isVariantOf is the group) declares inProductGroupWithID.
Sources
STRUCTURED-PRODUCT-010Official search-engine requirement · RequiredVariant group identifiers matchProductWarning when failedWeight 2Technical SearchAI DiscoveryCommerceMachine Readability
What this checks
inProductGroupWithID of each variant against productGroupID of its ProductGroup.
Why it matters
Google requires the two identifiers to match when both are provided.
How to fix
Use the same identifier in productGroupID and in every variant's inProductGroupWithID.
Expected
Equal values.
Applies to
Pages where a ProductGroup declares productGroupID and at least one of its variants declares inProductGroupWithID.
Authority
Official search-engine requirement · RequiredRequired for Google product variant support.
Technical Score
Weight 2 of 3Mismatched group identifiers break the variant relationship.
How MaxiMarket detects it
For ProductGroups with productGroupID, reports when a linked variant (hasVariant, or isVariantOf the group) declares a different inProductGroupWithID (compared after trimming whitespace).
Sources
STRUCTURED-OFFER-001Official search-engine requirement · RequiredOffer has a priceOfferWarning when failedWeight 3Technical SearchAI DiscoveryCommerceMachine Readability
What this checks
Whether each inspected Offer has a price or a priceSpecification price.
Why it matters
Google lists price (or priceSpecification.price) as required on Offer for both Product snippets and merchant listings.
How to fix
Add a "price" property with the current offer price to each Offer.
Expected
Every Offer has a price (or priceSpecification.price).
Applies to
Pages with at least one inspected Offer linked from a fully inspected Product.
Authority
Official search-engine requirement · RequiredRequired for Google Product snippet and merchant listing eligibility.
Technical Score
Weight 3 of 3A price is required for every Offer.
How MaxiMarket detects it
Reports when at least one inspected Offer linked from a fully inspected Product has neither a non-empty direct price nor a priceSpecification (object or array) with a non-empty price.
Sources
STRUCTURED-OFFER-002Official search-engine requirement · RequiredAggregateOffer has a lowPriceOfferWarning when failedWeight 3Technical SearchAI DiscoveryCommerceMachine Readability
What this checks
Whether each inspected AggregateOffer has a direct lowPrice.
Why it matters
Google lists lowPrice as required on AggregateOffer for Product snippets.
How to fix
Add a "lowPrice" property with the lowest available offer price to each AggregateOffer.
Expected
Every AggregateOffer has a lowPrice.
Applies to
Pages with at least one inspected AggregateOffer linked from a fully inspected Product.
Authority
Official search-engine requirement · RequiredRequired for Google Product snippet eligibility when AggregateOffer is used; merchant listings require Offer instead.
Technical Score
Weight 3 of 3lowPrice is the required price of an AggregateOffer.
How MaxiMarket detects it
Reports when at least one inspected AggregateOffer linked from a fully inspected Product has no non-empty direct lowPrice.
Sources
STRUCTURED-OFFER-003Official search-engine requirement · RequiredOffer states its price currencyOfferWarning when failedWeight 2Technical SearchAI DiscoveryCommerceMachine Readability
What this checks
Whether each inspected Offer or AggregateOffer states a valid ISO 4217 currency code.
Why it matters
Google requires priceCurrency on Offer for merchant listings and on AggregateOffer for Product snippets; for Offer in Product snippets it is recommended.
How to fix
Add a "priceCurrency" property with the ISO 4217 currency code, such as "EUR", to each Offer and AggregateOffer.
Expected
Every Offer and AggregateOffer has a priceCurrency that is a current ISO 4217 alphabetic code, such as EUR.
Applies to
Pages with at least one inspected Offer or AggregateOffer linked from a fully inspected Product.
Authority
Official search-engine requirement · RequiredRequired for Google merchant listings (Offer) and Product snippets (AggregateOffer); recommended for Offer in Product snippets.
Technical Score
Weight 2 of 3A valid currency is required to interpret the price.
How MaxiMarket detects it
Reports when at least one inspected Offer or AggregateOffer linked from a fully inspected Product has no priceCurrency that exactly matches an alphabetic code in ISO 4217 List One (the dated copy recorded in the audit package). For Offer, priceSpecification.priceCurrency is also accepted. Matching is case-sensitive after trimming whitespace.
Sources
STRUCTURED-OFFER-014Official search-engine requirement · RequiredPrice specifications are not ignoredOfferWarning when failedWeight 1Technical SearchCommerceMachine Readability
What this checks
For each Offer listed under a Product: whether a priceSpecification declares both priceType and validForMemberTier.
Why it matters
Google ignores a price specification that declares both priceType and validForMemberTier, so that price is not used at all. The markup can still be valid Schema.org.
How to fix
Split the price specification named in the finding: keep priceType (StrikethroughPrice) on the original price, and validForMemberTier on the member price, never both on one specification. Use only prices the page really offers.
Expected
A strikethrough price uses priceType only, and a member price uses validForMemberTier only.
Applies to
Offers of a Product whose priceSpecification declares priceType or validForMemberTier. Not applicable otherwise; not evaluated when JSON-LD was cut at the inspection limits or did not parse, an offer is an unresolved @id reference, required rendering failed, or only Microdata or RDFa could declare it.
Authority
Official search-engine requirement · RequiredGoogle merchant listings: member prices cannot have a priceType, and a specification with both is ignored (G-MERCHANT).
Technical Score
Weight 1 of 3Conditional feature requirement: weight 1 when applicable, as in the 2026.5 method for conditional rich-result rules. Pages that do not declare it are never affected.
How MaxiMarket detects it
Entity-level check over the bounded JSON-LD graph: the priceSpecification entries (objects or resolved @id references) of Offers listed under a Product. Incomplete or unparsable JSON-LD, unresolved required @id references, failed required rendering and unevaluated Microdata or RDFa make it indeterminate, never a failure.
Sources
STRUCTURED-OFFER-015Official search-engine requirement · RequiredStrikethrough and member prices accompany an active priceOfferWarning when failedWeight 2Technical SearchCommerceMachine Readability
What this checks
For each Offer listed under a Product that has no price of its own and whose priceSpecification declares priceType or validForMemberTier: whether at least one priceSpecification is an active price (a price without priceType and without validForMemberTier).
Why it matters
Google reads only a price without priceType and validForMemberTier as the active price, and requires one next to strikethrough and member prices. An offer priced only by a strikethrough or member price has no price Google can use, even though a price value is present (STRUCTURED-OFFER-001 passes).
How to fix
Add the current price of the offer named in the finding: as the Offer price, or as a priceSpecification without priceType and validForMemberTier. Keep the original (StrikethroughPrice) and member prices as they are.
Expected
An offer that lists strikethrough or member prices also states its current price, on the Offer or in a priceSpecification without priceType and validForMemberTier.
Applies to
Offers of a Product without an Offer-level price whose priceSpecification declares priceType or validForMemberTier. Offers with an Offer-level price (Google then ignores priceSpecification) and offers without such price types are not evaluated here (STRUCTURED-OFFER-001). Not evaluated when JSON-LD was cut or did not parse, a price specification is an unresolved @id reference, required rendering failed, or only Microdata or RDFa could declare it.
Authority
Official search-engine requirement · RequiredGoogle merchant listings: the active price is required and has neither priceType nor validForMemberTier (G-MERCHANT).
Technical Score
Weight 2 of 3Without an active price Google has no price for the offer, as for a missing price (STRUCTURED-OFFER-001, weight 3). It applies only to offers using price types, which STRUCTURED-OFFER-001 passes, so a defect is never charged twice.
How MaxiMarket detects it
Entity-level check over the bounded JSON-LD graph. Offers with an Offer-level price are not evaluated (Google then uses that price and ignores priceSpecification). Any priceType makes a price non-active. Incomplete or unparsable JSON-LD, unresolved required @id references, failed required rendering and unevaluated Microdata or RDFa make it indeterminate, never a failure.
Sources
STRUCTURED-OFFER-016Official search-engine requirement · RequiredPrice validity periods are orderedOfferWarning when failedWeight 1Technical SearchCommerceMachine Readability
What this checks
validFrom against validThrough and priceValidUntil on Offers listed under a Product, and validFrom against validThrough on their price specifications.
Why it matters
Google asks that the start of a price period is earlier than or equal to its end. A reversed period cannot describe when the price applies.
How to fix
Correct the dates named in the finding so that validFrom is the start and validThrough (or priceValidUntil on the Offer) the end of the period, in ISO 8601 with a time zone.
Expected
validFrom is not later than the end of the price period.
Applies to
Offers of a Product, or their price specifications, that declare validFrom and an end (validThrough or priceValidUntil). Values that are not ISO 8601 are not evaluated (STRUCTURED-DATE-001).
Authority
Official search-engine requirement · RequiredGoogle merchant listings: the start date must be earlier than or equal to the end date (G-MERCHANT).
Technical Score
Weight 1 of 3Conditional feature requirement: weight 1 when applicable, as in the 2026.5 method for conditional rich-result rules. Pages that do not declare it are never affected.
How MaxiMarket detects it
Deterministic ISO 8601 intervals, as STRUCTURED-DATE-002: reported only when the start is later than the end under every time-zone interpretation of both values. Values that are not ISO 8601 are not evaluated (STRUCTURED-DATE-001). Incomplete or unparsable JSON-LD, unresolved required @id references, failed required rendering and unevaluated Microdata or RDFa make it indeterminate, never a failure.
Sources
STRUCTURED-MEMBER-001Official search-engine requirement · RequiredMemberProgram declares the properties Google requiresOfferWarning when failedWeight 1Technical SearchCommerceMachine Readability
What this checks
On each declared MemberProgram: name, description and at least one tier in hasTiers; on each tier: name and hasTierBenefit (TierBenefitLoyaltyPoints or TierBenefitLoyaltyPrice).
Why it matters
Google shows loyalty program information only for programs with these properties. Programs configured in Merchant Center take precedence over markup.
How to fix
Complete the MemberProgram named in the finding: its name, a description of the main member benefits, and at least one MemberProgramTier with a name and hasTierBenefit (TierBenefitLoyaltyPrice for member prices, TierBenefitLoyaltyPoints for points). Describe only the program you really run.
Expected
Every MemberProgram has a name, a description and tiers that each have a name and a documented benefit.
Applies to
Pages that declare a MemberProgram in JSON-LD. Member prices that reference a tier described on another page are not evaluated. Not evaluated when JSON-LD was cut or did not parse, a tier is an unresolved @id reference, required rendering failed, or only Microdata or RDFa could declare it.
Authority
Official search-engine requirement · RequiredGoogle loyalty programs: required MemberProgram and MemberProgramTier properties (G-LOYALTY).
Technical Score
Weight 1 of 3Conditional feature requirement: weight 1 when applicable, as in the 2026.5 method for conditional rich-result rules. Pages that do not declare it are never affected.
How MaxiMarket detects it
Entity-level check over the bounded JSON-LD graph; benefits are schema.org URLs or bare names. Tiers that member prices reference on another page are not evaluated. Incomplete or unparsable JSON-LD, unresolved required @id references, failed required rendering and unevaluated Microdata or RDFa make it indeterminate, never a failure.
Sources
STRUCTURED-RETURN-001Official search-engine requirement · RequiredDeclared return policies have the properties Google requiresOfferWarning when failedWeight 1Technical SearchCommerceMachine Readability
What this checks
On each declared MerchantReturnPolicy: applicableCountry and returnPolicyCategory (or, at Organization level, merchantReturnLink instead), two-letter country codes, a documented category, merchantReturnDays for a finite return window, and returnShippingFeesAmount only and always with ReturnShippingFees.
Why it matters
Google uses return policy markup only with its required properties; a finite window without days or a return fee without its amount cannot be shown. Merchant Center and Search Console settings take precedence over markup.
How to fix
Complete the return policy named in the finding: applicableCountry as two-letter ISO 3166-1 codes and returnPolicyCategory (MerchantReturnFiniteReturnWindow, MerchantReturnNotPermitted or MerchantReturnUnlimitedWindow); merchantReturnDays for a finite window; returnShippingFeesAmount when returnFees is ReturnShippingFees, and not otherwise. An Organization-level policy can instead link to its return policy page with merchantReturnLink.
Expected
Every declared return policy states where it applies and its category, with the conditional properties its category and fees need.
Applies to
Pages that declare a MerchantReturnPolicy in JSON-LD, on an Offer or an Organization. Policies in Merchant Center, Search Console or on another page are not visible and are never assumed missing (STRUCTURED-OFFER-010 reports only absence). Not evaluated when JSON-LD was cut or did not parse, required rendering failed, or only Microdata or RDFa could declare it.
Authority
Official search-engine requirement · RequiredGoogle merchant return policies: required and conditionally required properties (G-RETURN-POLICY, G-MERCHANT).
Technical Score
Weight 1 of 3Conditional feature requirement: weight 1 when applicable, as in the 2026.5 method for conditional rich-result rules. Pages that do not declare it are never affected.
How MaxiMarket detects it
Entity-level check over the bounded JSON-LD graph. A policy listed under an Offer is product-level and has no merchantReturnLink option. Country codes are checked for form (two letters), not against the ISO list. Policies that are not on the page are never assumed missing (STRUCTURED-OFFER-010 reports only absence). Incomplete or unparsable JSON-LD, unresolved required @id references, failed required rendering and unevaluated Microdata or RDFa make it indeterminate, never a failure.
Sources
STRUCTURED-SHIPPING-001Official search-engine requirement · RequiredDeclared shipping details have the properties Google requiresOfferWarning when failedWeight 1Technical SearchCommerceMachine Readability
What this checks
On each OfferShippingDetails of an Offer: shippingDestination with addressCountry, and unless doesNotShip, one shippingRate (currency matching the offer, value or maxValue) and one deliveryTime with day-based handling and transit times. On each ShippingService: shippingConditions, with valid destination regions and rates.
Why it matters
Google uses shipping markup only with its required properties; a missing destination or a rate in another currency than the offer cannot be shown. Merchant Center, Search Console and Content API settings take precedence over markup.
How to fix
Complete the shipping detail named in the finding: shippingDestination as a DefinedRegion with a two-letter addressCountry, one shippingRate as a MonetaryAmount in the offer's currency with value (or maxValue), and one deliveryTime whose handlingTime and transitTime give minValue and maxValue in days (unitCode DAY). For a ShippingService, give its shippingConditions. Describe only the shipping you really offer.
Expected
Every declared shipping detail or service states its destination, rate and delivery time as Google documents.
Applies to
Pages that declare shippingDetails on an Offer or a ShippingService in JSON-LD. Shipping configured in Merchant Center, Search Console or on another page is not visible and is never assumed missing (STRUCTURED-OFFER-009 reports only absence). Not evaluated when JSON-LD was cut or did not parse, a detail is an unresolved @id reference, required rendering failed, or only Microdata or RDFa could declare it.
Authority
Official search-engine requirement · RequiredGoogle merchant shipping: required OfferShippingDetails and ShippingService properties (G-MERCHANT, G-SHIPPING-POLICY).
Technical Score
Weight 1 of 3Conditional feature requirement: weight 1 when applicable, as in the 2026.5 method for conditional rich-result rules. Pages that do not declare it are never affected.
How MaxiMarket detects it
Entity-level check over the bounded JSON-LD graph. The offer currency is compared only when it is stated unambiguously. A member-only shipping service is a note, since the regular service may be declared on another page. Shipping that is not on the page is never assumed missing (STRUCTURED-OFFER-009 reports only absence). Incomplete or unparsable JSON-LD, unresolved required @id references, failed required rendering and unevaluated Microdata or RDFa make it indeterminate, never a failure.
Sources