How the Product Content Score works

We examine one public Magento product page and calculate a score from observable page content. Every scored check and its available points are listed below.

Ruleset version: 2026.2
61

checks in the registry

6

categories

100

full-coverage points

3

advisory checks, never scored

How points combine

The six categories have full-coverage allocations of 25 points for content, 20 for product data, 15 each for SEO, structured data and images, and 10 for buyer questions and AI readiness. Each applicable check earns some or all of its listed points. A check that cannot apply is removed from both the earned and possible totals, not counted as a failure.

The overall score is 100 times the sum of earned scoring units divided by the sum of possible scoring units, rounded to the nearest whole number. Each category is calculated the same way from only its applicable checks. We do not average the six category percentages. Low-confidence observations earn no points, and insufficient coverage can suppress the overall score.

The allocations below describe the registry before advisory checks are excluded. The effective share of each category in the overall score therefore depends on its deterministic checks and on which checks apply to the page.

Excellent means 90 to 100, good foundation means 70 to 89, needs work means 50 to 69, and poor means 0 to 49. These bands describe page-content completeness, not a promise of sales or search rankings.

Excellent 90-100 Good 70-89 Needs work 50-69 Poor 0-49

Semantic analysis can add advisory findings and recommendations, but it never changes the score. Its three checks are marked as advisory below and contribute zero scoring points, even when the model is unavailable.

What shoppers read

Content

25 full-coverage points
  • Title presenttitle_present 2
  • Title lengthtitle_length 1
  • Title not sku onlytitle_not_sku_only 1
  • Title includes brandtitle_includes_brand 1
  • Description presentdescription_present 4
  • Description lengthdescription_length 3
  • Description not placeholderdescription_not_placeholder 1
  • Description has structuredescription_has_structure 2
  • Bullet points presentbullet_points_present 1
  • Description not single blockdescription_not_single_block 1
  • Description is specificdescription_is_specific 0 (advisory)

Buyer questions and AI readiness

10 full-coverage points
  • Faq presentfaq_present 1
  • Faq countfaq_count 0.5
  • Faq answers substantivefaq_answers_substantive 0.75
  • Specifications in parseable formspecifications_in_parseable_form 1
  • Key facts extractablekey_facts_extractable 0.5
  • Shipping returns presentshipping_returns_present 0.25
  • Buyer questions answeredbuyer_questions_answered 0 (advisory)

What search engines read

SEO

15 full-coverage points
  • Title tag presenttitle_tag_present 2
  • Title tag lengthtitle_tag_length 1
  • Title tag unique from h1title_tag_unique_from_h1 1
  • Meta description presentmeta_description_present 2
  • Meta description lengthmeta_description_length 1
  • H1 presenth1_present 1
  • H1 singleh1_single 1
  • Canonical presentcanonical_present 2
  • Canonical self referentialcanonical_self_referential 1
  • Url readableurl_readable 1
  • Robots meta not blockingrobots_meta_not_blocking 1
  • Hreflang valid if presenthreflang_valid_if_present 1

Structured data

15 full-coverage points
  • Product schema presentproduct_schema_present 3
  • Schema parsesschema_parses 2
  • Schema name matches h1schema_name_matches_h1 1
  • Schema has imageschema_has_image 1
  • Schema has brandschema_has_brand 1
  • Schema has offerschema_has_offer 2
  • Schema offer has price and currencyschema_offer_has_price_and_currency 1
  • Schema offer availability validschema_offer_availability_valid 1
  • Schema has identifierschema_has_identifier 1
  • Schema no duplicate productsschema_no_duplicate_products 1
  • Faq schema valid if presentfaq_schema_valid_if_present 1

Facts and pictures

Product data

20 full-coverage points
  • Sku presentsku_present 2
  • Brand presentbrand_present 2
  • Identifier presentidentifier_present 2
  • Identifier format valididentifier_format_valid 1
  • Attribute countattribute_count 3
  • Expected attributes presentexpected_attributes_present 3
  • Units present where expectedunits_present_where_expected 1
  • Price presentprice_present 2
  • Availability presentavailability_present 1
  • Whats included presentwhats_included_present 1
  • Warranty or care presentwarranty_or_care_present 2

Images

15 full-coverage points
  • Image countimage_count 3
  • Alt present allalt_present_all 2
  • Alt not filenamealt_not_filename 1
  • Alt not duplicatedalt_not_duplicated 1
  • Alt descriptive lengthalt_descriptive_length 1
  • Dimensions declareddimensions_declared 1
  • Modern format hintmodern_format_hint 1
  • Image in structured dataimage_in_structured_data 1
  • Alt text descriptivealt_text_descriptive 0 (advisory)

About our scanner

MoogentoProductCheck/1.0 is our outbound crawler. It fetches the single public product URL that a visitor submits to this checker. It does not log in or modify your store. Its User-Agent links to this page so you can identify it in your server logs.

To stop requests from this crawler, block the MoogentoProductCheck User-Agent in your web server or firewall, or return HTTP 403 for its requests. A robots.txt rule on its own should not be relied on as a block.

If your store shows us a security check instead of the product page, allow requests from our server address 5.78.110.147 whose User-Agent starts with MoogentoProductCheck in your firewall or bot protection, then scan the page again. The full User-Agent is: MoogentoProductCheck/1.0 (+https://moogento.com/product-check/methodology)