Skip to content

A sample report

The same document a verified owner receives, produced by the shipped rules from a storefront we wrote ourselves.

Synthetic storefront

www.deep-synthetic.example is not a real shop. It is a storefront we authored for our own tests — every product, category, extension and defect in it was written by hand, and the hostname is under a reserved domain that resolves nowhere. We do not publish an audit of somebody else’s site as marketing, which is the same commitment the crawler page and the partner clauses make to merchants who are not our customers.

The findings, the scores and the skipped checks below are not written copy: they are what the rules in the product produce from that storefront, at a standard audit depth, rendered at the Enterprise plan so nothing is hidden behind a lock. The executive summary a language model writes is absent, because no model was called to produce this document and we do not fabricate one.

SuiteCommerce health report — www.deep-synthetic.example

Generated 2026-09-15T00:00:00.000Z

Scores

81 / 100Overall health

Host
www.deep-synthetic.example
Platform
sca
Release
2024.1.30 (certain, modern family)
Theme
none detected
Extensions
2
Audit depth
standard
Pages fetched
60
Pages rendered
20
Generated
2026-09-15T00:00:00.000Z
SEO58 / 100

coverage 72%

Exposure80 / 100

coverage 74%

Content90 / 100

coverage 84%

Performance98 / 100

coverage 86%

Accessibility94 / 100

coverage 100%

Platform95 / 100

coverage 86%

SEO58 / 100 · coverage 72%

SEO findings
SeverityConfidenceStatusFindingAffectedSourceEvidence
ErrorCertainUnknownPlatform: Pages served without prerendering60 page(s) were served without prerendering: no version header and no generator body class, so what a search engine receives is the empty shell.60 pages of 60100%rule

Platform: Pages served without prerendering

60 page(s) were served without prerendering: no version header and no generator body class, so what a search engine receives is the empty shell.

Affected
60 pages of 60
Attributed to
NetSuite platform
Rule
prerender/not-applied
Source
rule

Evidence (25)

  • / → fetch.headers1 fieldpage:p000#fetch.headers
  • / → body.seoSupportClassfalsepage:p000#body.seoSupportClass
  • /Department-1 → fetch.headers1 fieldpage:p001#fetch.headers
  • /Department-1 → body.seoSupportClassfalsepage:p001#body.seoSupportClass
  • /department-1 → fetch.headers1 fieldpage:p002#fetch.headers
  • /department-1 → body.seoSupportClassfalsepage:p002#body.seoSupportClass
  • /department-1/custitem_colour/Grey → fetch.headers1 fieldpage:p003#fetch.headers
  • /department-1/custitem_colour/Grey → body.seoSupportClassfalsepage:p003#body.seoSupportClass
  • /department-1/custitem_colour/Grey/custitem_material/Paper/custitem_size/Small → fetch.headers1 fieldpage:p004#fetch.headers
  • /department-1/custitem_colour/Grey/custitem_material/Paper/custitem_size/Small → body.seoSupportClassfalsepage:p004#body.seoSupportClass
  • /department-1/custitem_material/Paper → fetch.headers1 fieldpage:p005#fetch.headers
  • /department-1/custitem_material/Paper → body.seoSupportClassfalsepage:p005#body.seoSupportClass
  • /department-1/custitem_size/Small → fetch.headers1 fieldpage:p006#fetch.headers
  • /department-1/custitem_size/Small → body.seoSupportClassfalsepage:p006#body.seoSupportClass
  • /department-1/section-1 → fetch.headers1 fieldpage:p007#fetch.headers
  • /department-1/section-1 → body.seoSupportClassfalsepage:p007#body.seoSupportClass
  • /department-1/section-1/aisle-1 → fetch.headers1 fieldpage:p008#fetch.headers
  • /department-1/section-1/aisle-1 → body.seoSupportClassfalsepage:p008#body.seoSupportClass
  • /department-1/section-1/aisle-2 → fetch.headers1 fieldpage:p009#fetch.headers
  • /department-1/section-1/aisle-2 → body.seoSupportClassfalsepage:p009#body.seoSupportClass
  • /department-1/section-1/aisle-3 → fetch.headers1 fieldpage:p010#fetch.headers
  • /department-1/section-1/aisle-3 → body.seoSupportClassfalsepage:p010#body.seoSupportClass
  • /department-1/section-2 → fetch.headers1 fieldpage:p011#fetch.headers
  • /department-1/section-2 → body.seoSupportClassfalsepage:p011#body.seoSupportClass
  • /department-1/section-2/aisle-1 → fetch.headers1 fieldpage:p012#fetch.headers

Fix

NetSuite support, naming the URLs and the absence of x-prerender-version; and Setup > SuiteCommerce Advanced > Set Up Web Site for the domain configurationa configuration change

  1. Request the affected URLs with a browser user agent and confirm the response carries no x-prerender-version header.
  2. Check that the domain is the one configured on the Web Site record: prerendering follows the configured shopping domain, not an alias.
  3. Raise a support case with the URLs and the response headers, because the renderer is platform-side and not configurable from the account.
  • evidence capped at 25 of 120 pointers
WarningCertainUnknownPublished landing pages missing from the sitemap82 of 82 published landing pages are not in the sitemap (for example /about-the-fixture, /guide-1, /guide-2), so they are found only if something links to them.site-widerule

Published landing pages missing from the sitemap

82 of 82 published landing pages are not in the sitemap (for example /about-the-fixture, /guide-1, /guide-2), so they are found only if something links to them.

Affected
site-wide
Attributed to
cause not attributed
Rule
discovery/sitemap-landing-gap
Source
rule

Evidence (25)

  • Discovery › sitemap › byType2 fieldsdiscovery:sitemap#byType
  • CMS page cms-about8 fieldscms:cms-about
  • CMS page cms-guide-18 fieldscms:cms-guide-1
  • CMS page cms-guide-28 fieldscms:cms-guide-2
  • CMS page cms-guide-38 fieldscms:cms-guide-3
  • CMS page cms-guide-48 fieldscms:cms-guide-4
  • CMS page cms-guide-58 fieldscms:cms-guide-5
  • CMS page cms-guide-68 fieldscms:cms-guide-6
  • CMS page cms-guide-78 fieldscms:cms-guide-7
  • CMS page cms-guide-88 fieldscms:cms-guide-8
  • CMS page cms-guide-98 fieldscms:cms-guide-9
  • CMS page cms-guide-108 fieldscms:cms-guide-10
  • CMS page cms-guide-118 fieldscms:cms-guide-11
  • CMS page cms-guide-128 fieldscms:cms-guide-12
  • CMS page cms-guide-138 fieldscms:cms-guide-13
  • CMS page cms-guide-148 fieldscms:cms-guide-14
  • CMS page cms-guide-158 fieldscms:cms-guide-15
  • CMS page cms-guide-168 fieldscms:cms-guide-16
  • CMS page cms-guide-178 fieldscms:cms-guide-17
  • CMS page cms-guide-188 fieldscms:cms-guide-18
  • CMS page cms-guide-198 fieldscms:cms-guide-19
  • CMS page cms-guide-208 fieldscms:cms-guide-20
  • CMS page cms-guide-218 fieldscms:cms-guide-21
  • CMS page cms-guide-228 fieldscms:cms-guide-22
  • CMS page cms-guide-238 fieldscms:cms-guide-23

Fix

Commerce Categories and Site Management Tools > Pages, the affected page records; and the Web Site record’s sitemap generationa configuration change

  1. Confirm each affected page is published rather than a draft, and that its type gives it a route of its own.
  2. Check that the page is attached to this Web Site record: the sitemap is generated per site.
  3. Regenerate the sitemap and re-crawl to confirm the pages appear.
WarningCertainUnknownA multi-language storefront declares no hreflang alternatesThis storefront publishes 3 languages and 58 indexable page(s) declare no hreflang alternates, so each translation competes with the others in search instead of being grouped with them.58 pages of 58100%rule

A multi-language storefront declares no hreflang alternates

This storefront publishes 3 languages and 58 indexable page(s) declare no hreflang alternates, so each translation competes with the others in search instead of being grouped with them.

Affected
58 pages of 58
Attributed to
SuiteCommerce core
Rule
seo/hreflang-missing-multilang
Source
rule

Evidence (25)

  • / → head.hreflang0 entriespage:p000#head.hreflang
  • /department-1 → head.hreflang0 entriespage:p002#head.hreflang
  • /department-1/custitem_colour/Grey → head.hreflang0 entriespage:p003#head.hreflang
  • /department-1/custitem_colour/Grey/custitem_material/Paper/custitem_size/Small → head.hreflang0 entriespage:p004#head.hreflang
  • /department-1/custitem_material/Paper → head.hreflang0 entriespage:p005#head.hreflang
  • /department-1/custitem_size/Small → head.hreflang0 entriespage:p006#head.hreflang
  • /department-1/section-1 → head.hreflang0 entriespage:p007#head.hreflang
  • /department-1/section-1/aisle-1 → head.hreflang0 entriespage:p008#head.hreflang
  • /department-1/section-1/aisle-2 → head.hreflang0 entriespage:p009#head.hreflang
  • /department-1/section-1/aisle-3 → head.hreflang0 entriespage:p010#head.hreflang
  • /department-1/section-2 → head.hreflang0 entriespage:p011#head.hreflang
  • /department-1/section-2/aisle-1 → head.hreflang0 entriespage:p012#head.hreflang
  • /department-1/section-2/aisle-2 → head.hreflang0 entriespage:p013#head.hreflang
  • /department-1/section-2/aisle-3 → head.hreflang0 entriespage:p014#head.hreflang
  • /department-1/section-3 → head.hreflang0 entriespage:p015#head.hreflang
  • /department-1/section-3/aisle-1 → head.hreflang0 entriespage:p016#head.hreflang
  • /department-1/section-3/aisle-2 → head.hreflang0 entriespage:p017#head.hreflang
  • /department-1/section-3/aisle-3 → head.hreflang0 entriespage:p018#head.hreflang
  • /department-2 → head.hreflang0 entriespage:p019#head.hreflang
  • /department-2/section-1 → head.hreflang0 entriespage:p020#head.hreflang
  • /department-2/section-1/aisle-1 → head.hreflang0 entriespage:p021#head.hreflang
  • /department-2/section-1/aisle-2 → head.hreflang0 entriespage:p022#head.hreflang
  • /department-2/section-1/aisle-3 → head.hreflang0 entriespage:p023#head.hreflang
  • /department-2/section-2 → head.hreflang0 entriespage:p024#head.hreflang
  • /department-2/section-2/aisle-1 → head.hreflang0 entriespage:p025#head.hreflang

Fix

An extension that adds alternate-language links to the head; core supplies no mechanism, so there is no configuration field to seta code change

  1. List the host serving each configured language from availableHosts.
  2. Add an extension that emits a rel="alternate" hreflang link per host on every indexable page, including a self-referencing entry.
  3. Add an x-default entry pointing at the host a visitor with no matching language should receive.
  4. Re-crawl each host and confirm the alternates agree with one another.
  • evidence capped at 25 of 58 pointers
WarningCertainUnknownCommerce categories missing from the sitemap52 of 52 commerce category pages are not in the sitemap (for example /department-1, /department-1/section-1, /department-1/section-1/aisle-1), so search engines find them only if something links to them.52 categories of 52100%rule

Commerce categories missing from the sitemap

52 of 52 commerce category pages are not in the sitemap (for example /department-1, /department-1/section-1, /department-1/section-1/aisle-1), so search engines find them only if something links to them.

Affected
52 categories of 52
Attributed to
cause not attributed
Rule
discovery/sitemap-category-gap
Source
rule

Evidence (25)

  • Discovery › sitemap › byType2 fieldsdiscovery:sitemap#byType
  • Category 1005 fieldscategory:100
  • Category 1106 fieldscategory:110
  • Category 1116 fieldscategory:111
  • Category 1126 fieldscategory:112
  • Category 1136 fieldscategory:113
  • Category 1206 fieldscategory:120
  • Category 1216 fieldscategory:121
  • Category 1226 fieldscategory:122
  • Category 1236 fieldscategory:123
  • Category 1306 fieldscategory:130
  • Category 1316 fieldscategory:131
  • Category 1326 fieldscategory:132
  • Category 1336 fieldscategory:133
  • Category 2005 fieldscategory:200
  • Category 2106 fieldscategory:210
  • Category 2116 fieldscategory:211
  • Category 2126 fieldscategory:212
  • Category 2136 fieldscategory:213
  • Category 2206 fieldscategory:220
  • Category 2216 fieldscategory:221
  • Category 2226 fieldscategory:222
  • Category 2236 fieldscategory:223
  • Category 2306 fieldscategory:230
  • Category 2316 fieldscategory:231

Fix

The commerce category records (Display in Site, and the primary URL flag), and the Web Site record’s sitemap generationa configuration change

  1. Check Display in Site on the affected category records: the sitemap generator skips categories that are not displayed.
  2. Confirm each category has a primary URL: a non-primary URL is an alias and is not listed.
  3. Regenerate the sitemap and re-crawl to confirm the categories appear.
WarningCertainUnknownThe two render passes emit different placeholders20 rendered page(s) emit different placeholders in the two passes: 1 present only in the browser (data-view:Synthetic.Promo#0). On this release the browser rebuilds the content area, so the cost is a flash rather than a wrong page — until the site is upgraded.20 pages of 20100%rule

The two render passes emit different placeholders

20 rendered page(s) emit different placeholders in the two passes: 1 present only in the browser (data-view:Synthetic.Promo#0). On this release the browser rebuilds the content area, so the cost is a flash rather than a wrong page — until the site is upgraded.

Affected
20 pages of 20
Attributed to
cause not attributed
Rule
prerender/placeholder-parity
Source
rule

Evidence (20)

  • / → body.placeholders.hash"4d14087380bf915899f6d5d49d312898539b61fd6a9890dc464274beb9a74c38"page:p000#body.placeholders.hash
  • /Department-1 → body.placeholders.hash"0bb677128af3a2f3a593548daf421958afa5a41f58d3c5e1f36e4a74df48a2f0"page:p001#body.placeholders.hash
  • /department-1 → body.placeholders.hash"55cfead92b605aa0fb8b72a0410b532a66e732e860a22fe401c9020ef90257cc"page:p002#body.placeholders.hash
  • /department-1/custitem_colour/Grey → body.placeholders.hash"55cfead92b605aa0fb8b72a0410b532a66e732e860a22fe401c9020ef90257cc"page:p003#body.placeholders.hash
  • /department-1/custitem_colour/Grey/custitem_material/Paper/custitem_size/Small → body.placeholders.hash"55cfead92b605aa0fb8b72a0410b532a66e732e860a22fe401c9020ef90257cc"page:p004#body.placeholders.hash
  • /department-1/custitem_material/Paper → body.placeholders.hash"55cfead92b605aa0fb8b72a0410b532a66e732e860a22fe401c9020ef90257cc"page:p005#body.placeholders.hash
  • /department-1/custitem_size/Small → body.placeholders.hash"55cfead92b605aa0fb8b72a0410b532a66e732e860a22fe401c9020ef90257cc"page:p006#body.placeholders.hash
  • /department-2 → body.placeholders.hash"55cfead92b605aa0fb8b72a0410b532a66e732e860a22fe401c9020ef90257cc"page:p019#body.placeholders.hash
  • /department-3 → body.placeholders.hash"55cfead92b605aa0fb8b72a0410b532a66e732e860a22fe401c9020ef90257cc"page:p031#body.placeholders.hash
  • /department-4 → body.placeholders.hash"55cfead92b605aa0fb8b72a0410b532a66e732e860a22fe401c9020ef90257cc"page:p035#body.placeholders.hash
  • /guide-41 → body.placeholders.hash"55cfead92b605aa0fb8b72a0410b532a66e732e860a22fe401c9020ef90257cc"page:p039#body.placeholders.hash
  • /guide-65 → body.placeholders.hash"55cfead92b605aa0fb8b72a0410b532a66e732e860a22fe401c9020ef90257cc"page:p040#body.placeholders.hash
  • /guide-66 → body.placeholders.hash"55cfead92b605aa0fb8b72a0410b532a66e732e860a22fe401c9020ef90257cc"page:p041#body.placeholders.hash
  • /guide-69 → body.placeholders.hash"55cfead92b605aa0fb8b72a0410b532a66e732e860a22fe401c9020ef90257cc"page:p042#body.placeholders.hash
  • /product-1 → body.placeholders.hash"027cdde8372314c61189a9381e497c2eafa5586632574588019b3c10e4942fd3"page:p043#body.placeholders.hash
  • /product-10 → body.placeholders.hash"027cdde8372314c61189a9381e497c2eafa5586632574588019b3c10e4942fd3"page:p044#body.placeholders.hash
  • /product-100 → body.placeholders.hash"027cdde8372314c61189a9381e497c2eafa5586632574588019b3c10e4942fd3"page:p045#body.placeholders.hash
  • /product-101 → body.placeholders.hash"027cdde8372314c61189a9381e497c2eafa5586632574588019b3c10e4942fd3"page:p046#body.placeholders.hash
  • /search?keywords=Grey → body.placeholders.hash"55cfead92b605aa0fb8b72a0410b532a66e732e860a22fe401c9020ef90257cc"page:p058#body.placeholders.hash
  • /this-page-does-not-exist-8c3dcdd1 → body.placeholders.hash"0bb677128af3a2f3a593548daf421958afa5a41f58d3c5e1f36e4a74df48a2f0"page:p059#body.placeholders.hash

Fix

The templates that wrap a [data-view] or [data-cms-area] element in a condition, and any view that adds or removes placeholders after rendera code change

  1. Find the placeholders the comparison names and the condition that decides whether they are emitted.
  2. Remove isPageGenerator from around the placeholder element itself (CORR-027): it may gate the content inside, never the container.
  3. Emit the same number of element children in both passes, even when the children are empty server-side.
  4. Re-crawl and confirm the placeholder hashes match.
WarningCertainUnknownPages sharing one <title>5 indexable page(s) share a <title> with another page across 1 duplicated title(s), so they compete with each other in search results.5 pages of 589%rule

Pages sharing one <title>

5 indexable page(s) share a <title> with another page across 1 duplicated title(s), so they compete with each other in search results.

Affected
5 pages of 58
Attributed to
cause not attributed
Rule
seo/title-duplicate
Source
rule

Evidence (5)

  • /department-1/custitem_colour/Grey → head.title"{{title}} | Deep Synthetic Store"page:p003#head.title
  • /department-1/custitem_colour/Grey/custitem_material/Paper/custitem_size/Small → head.title"{{title}} | Deep Synthetic Store"page:p004#head.title
  • /department-1/custitem_material/Paper → head.title"{{title}} | Deep Synthetic Store"page:p005#head.title
  • /department-1/custitem_size/Small → head.title"{{title}} | Deep Synthetic Store"page:p006#head.title
  • /search?keywords=Grey → head.title"{{title}} | Deep Synthetic Store"page:p058#head.title

Fix

Commerce Category › Page Title for a category; the facet `titleToken` and `titleSeparator` in the Facets configuration for a facet page; Item record › Web Store › Page Title for a producta content change

  1. Group the pages named in the evidence by the title they share.
  2. For a facet page inheriting its parent category title, set `titleToken` on the facet so the rendered title names the selected value.
  3. For two records sharing a Page Title, rewrite one so each title describes only its own page.
  4. Re-crawl and confirm each page returns a distinct <title>.
WarningCertainUnknownCanonical URLs point at a different host5 page(s) declare a canonical URL on a different host (www.deep-synthetic.example{{path}}), which asks search engines to index that host instead of this one.5 pages of 589%rule

Canonical URLs point at a different host

5 page(s) declare a canonical URL on a different host (www.deep-synthetic.example{{path}}), which asks search engines to index that host instead of this one.

Affected
5 pages of 58
Attributed to
cause not attributed
Rule
seo/canonical-cross-host
Source
rule

Evidence (5)

  • /department-1/custitem_colour/Grey → head.canonical"https://www.deep-synthetic.example{{path}}"page:p003#head.canonical
  • /department-1/custitem_colour/Grey/custitem_material/Paper/custitem_size/Small → head.canonical"https://www.deep-synthetic.example{{path}}"page:p004#head.canonical
  • /department-1/custitem_material/Paper → head.canonical"https://www.deep-synthetic.example{{path}}"page:p005#head.canonical
  • /department-1/custitem_size/Small → head.canonical"https://www.deep-synthetic.example{{path}}"page:p006#head.canonical
  • /search?keywords=Grey → head.canonical"https://www.deep-synthetic.example{{path}}"page:p058#head.canonical

Fix

Setup > SuiteCommerce Advanced > Set Up Web Site › the Website record domain, then any extension or theme template that writes an absolute canonicala configuration change

  1. Decide which host is the canonical one for this storefront.
  2. Correct the Website record domain, or the extension that hard-codes a host, so the canonical is built from the serving hostname.
  3. Redirect the other host to the canonical one so the two stop competing.
  4. Re-crawl and confirm each canonical names the serving host.
WarningLikelyUnknownPages with less visible text than their type needs58 indexable page(s) carry less visible text than their page type needs, the thinnest at 18 words.58 pages of 58100%rule

Pages with less visible text than their type needs

58 indexable page(s) carry less visible text than their page type needs, the thinnest at 18 words.

Affected
58 pages of 58
Attributed to
cause not attributed
Rule
seo/thin-content
Source
rule

Evidence (25)

  • / → body.visibleWordCount48page:p000#body.visibleWordCount
  • /department-1 → body.visibleWordCount22page:p002#body.visibleWordCount
  • /department-1/custitem_colour/Grey → body.visibleWordCount21page:p003#body.visibleWordCount
  • /department-1/custitem_colour/Grey/custitem_material/Paper/custitem_size/Small → body.visibleWordCount21page:p004#body.visibleWordCount
  • /department-1/custitem_material/Paper → body.visibleWordCount21page:p005#body.visibleWordCount
  • /department-1/custitem_size/Small → body.visibleWordCount21page:p006#body.visibleWordCount
  • /department-1/section-1 → body.visibleWordCount22page:p007#body.visibleWordCount
  • /department-1/section-1/aisle-1 → body.visibleWordCount22page:p008#body.visibleWordCount
  • /department-1/section-1/aisle-2 → body.visibleWordCount22page:p009#body.visibleWordCount
  • /department-1/section-1/aisle-3 → body.visibleWordCount22page:p010#body.visibleWordCount
  • /department-1/section-2 → body.visibleWordCount22page:p011#body.visibleWordCount
  • /department-1/section-2/aisle-1 → body.visibleWordCount22page:p012#body.visibleWordCount
  • /department-1/section-2/aisle-2 → body.visibleWordCount22page:p013#body.visibleWordCount
  • /department-1/section-2/aisle-3 → body.visibleWordCount22page:p014#body.visibleWordCount
  • /department-1/section-3 → body.visibleWordCount22page:p015#body.visibleWordCount
  • /department-1/section-3/aisle-1 → body.visibleWordCount22page:p016#body.visibleWordCount
  • /department-1/section-3/aisle-2 → body.visibleWordCount22page:p017#body.visibleWordCount
  • /department-1/section-3/aisle-3 → body.visibleWordCount22page:p018#body.visibleWordCount
  • /department-2 → body.visibleWordCount22page:p019#body.visibleWordCount
  • /department-2/section-1 → body.visibleWordCount22page:p020#body.visibleWordCount
  • /department-2/section-1/aisle-1 → body.visibleWordCount22page:p021#body.visibleWordCount
  • /department-2/section-1/aisle-2 → body.visibleWordCount22page:p022#body.visibleWordCount
  • /department-2/section-1/aisle-3 → body.visibleWordCount22page:p023#body.visibleWordCount
  • /department-2/section-2 → body.visibleWordCount22page:p024#body.visibleWordCount
  • /department-2/section-2/aisle-1 → body.visibleWordCount22page:p025#body.visibleWordCount

Fix

Commerce Category › Description for a category page; Item record › Web Store › Detailed Description for a product; the SMT page content for a landing pagea content change

  1. Fill the description field on the record behind each page named in the evidence.
  2. Confirm the text appears in the prerendered document and not only after the client pass, which is what a search engine reads.
  3. Re-crawl and confirm the visible word count rises above the threshold for the type.
  • evidence capped at 25 of 58 pointers
WarningCertainUnknownProduct structured data with fields absent or malformed15 Product/Offer node(s) across 15 page(s) are incomplete: image absent. A rich result needs every one of them.15 pages of 15100%rule

Product structured data with fields absent or malformed

15 Product/Offer node(s) across 15 page(s) are incomplete: image absent. A rich result needs every one of them.

Affected
15 pages of 15
Attributed to
SuiteCommerce core
Rule
structured/product-incomplete
Source
rule

Evidence (15)

  • /product-1 → head.jsonLd[0].validation[0]4 fieldspage:p043#head.jsonLd[0].validation[0]
  • /product-10 → head.jsonLd[0].validation[0]4 fieldspage:p044#head.jsonLd[0].validation[0]
  • /product-100 → head.jsonLd[0].validation[0]4 fieldspage:p045#head.jsonLd[0].validation[0]
  • /product-101 → head.jsonLd[0].validation[0]4 fieldspage:p046#head.jsonLd[0].validation[0]
  • /product-102 → head.jsonLd[0].validation[0]4 fieldspage:p047#head.jsonLd[0].validation[0]
  • /product-103 → head.jsonLd[0].validation[0]4 fieldspage:p048#head.jsonLd[0].validation[0]
  • /product-104 → head.jsonLd[0].validation[0]4 fieldspage:p049#head.jsonLd[0].validation[0]
  • /product-105 → head.jsonLd[0].validation[0]4 fieldspage:p050#head.jsonLd[0].validation[0]
  • /product-106 → head.jsonLd[0].validation[0]4 fieldspage:p051#head.jsonLd[0].validation[0]
  • /product-107 → head.jsonLd[0].validation[0]4 fieldspage:p052#head.jsonLd[0].validation[0]
  • /product-108 → head.jsonLd[0].validation[0]4 fieldspage:p053#head.jsonLd[0].validation[0]
  • /product-109 → head.jsonLd[0].validation[0]4 fieldspage:p054#head.jsonLd[0].validation[0]
  • /product-11 → head.jsonLd[0].validation[0]4 fieldspage:p055#head.jsonLd[0].validation[0]
  • /product-110 → head.jsonLd[0].validation[0]4 fieldspage:p056#head.jsonLd[0].validation[0]
  • /product-111 → head.jsonLd[0].validation[0]4 fieldspage:p057#head.jsonLd[0].validation[0]

Fix

The item record fields the JSON-LD reads (Store tab: Page Title, Store Display Image, pricing and stock), and the PDP view that builds the Offer nodea content change

  1. Fill the absent fields on the affected item records.
  2. Where availability is the absent field, check whether the PDP hides prices for anonymous shoppers: ProfileModel.hidePrices() omits price and availability from the Offer node, and the markup must then not claim to be an Offer.
  3. Re-crawl and confirm each Offer node carries price, priceCurrency and availability.
WarningCertainUnknownPages that never finished booting in the browser2 page(s) never finished booting in the browser: 0 had mounted at least one extension module, and the renderer collected 0 uncaught error(s) and 2 console error(s) on them. Every client-side measurement for those pages is reported as unavailable rather than as a bad score.2 pages of 307%rule

Pages that never finished booting in the browser

2 page(s) never finished booting in the browser: 0 had mounted at least one extension module, and the renderer collected 0 uncaught error(s) and 2 console error(s) on them. Every client-side measurement for those pages is reported as unavailable rather than as a bad score.

Affected
2 pages of 30
Attributed to
cause not attributed
Rule
prerender/readiness-timeout
Source
rule

Evidence (2)

  • /Department-1 → body.placeholders.hash"0bb677128af3a2f3a593548daf421958afa5a41f58d3c5e1f36e4a74df48a2f0"page:p001#body.placeholders.hash
  • /this-page-does-not-exist-8c3dcdd1 → body.placeholders.hash"0bb677128af3a2f3a593548daf421958afa5a41f58d3c5e1f36e4a74df48a2f0"page:p059#body.placeholders.hash

Fix

The extension entry points that mount on the affected pages, and their define dependency arraysa code change

  1. Open an affected page with the console visible and read the first uncaught error: an unresolved module id throws before mountToApp and stops every extension after it (07 § 9).
  2. Check for a readiness signal built on setTimeout(fn, 0) (CORR-033), which resolves before the thing it was waiting for.
  3. Confirm every extension service the page calls on load returns, rather than hanging.
  4. Re-crawl and confirm the page reaches a ready state.
WarningCertainUnknownPages sharing one meta description5 indexable page(s) share a meta description with another page across 1 duplicated description(s), so their search snippets are identical.5 pages of 589%rule

Pages sharing one meta description

5 indexable page(s) share a meta description with another page across 1 duplicated description(s), so their search snippets are identical.

Affected
5 pages of 58
Attributed to
cause not attributed
Rule
seo/meta-description-duplicate
Source
rule

Evidence (5)

  • /department-1/custitem_colour/Grey → head.metaDescription"{{title}}: a hand-written category page for the deep-depth tests."page:p003#head.metaDescription
  • /department-1/custitem_colour/Grey/custitem_material/Paper/custitem_size/Small → head.metaDescription"{{title}}: a hand-written category page for the deep-depth tests."page:p004#head.metaDescription
  • /department-1/custitem_material/Paper → head.metaDescription"{{title}}: a hand-written category page for the deep-depth tests."page:p005#head.metaDescription
  • /department-1/custitem_size/Small → head.metaDescription"{{title}}: a hand-written category page for the deep-depth tests."page:p006#head.metaDescription
  • /search?keywords=Grey → head.metaDescription"{{title}}: a hand-written category page for the deep-depth tests."page:p058#head.metaDescription

Fix

Commerce Category › Meta Description for a category; Item record › Web Store › Meta Tag HTML for a product; the SMT page settings for a landing pagea content change

  1. Group the pages named in the evidence by the description they share.
  2. Rewrite each so it describes only the products or content on that page.
  3. Where a facet page inherits the parent category description, decide whether the facet should be canonicalised to the category instead.
  4. Re-crawl and confirm each description is distinct.
InfoCertainUnknownFacet pages beyond the SEO limits still return 2001 facet combination(s) beyond the configured SEO limits still return 200 when requested. The limits suppress the links in the generated HTML and nothing more: they do not make these pages unavailable or tell a search engine to ignore them.site-widerule

Facet pages beyond the SEO limits still return 200

1 facet combination(s) beyond the configured SEO limits still return 200 when requested. The limits suppress the links in the generated HTML and nothing more: they do not make these pages unavailable or tell a search engine to ignore them.

Affected
site-wide
Attributed to
SuiteCommerce core
Rule
discovery/facet-over-limit-reachable
Source
rule

Evidence (2)

  • Discovery › facetUrls4 entriesdiscovery:facetUrls
  • Environment › seoRelevant › facetsSeoLimits3 fieldsenv:seoRelevant.facetsSeoLimits

Fix

Setup > SuiteCommerce Advanced > Configuration, the Facets SEO limits group; and the robots.txt field on the Web Site recorda configuration change

  1. Decide whether these combinations should be excluded or merely unlinked. The configuration only unlinks them.
  2. To exclude them, disallow the facet path or parameter pattern in robots.txt.
  3. Confirm the over-limit pages carry a canonical pointing at the page that should rank instead.
InfoHeuristicUnknownThe <h1> and the <title> are the same string1 page(s) use one string for both the <h1> and the <title>, so the title adds nothing a shopper cannot already see on the page.1 page of 58 (home)2%rule

The <h1> and the <title> are the same string

1 page(s) use one string for both the <h1> and the <title>, so the title adds nothing a shopper cannot already see on the page.

Affected
1 page of 58 (home)
Attributed to
cause not attributed
Rule
seo/h1-equals-title
Source
rule

Evidence (2)

  • / → head.title"Deep Synthetic Store"page:p000#head.title
  • / → body.headings[0]3 fieldspage:p000#body.headings[0]

Fix

Item record › Web Store › Page Title for a product; Commerce Category › Page Title for a category; the SMT page settings for a landing pagea content change

  1. Decide what the title should add that the heading does not: the brand, the parent category, the model number, or the offer.
  2. Rewrite Page Title on the record that supplies it, leaving the page heading alone.
  3. Keep the result inside the length seo/title-length checks.
InfoCertainUnknownProduct and listing pages publish no BreadcrumbList38 category and facet and search page(s) publish no BreadcrumbList, so search results for them show the raw URL path instead of a readable trail.38 pages of 38100%rule

Product and listing pages publish no BreadcrumbList

38 category and facet and search page(s) publish no BreadcrumbList, so search results for them show the raw URL path instead of a readable trail.

Affected
38 pages of 38
Attributed to
SuiteCommerce core
Rule
structured/breadcrumb-missing
Source
rule

Evidence (25)

  • /department-1 → head.jsonLd0 entriespage:p002#head.jsonLd
  • /department-1/custitem_colour/Grey → head.jsonLd0 entriespage:p003#head.jsonLd
  • /department-1/custitem_colour/Grey/custitem_material/Paper/custitem_size/Small → head.jsonLd0 entriespage:p004#head.jsonLd
  • /department-1/custitem_material/Paper → head.jsonLd0 entriespage:p005#head.jsonLd
  • /department-1/custitem_size/Small → head.jsonLd0 entriespage:p006#head.jsonLd
  • /department-1/section-1 → head.jsonLd0 entriespage:p007#head.jsonLd
  • /department-1/section-1/aisle-1 → head.jsonLd0 entriespage:p008#head.jsonLd
  • /department-1/section-1/aisle-2 → head.jsonLd0 entriespage:p009#head.jsonLd
  • /department-1/section-1/aisle-3 → head.jsonLd0 entriespage:p010#head.jsonLd
  • /department-1/section-2 → head.jsonLd0 entriespage:p011#head.jsonLd
  • /department-1/section-2/aisle-1 → head.jsonLd0 entriespage:p012#head.jsonLd
  • /department-1/section-2/aisle-2 → head.jsonLd0 entriespage:p013#head.jsonLd
  • /department-1/section-2/aisle-3 → head.jsonLd0 entriespage:p014#head.jsonLd
  • /department-1/section-3 → head.jsonLd0 entriespage:p015#head.jsonLd
  • /department-1/section-3/aisle-1 → head.jsonLd0 entriespage:p016#head.jsonLd
  • /department-1/section-3/aisle-2 → head.jsonLd0 entriespage:p017#head.jsonLd
  • /department-1/section-3/aisle-3 → head.jsonLd0 entriespage:p018#head.jsonLd
  • /department-2 → head.jsonLd0 entriespage:p019#head.jsonLd
  • /department-2/section-1 → head.jsonLd0 entriespage:p020#head.jsonLd
  • /department-2/section-1/aisle-1 → head.jsonLd0 entriespage:p021#head.jsonLd
  • /department-2/section-1/aisle-2 → head.jsonLd0 entriespage:p022#head.jsonLd
  • /department-2/section-1/aisle-3 → head.jsonLd0 entriespage:p023#head.jsonLd
  • /department-2/section-2 → head.jsonLd0 entriespage:p024#head.jsonLd
  • /department-2/section-2/aisle-1 → head.jsonLd0 entriespage:p025#head.jsonLd
  • /department-2/section-2/aisle-2 → head.jsonLd0 entriespage:p026#head.jsonLd

Fix

The theme template that renders the breadcrumb trail, and its viewa code change

  1. Render the breadcrumb through the core breadcrumb view rather than a bespoke template, so its getViewJsonLd() contribution reaches the head.
  2. Where the trail is bespoke, add a BreadcrumbList node whose items match the rendered trail exactly.
  3. Re-crawl and confirm the head carries a BreadcrumbList with one item per level.
  • evidence capped at 25 of 38 pointers

Want this for your own storefront? See the plans, or verify a domain and take the free audit.