Every BigCommerce fix we catalog

SEOLZ catalogs 167 fixes for BigCommerce across 6 areas — SEO, answer-engine readiness, accessibility, security and site-health. Each lists the exact steps for BigCommerce, with a link to the official docs.

SEO · 45 fixes

Catalog coverageModerate effort

Ensure every product and category page is crawlable and discoverable by submitting a complete XML sitemap, fixing internal links, and removing any crawl blocks so Google can index your full catalog.

On BigCommerce

  1. Sitemap: BigCommerce auto-generates a sitemap at /xmlsitemap.php. Submit it in Google Search Console. Ensure products are set to 'Visible' (Products → View → set status to Visible), as hidden products are excluded.
  2. robots.txt: Go to Storefront → Script Manager, or contact your hosting/BigCommerce support to view the server-level robots.txt. Ensure /products/, /categories/ are not Disallowed.
  3. Noindex: In the BigCommerce control panel, individual products and categories do not have a native noindex toggle — check any installed SEO apps (e.g. SEO by Yotpo) for accidental noindex settings.
  4. Internal linking: Go to Storefront → Navigation and verify all top-level categories appear in your main menu. Check Products → Categories to ensure every product is assigned to at least one category.
  5. JavaScript: BigCommerce's Stencil themes use standard anchor links in navigation — crawlable by default. If using a headless or custom storefront, ensure server-side rendered HTML links are present for all category and product URLs.
Cwv clsModerate effort

Eliminate unexpected layout shifts by reserving explicit space for every image, video, embed, ad, and late-loading widget before it loads, so nothing on your page jumps around as it renders.

On BigCommerce

  1. Images: In Storefront > My Themes > Edit Theme Files (Stencil), open the relevant template (e.g. templates/components/products/card.html). Find <img> tags and add width and height attributes using the Handlebars image helper: {{getImageManagerUrl image.data '500x500'}} and set the dimensions as attributes.
  2. CSS aspect ratio: In assets/scss/components/products/_card.scss (or similar), add an aspect-ratio rule to the image container class so it reserves space before the image downloads.
  3. Fonts: In assets/scss/settings/foundation/base/_settings.scss (or your theme's font file), find @font-face declarations and add font-display: swap;. If loading Google Fonts via a <link> in templates/layout/base.html, append &display=swap to the URL.
  4. Announcement bars and promotional banners: Use the built-in BigCommerce 'Carousel' or 'Banner Manager' (Marketing > Banners) rather than custom injected scripts, as these are rendered server-side. If using a Script Manager script (Storefront > Script Manager) for a banner, wrap the target div with an explicit min-height in CSS.
  5. Third-party scripts: In Storefront > Script Manager, for any widget scripts set the 'Load Method' to 'Defer' and 'Location' to 'Footer' to prevent them from blocking layout.
  6. Cookie banners: In your GDPR/consent app's settings, set the banner to 'bottom fixed' position so it does not push page content.
Cwv lcpModerate effort

Reduce Largest Contentful Paint (LCP) to under 2.5 seconds by serving your hero image in a modern format, preloading it, and eliminating render-blocking resources.

On BigCommerce

  1. Convert your hero/carousel images to WebP externally, then upload them via Storefront → Image Manager or directly through the Banner/Carousel editor (Marketing → Banners or Storefront → Home Page Carousel).
  2. In your Stencil theme files (Storefront → My Themes → Advanced → Download), open templates/components/carousel.html (or your hero partial). Change the <img> src to the WebP version and add fetchpriority='high' loading='eager' attributes.
  3. Add a preload hint: in templates/layout/base.html inside <head>, add <link rel='preload' as='image' href='{{cdn 'img/hero.webp'}}' fetchpriority='high'>.
  4. Remove lazy loading from the LCP image: ensure the hero <img> does NOT have loading='lazy'. BigCommerce's default Cornerstone theme lazy-loads below-fold images — confirm the hero is excluded.
  5. Defer render-blocking scripts: in base.html move third-party <script> tags to the bottom of <body> and add 'defer'. Use the BigCommerce Script Manager (Storefront → Script Manager) to set placement to 'Footer' and load strategy to 'Defer' for any injected scripts.
  6. Re-upload the modified theme and publish it; verify with PageSpeed Insights.
Duplicate meta descriptionModerate effort

Write a unique, page-specific meta description for every page on your store so Google can display a relevant snippet in search results.

On BigCommerce

  1. For product pages: Admin → Catalog → Products → Edit product → 'SEO & Sharing' tab → fill in 'Meta Description' → Save.
  2. For category pages: Admin → Catalog → Product Categories → Edit category → 'SEO' tab → 'Meta Description' field → Save.
  3. For the homepage: Admin → Storefront → Home Page → Customise → look for the SEO fields; or Admin → Marketing → SEO → Site Meta Description.
  4. For content/blog pages: Admin → Storefront → Blog → Edit post → 'SEO' section → 'Meta Description' → Save.
  5. For bulk updates, use the BigCommerce Products bulk-edit CSV export/import (Admin → Catalog → Import/Export → Export Products) — the column is `meta_description`.
Duplicate titleModerate effort

Write a unique, descriptive title tag for every page on your store so no two pages share the same title.

On BigCommerce

  1. For products: go to Products → View, open a product, select the 'Other Details' tab, and edit the 'Page Title' field under SEO.
  2. For categories: go to Products → Product Categories, open the category, and edit the 'Page Title' field under the SEO section.
  3. For standard pages: go to Storefront → Web Pages, open the page, and edit the 'Page Title' field.
  4. For the homepage: go to Storefront → Web Pages → Home Page and edit its SEO title.
  5. For theme-level templates, go to Storefront → Themes → Advanced → Edit Theme Files. In templates/layout/base.html (or similar), locate the {{#block 'head'}} section and ensure the {{title}} Handlebars variable is used so each page outputs its own stored title.
  6. Use the BigCommerce bulk import/export (Products → Export) to update the 'Meta Keywords Title' column in a spreadsheet for large catalogs, then re-import.
Faceted url indexableModerate effort

Point every faceted/filter URL's canonical tag to the clean, unfiltered category URL (or add noindex) so Google treats filtered pages as one authoritative page instead of thousands of duplicates.

On BigCommerce

  1. BigCommerce automatically sets canonical tags on category pages to the base category URL. The issue typically arises from sort/filter parameters appended by faceted search.
  2. Go to Storefront → Script Manager and check for any third-party filter scripts that may be injecting their own canonical tags — remove or reconfigure those.
  3. In your Stencil theme, open `templates/pages/category.html`. Find or add the canonical tag: `<link rel='canonical' href='{{urls.category}}'>` — this uses BigCommerce's built-in variable which returns the clean category URL without query parameters.
  4. For built-in BigCommerce faceted search (available on Pro/Enterprise plans): go to Storefront → Faceted Search and enable it. BigCommerce's native implementation is designed to avoid indexable filter URLs by using history.pushState without generating crawlable parameter URLs by default — confirm this behavior in your theme's JS.
  5. To noindex filter URLs as a fallback, add a Stencil conditional in `category.html` to output `<meta name='robots' content='noindex, follow'>` when `{{query_string}}` is non-empty.
  6. Remove any filter URLs from your XML sitemap: go to Storefront → Sitemaps and confirm only clean category URLs are included.
Images missing altModerate effort

Add descriptive alt text to every image on your store so search engines can understand them and all shoppers can access your content.

On BigCommerce

  1. FOR PRODUCT IMAGES: Go to Products > View, open a product, scroll to the Images section, click the image you want to edit, and enter descriptive text in the 'Alt Text' field. Save the product.
  2. FOR CONTENT/PAGE IMAGES: Go to Storefront > Web Pages, open a page, click the image in the rich-text (WYSIWYG) editor, click the 'Image' toolbar button, and update the 'Image Description (Alt Text)' field.
  3. FOR BANNER/CAROUSEL IMAGES: Go to Storefront > Image Manager or Marketing > Banners, select the image/banner, and complete the alt text field in the settings.
  4. FOR BULK UPDATES: Use the BigCommerce Products API or export products via a CSV (Products > Export), add alt text in the image_alt_text column, and re-import.
Low performance scoreLarger project

Improve your Lighthouse/PageSpeed performance score by reducing page weight, deferring JavaScript, optimizing images, and fixing Core Web Vitals metrics so your store loads fast on mobile and desktop.

On BigCommerce

  1. Use Cornerstone theme — Storefront → Themes: Cornerstone (BigCommerce's official theme) is the most performance-optimized. If on a custom theme, compare its PageSpeed score against Cornerstone to diagnose theme-level bloat.
  2. Script Manager — Store Setup → Script Manager: review every script installed. Delete or disable scripts that are not actively used. Set non-critical scripts to 'Footer' placement and load strategy 'Defer' where the option exists.
  3. Image optimization — When uploading product images, BigCommerce serves them via Akamai CDN automatically. Ensure you upload images no larger than necessary (max 1280 px on longest side for most layouts). Use WebP uploads where your theme supports the <picture> element.
  4. Lazy loading — In Storefront → My Themes → Advanced → Edit Theme Files → templates/components/products/product-listing.html, add loading='lazy' to product card images.
  5. Fonts & CSS — In assets/scss/settings/ reduce the number of loaded font weights and use font-display: swap in your SCSS files.
  6. Apps — Apps Marketplace: 'Yottaa' or 'Amasty Speed Optimizer' provide server-side script bundling and CDN optimization for BigCommerce stores.
Meta description too longQuick win

Shorten your meta description to 150–160 characters so Google displays your full message in search results instead of cutting it off with "…".

On BigCommerce

  1. For Products: go to Products → View → click the product → scroll to the 'Search Engine Optimization' section on the product edit page. Edit the 'Meta Description' field and keep it under 160 characters. Click 'Save'.
  2. For Category pages: go to Products → Product Categories → click the category → scroll to the 'Search Engine Optimization' panel. Edit 'Meta Description' and save.
  3. For standard content pages: go to Storefront → Web Pages → click the page → locate the 'Search Engine Optimization' section at the bottom. Edit and save.
  4. For the Homepage: go to Storefront → Web Pages → find your home page (often listed as 'Home') and follow the same SEO section steps.
  5. BigCommerce does not enforce a character limit in the field, so manually count or paste into a character-counter tool before saving.
Meta description too shortModerate effort

Expand every meta description to 120–160 characters so Google shows your custom summary in search results instead of auto-generating one.

On BigCommerce

  1. For a product: Admin → Catalog → Products → Edit the product → click the 'SEO' tab → enter your text in the 'Meta Description' field → Save.
  2. For a category: Admin → Catalog → Categories → Edit category → 'SEO' tab → Meta Description → Save.
  3. For a standard page: Admin → Storefront → Web Pages → Edit page → 'SEO & Share' tab → Meta Description → Save.
  4. For the homepage: Admin → Storefront → Web Pages → Home page → 'SEO & Share' tab → Meta Description → Save.
  5. For bulk product updates, export products via Admin → Catalog → Import/Export → Export Products as CSV, edit the 'meta_description' column in a spreadsheet, then re-import.
Missing canonicalModerate effort

Add a self-referencing canonical tag to every page so Google knows which URL is the "official" version of that content.

On BigCommerce

  1. BigCommerce outputs canonical tags automatically for product, category, and brand pages via the Stencil theme framework.
  2. Verify by viewing page source on a product page and checking for `<link rel="canonical"`.
  3. If your Stencil theme is missing it, go to Storefront → My Themes → Advanced → Edit Theme Files → open `templates/layout/base.html` and add `<link rel="canonical" href="{{canonicalUrl}}">` inside `<head>`.
  4. For custom pages or widgets, use the Page Builder or HTML editor to manually insert the tag.
  5. Use the BigCommerce SEO settings (Store Setup → Store Settings → SEO) to ensure canonical URL patterns for categories and products are correct.
Missing h1Quick win

Add a single, descriptive H1 heading to every page that currently lacks one, so search engines and shoppers immediately understand what the page is about.

On BigCommerce

  1. **Product pages:** Admin → Catalog → Products → click the product → the 'Product Name' field renders as the H1 in Cornerstone and most themes. Verify in Stencil theme file 'templates/components/products/product-view.html' that the name is inside `<h1 itemprop="name">`.
  2. **Category pages:** Admin → Catalog → Product Categories → click the category → the 'Category Name' field is the H1. In the theme, check 'templates/pages/category.html'.
  3. **Custom pages (Web Pages):** Admin → Storefront → Web Pages → click the page → ensure the 'Page Name' or a heading within the content editor is set as H1. In the WYSIWYG editor, highlight the top line, open the paragraph style dropdown, and select 'Heading 1'.
  4. **Theme customisation:** Admin → Storefront → My Themes → Advanced → Edit Theme Files → locate the relevant template and ensure the title variable is wrapped in `<h1>` tags.
  5. Verify with browser Dev Tools (right-click → Inspect) after publishing.
Missing meta descriptionQuick win

Write a unique meta description of 120–160 characters for every page so Google has compelling snippet text to show in search results.

On BigCommerce

  1. For a product: Admin → Catalog → Products → click the product → go to the 'SEO' tab within the product editor → fill in 'Meta Description' → Save.
  2. For a category: Admin → Catalog → Product Categories → click the category → 'SEO' tab → fill Meta Description → Save.
  3. For a standard page: Admin → Storefront → Web Pages → click the page → 'SEO & Sharing' tab → fill Meta Description → Save.
  4. For the homepage: Admin → Storefront → Home Page Carousel or use Admin → Store Setup → Store Profile; alternatively edit the homepage via Admin → Storefront → Web Pages → Home page if it appears there.
  5. To bulk-update via import: Admin → Catalog → Import → use a products CSV with the 'meta_description' column populated.
Missing og descriptionQuick win

Add an og:description meta tag to every page so social platforms display a compelling preview when your store's links are shared.

On BigCommerce

  1. BigCommerce uses Handlebars templates. Open your control panel and go to Storefront → My Themes → click 'Advanced' → Edit Theme Files (or download the theme to edit locally).
  2. Open templates/layout/base.html (or the equivalent head partial in your theme) and locate the Open Graph block.
  3. Add or confirm this line exists inside <head>: <meta property="og:description" content="{{#if page.meta_description}}{{page.meta_description}}{{else}}{{settings.meta_description}}{{/if}}">
  4. For individual products, go to Products → Edit a product → scroll to 'Search Engine Optimization' section → fill in the 'Meta Description' field; this value is exposed as page.meta_description in templates.
  5. For categories: Products → Product Categories → select a category → fill in 'Meta Description'.
  6. Save and publish the theme, then validate with Facebook Sharing Debugger.
Missing og imageModerate effort

Add an og:image meta tag to every page so social media platforms and messaging apps display a rich preview image when someone shares your store's link.

On BigCommerce

  1. BigCommerce automatically uses the product's primary image as og:image for product pages. Ensure every product has a high-resolution main image uploaded under Products → [Product] → Images & Videos.
  2. For global/default og:image settings, go to Storefront → Script Manager or edit your theme directly. In Stencil themes, open the file 'templates/layout/base.html' in the Theme Editor (Storefront → My Themes → Advanced → Edit Theme Files) and locate the og:image meta tag to customize the fallback.
  3. To set a branded default for non-product pages (homepage, category pages), add or edit the og:image meta tag in 'templates/layout/base.html', using Handlebars context variables like {{page.featured_image}} where available or a hardcoded absolute URL for the fallback image.
  4. For category pages, BigCommerce uses the category image if set. Add category images under Products → Product Categories → [Category] → Category Image.
  5. Validate changes using the Meta Sharing Debugger after publishing.
Missing og titleQuick win

Add an og:title meta tag to every page so your store looks great when shared on Facebook, Pinterest, LinkedIn, and other social platforms.

On BigCommerce

  1. From your BigCommerce admin, go to Storefront → Script Manager and check for any existing Open Graph or SEO scripts.
  2. For template-level edits, go to Storefront → My Themes → click Advance → Edit Theme Files (Stencil themes).
  3. Open templates/layout/base.html (or your theme's base layout). Locate the <head> section.
  4. BigCommerce Stencil themes expose page title via the {{head.title}} variable. Add: <meta property="og:title" content="{{head.title}}" /> inside <head>.
  5. For product pages specifically, you can use {{product.title}} in templates/pages/product.html for a more precise value.
  6. Save and push the theme update, then validate with the Facebook Sharing Debugger.
Missing titleQuick win

Add a unique, descriptive title tag (30–60 characters) to every page that is missing one.

On BigCommerce

  1. For a product: go to Products → View → select the product → click the 'SEO' tab → fill in the 'Page Title' field.
  2. For a category: go to Products → Product Categories → select the category → click the 'SEO' tab → fill in 'Page Title'.
  3. For a standard page (e.g. About Us): go to Storefront → Web Pages → select the page → fill in the 'Page Title' field in the SEO section.
  4. For the homepage: go to Storefront → Home Page → SEO → fill in the 'Page Title'.
  5. Click Save and verify by viewing the page source.
Multiple h1Moderate effort

Reduce every page to exactly one H1 tag that clearly describes the page's main topic, removing or converting all extra H1s to lower-level headings (H2, H3, etc.).

On BigCommerce

  1. Go to Storefront → My Themes → click 'Advanced' → 'Edit Theme Files' on your active theme.
  2. Open templates/pages/product.html and search for '<h1'. The product name ({{product.title}}) should be the only H1. Convert any other H1 elements to H2 or H3.
  3. Open templates/pages/category.html and templates/pages/blog-post.html and repeat the same check.
  4. Check templates/layout/base.html for site-wide header elements that may contain H1 tags (e.g., store name); change those to <p> or <span> tags styled with CSS.
  5. Save all files, then use a page inspector or the free 'Headings Map' browser extension to verify each page type now has exactly one H1.
  6. If using Page Builder widgets (BigCommerce native editor): open the affected page, click any text block set to 'Heading 1', and change it to 'Heading 2' or lower.
Noindex detectedQuick win

Remove or replace the `noindex` directive on any page you want Google to find and rank, then verify the change with Google Search Console.

On BigCommerce

  1. BigCommerce does not add noindex by default to standard storefront pages.
  2. For individual pages: Admin → Storefront → Web Pages → edit the page → look for an 'SEO' section or 'Search Engine Indexing' toggle and set it to indexed.
  3. For product pages: Catalog → Products → edit the product → SEO tab — check for a 'noindex' field if your theme or an app has added one.
  4. For theme-level tags: Admin → Storefront → My Themes → Advanced → Edit Theme Files → open `templates/layout/base.html` (or equivalent) → search for `noindex` and remove any unintended `<meta name="robots">` tags.
  5. If using a third-party SEO app from the BigCommerce App Marketplace, open it and check per-page or per-template noindex settings.
Non self canonicalModerate effort

Ensure every page's canonical tag points to that same page's own URL — fix any canonical that currently points to a different page unless the redirect is genuinely intentional.

On BigCommerce

  1. BigCommerce generates canonical tags automatically in its Stencil framework.
  2. Log in to your control panel and go to Storefront → My Themes → Edit Theme (Advanced) → Edit Theme Files.
  3. Open templates/layout/base.html (or your custom base template) and search for 'canonical'.
  4. If a hard-coded canonical override exists, remove it and rely on BigCommerce's built-in {{canonicalUrl}} Handlebars variable, which automatically outputs a self-referencing canonical.
  5. If you use a third-party SEO app from the BigCommerce App Marketplace (e.g., 'Yoast for BigCommerce'), open that app's settings and check for any global canonical redirect rules.
Page speed warningModerate effort

Reduce your page load time to under 1.5 seconds by compressing images, eliminating render-blocking resources, and enabling caching so Google and shoppers experience a fast site.

On BigCommerce

  1. Images: In Storefront → Image Sizes, confirm image dimensions match the largest display size in your theme. Upload images already resized and compressed; BigCommerce serves images through Akamai CDN automatically.
  2. Theme scripts: In Storefront → Themes → Advanced → Edit Theme Files (Stencil CLI or in-browser editor), open 'templates/layout/base.html'. Add 'defer' to non-critical <script> tags.
  3. Apps: In Apps → My Apps, remove all apps you are not actively using — each may inject storefront scripts.
  4. Script Manager: In Storefront → Script Manager, review every third-party script. Set loading to 'Footer' and method to 'Defer' wherever possible.
  5. CDN: BigCommerce includes Akamai CDN for static assets automatically. For additional optimisation, add Cloudflare in front of your domain via DNS settings at your domain registrar.
  6. Verify: Use Google PageSpeed Insights and BigCommerce's built-in Lighthouse reports (available under Storefront → Themes → ...) to track improvements.
Search results indexableModerate effort

Add a noindex robots meta tag to all internal search results pages and block the search path in robots.txt to prevent thin, duplicate, near-infinite pages from polluting Google's index.

On BigCommerce

  1. Log in to your BigCommerce control panel and go to Storefront → Script Manager — add a script scoped to 'All Pages' that conditionally outputs the noindex meta tag only on search pages.
  2. Alternatively, go to Storefront → My Themes → Advanced → Edit Theme Files and open templates/pages/search.html. Add <meta name="robots" content="noindex,follow"> inside the {{> components/common/head}} block or directly in the <head> partial.
  3. For robots.txt: BigCommerce does not provide a UI editor for robots.txt on all plans. Go to Server Settings → robots.txt (available on higher plans) or contact BigCommerce support to add: Disallow: /search/
  4. Alternatively, use a third-party SEO app from the BigCommerce App Marketplace (e.g. SEO Manager) to set noindex on the search template.
  5. Confirm the change by viewing the page source of a live /search/?q=test page.
Seo category description missingQuick win

Write a unique 100–200 word description for every product category page explaining what it contains and who it's for.

On BigCommerce

  1. In your BigCommerce admin, go to Products → Product Categories.
  2. Click the category name to open its settings.
  3. In the 'Category Description' field (rich-text editor), write your 100–200 word description.
  4. Scroll to the 'Search Engine Optimization' section on the same page to also fill in the Meta Description field.
  5. Click 'Save'. The description renders on the category page based on your active theme — typically above the product listing in Cornerstone-based themes.
Seo category description thinModerate effort

Expand your category page description to at least 150–300 words of genuinely useful, keyword-rich content that explains what shoppers will find in the category.

On BigCommerce

  1. Go to Admin → Products → Product Categories.
  2. Click the category name to open its settings.
  3. Scroll to the 'Description' field (a rich-text WYSIWYG editor) and write or paste your expanded description.
  4. Click 'Save & Close'.
  5. Verify it appears on the storefront category page. If hidden, check your theme's 'category.html' Stencil template — the variable is {{category.description}}; ensure it is present in the markup.
Seo category emptyQuick win

Either populate the empty category with relevant products, or apply a noindex tag and remove it from navigation so Google does not waste crawl budget on a page with no content.

On BigCommerce

  1. To ADD products: Admin → Products → View → edit each product → scroll to 'Categories' → check the previously empty category → Save.
  2. To NOINDEX: Admin → Products → Product Categories → click the empty category → scroll to 'Search Engine Optimization' section → set 'Indexing' to 'No Index' (or paste <meta name="robots" content="noindex"> into the custom header field if available on your plan) → Save.
  3. To HIDE from nav: Admin → Storefront → Navigation → find the category → uncheck 'Visible' or remove it from the navigation tree → Save. Alternatively, edit the category and set 'Visible' to off.
  4. To DELETE and REDIRECT: Admin → Products → Product Categories → check the category → Delete. Then Admin → Server Settings → 301 Redirects → Add redirect from old URL to parent category URL.
Seo category sparseModerate effort

Add more products to the category or consolidate it with a closely related one so Google sees a substantive, valuable page worth ranking.

On BigCommerce

  1. Go to Products → Product Categories in the control panel to review categories and their product counts.
  2. To add products: open each product (Products → View), scroll to 'Categories', and tick the target category; save.
  3. To add category content: go to Products → Product Categories, click Edit on the category, and populate the 'Category Description' field with a unique paragraph.
  4. To merge: move all products to the target category, then create a 301 redirect under Server Settings → 301 Redirects → Create a Redirect, mapping the old category URL path to the new one.
  5. Delete the now-empty old category from Products → Product Categories.
  6. Use Google Search Console's URL Inspection to confirm the old URL 301-redirects and request indexing of the destination.
Seo facet url not canonicalizedModerate effort

Add a canonical tag pointing filtered and sorted category URLs back to the clean (unfiltered) category page URL to prevent duplicate content and crawl waste.

On BigCommerce

  1. BigCommerce generates filter URLs using query parameters (e.g., ?brand=X&color=Y) for its native faceted search. The platform does NOT automatically canonicalize these back to the clean category URL.
  2. Go to Storefront → Script Manager and create a new script scoped to 'All Pages' or 'Category Pages', placed in the `<head>`.
  3. Write a small JavaScript snippet that detects if the current URL contains filter query parameters and, if so, injects a `<link rel='canonical'>` pointing to `window.location.origin + window.location.pathname` (stripping all query strings). This is the most accessible no-code-deployment method on BigCommerce.
  4. For a more robust server-side approach, work with a BigCommerce partner developer to customize the Stencil theme: in the `templates/layout/base.html` (or equivalent), add Handlebars logic to output the canonical using `{{urls.current}}` stripped of query parameters.
  5. Alternatively, use a BigCommerce SEO app from the App Marketplace (e.g., Yoast SEO for BigCommerce) which handles facet canonical tags automatically.
  6. Verify by loading a filtered category URL, viewing source, and confirming the canonical matches the clean category path.
Seo product description minimalModerate effort

Expand thin product descriptions to at least 300 words by adding specifications, use cases, and benefits so Google has enough content to rank and shoppers have enough information to buy.

On BigCommerce

  1. Go to Store Admin → Products → View, then click the product name.
  2. Select the 'Description' tab inside the product editor.
  3. Use the built-in WYSIWYG editor (Page Builder / TinyMCE) to write expanded content — add headings, bullet lists, tables for specs, and FAQ paragraphs.
  4. Switch to HTML source view (the '<>' button) if you want to paste pre-formatted markup or embed a structured specs table.
  5. To edit many products at once, go to Products → Export, choose the 'Default' template, update the 'Product Description' column in the exported CSV, then re-import via Products → Import.
  6. Click 'Save & Exit'.
Seo product description missingModerate effort

Write and publish a 200–400 word product description covering what the product is, its key specs, who it's for, and how to use it.

On BigCommerce

  1. In your BigCommerce Control Panel, navigate to Products → View and click Edit on the relevant product.
  2. Select the Description tab in the product edit page.
  3. Enter your 200–400 word description in the rich-text editor. Use headings, bullet points, and bold text for readability.
  4. Click Save & Exit. BigCommerce includes the description in its built-in Product schema markup automatically.
  5. To verify structured data, use Google's Rich Results Test on the live product URL after saving.
Seo product description thinModerate effort

Expand thin product descriptions to at least 300 words of unique, keyword-rich content that answers real shopper questions and gives Google enough text to understand what you sell.

On BigCommerce

  1. Go to Admin (store control panel) → Catalog → Products → click the product name to edit.
  2. Select the 'Description' tab within the product editor.
  3. Use the built-in WYSIWYG editor (TinyMCE/Page Builder) to write your expanded description. Switch to HTML source view via the '<>' or 'Source Code' button to paste pre-formatted HTML if needed.
  4. Click 'Save & Close'. BigCommerce renders descriptions server-side, so the content is immediately crawlable.
Seo product image alt filenameModerate effort

Replace filename-based alt text on product images with short, descriptive phrases that accurately describe each image's content.

On BigCommerce

  1. Go to Products → View in the control panel and open a product.
  2. Click the 'Images & Videos' tab.
  3. Hover over an image thumbnail and click the pencil (Edit) icon.
  4. In the 'Image Description (Alt Text)' field, enter your descriptive text.
  5. Click 'Confirm' to save, then click 'Save' on the product page.
  6. Repeat for all product images. For bulk updates, use the BigCommerce V2 Products Images API or a third-party app such as 'SEO Image Optimizer' from the BigCommerce App Marketplace.
Seo product missing brandQuick win

Add a `brand` property to your Product structured data (schema.org/Product) so search engines can match your listings to brand-specific queries.

On BigCommerce

  1. Go to Storefront → My Themes → click 'Edit Theme Files' (Stencil themes) for your active theme.
  2. Open `templates/pages/product.html` and locate the JSON-LD `<script type='application/ld+json'>` Product block (or the Handlebars partial that generates it).
  3. Add the brand field using the Handlebars product context: `"brand": { "@type": "Brand", "name": "{{product.brand.name}}" }` — BigCommerce exposes `product.brand.name` in Stencil templates.
  4. Ensure each product has a Brand assigned: go to Products → Edit Product → scroll to 'Brand' field in the product details and select or create the brand.
  5. Push the theme update and validate with the Rich Results Test.
Seo product missing gtinModerate effort

Add a valid GTIN (and/or MPN) to your Product structured data so Google can match your listings to its product catalog and show them in Shopping results and AI-powered product features.

On BigCommerce

  1. In your BigCommerce admin, go to Products → View → select a product → scroll to the 'Identifiers' section.
  2. Enter your GTIN in the 'GTIN' field and/or your MPN in the 'MPN' field — BigCommerce has dedicated fields for both.
  3. BigCommerce automatically includes these values in the Product structured data JSON-LD it generates for each product page — no code changes needed.
  4. For bulk updates, go to Products → Export and add the GTIN and MPN columns to your export template, fill in the values, then re-import via Products → Import.
  5. Verify the structured data output using Google's Rich Results Test on any updated product URL.
Seo product missing stock statusModerate effort

Add visible stock availability text to each product page and set the correct `availability` property (InStock, OutOfStock, or PreOrder) in your Product structured data (JSON-LD schema).

On BigCommerce

  1. BigCommerce injects Product schema automatically for products with stock tracking enabled.
  2. Go to Products → View in your admin, open a product, scroll to the 'Inventory' section, and ensure 'Track inventory' is enabled so the platform knows current stock levels.
  3. To confirm schema output, go to Storefront → Themes → Edit Theme Files (Advanced mode), open `templates/pages/product.html`, and search for `availability` to see the existing schema block.
  4. If you need to customise the availability value, edit the Handlebars template expression in that block — e.g. `{{#if product.availability}}` — or use a BigCommerce partner app like 'Schema App' from the App Marketplace.
  5. For the visible stock label, add a Handlebars conditional near the Add-to-Cart button in `product.html`: `{{#if product.stock_level}}In Stock{{else}}Out of Stock{{/if}}`.
  6. Test with the Rich Results Test after saving.
Seo product no imagesModerate effort

Add at least one high-quality image to every product page so Google can index it and shoppers can see what they're buying.

On BigCommerce

  1. In your BigCommerce control panel, go to Products → View.
  2. Click the product name to open it for editing.
  3. Select the 'Images & Videos' tab within the product editor.
  4. Click 'Add Image', upload your file, and set it as the thumbnail if it is the primary image.
  5. After uploading, click the pencil/edit icon on the image to add alt text in the 'Image Alt Text' field.
  6. Click 'Save & Close'. BigCommerce automatically includes product images in its structured data and XML sitemap.
Seo product no spec tableModerate effort

Add a structured specifications table or list to every product page so search engines and AI tools can extract and surface factual product details, and shoppers can make faster buying decisions.

On BigCommerce

  1. In the BigCommerce control panel, go to Products → select a product → click the Custom Fields tab.
  2. Add custom fields for each spec (e.g., Name: 'Material', Value: 'Aluminum 6061-T6'). These are stored per product.
  3. Edit your Stencil theme file templates/components/products/product-view.html (via Stencil CLI or Page Builder's Edit Theme Files). Add a loop over {{product.custom_fields}} to render them as an HTML table inside a 'Specifications' section.
  4. Alternatively, go to Storefront → Script Manager and inject a custom HTML/JS block on product pages that reads custom field data and renders a styled spec table.
  5. For large catalogs, use the BigCommerce Products API or a bulk CSV import (Products → Export / Import) to populate custom fields at scale.
  6. Check BigCommerce Apps Marketplace for apps like 'Product Tabs' or custom tab builders that provide a no-code spec table UI.
Seo product price not in htmlModerate effort

Render product prices in server-side HTML so search engines and rich-result parsers can read them without executing JavaScript.

On BigCommerce

  1. In BigCommerce admin, go to Storefront → Themes → click Advanced → Edit Theme Files (Stencil theme editor or downloaded theme via Stencil CLI).
  2. Open templates/pages/product.html and locate the price Handlebars helper — it should reference {{price.without_tax}} or {{price.with_tax}}. These are server-side rendered by the Stencil engine.
  3. If you have customized the theme to fetch the price via the Storefront API (JavaScript), revert to the Handlebars template variable so the price is in the initial server response.
  4. BigCommerce automatically outputs Product structured data; confirm 'offers.price' is present by viewing page source and searching for 'application/ld+json'.
  5. Use the BigCommerce Preview or a staging URL to do a View Page Source check confirming the price appears before any scripts run.
  6. If using a headless/custom storefront (Next.js, etc.), ensure Server-Side Rendering (SSR) or Static Site Generation (SSG) is used for product pages so the price is in the HTML payload.
Seo product single imageModerate effort

Add at least 4 high-quality product images (multiple angles, detail shots, and lifestyle/in-use photos) to every product listing to increase click-through rates and conversions.

On BigCommerce

  1. Go to Admin → Products → View → click the product name.
  2. Select the 'Images & Videos' tab on the product edit screen.
  3. Click 'Upload Images', select multiple files at once, and upload them.
  4. Click the thumbnail of each uploaded image to open its edit panel; fill in the 'Alt Text' field for every image.
  5. Drag images into your preferred sort order; the top image becomes the default product thumbnail. Click 'Save'.
Seo product title genericQuick win

Rewrite generic product page titles to include the product name plus at least one differentiating attribute (material, colour, size, pack size, or brand) in a natural, keyword-rich format.

On BigCommerce

  1. Go to Store Admin → Products → [select your product] → Edit Product.
  2. Click the 'SEO' tab within the product editor.
  3. Update the 'Page Title' field with your optimised title.
  4. Click 'Save'. BigCommerce writes this directly to the <title> tag for the product page.
  5. For bulk changes, use the Import/Export tool: Products → Export → download CSV → edit the 'page_title' column → reimport.
Seo variant urls in sitemapModerate effort

Remove product variant URLs (e.g. ?variant=, ?sku=) from your XML sitemap so only the canonical product page URL is submitted to Google.

On BigCommerce

  1. BigCommerce generates its sitemap automatically at yourstore.com/xmlsitemap.php. By default it does not include variant query-parameter URLs — check whether a third-party SEO app or a custom sitemap script is adding them.
  2. Go to Apps → Marketplace, and review any installed SEO or sitemap apps. Open the app's settings and look for a 'Product variants' or 'URL parameters' exclusion setting and disable variant URL inclusion.
  3. For custom sitemaps built via the BigCommerce Storefront API or a headless front-end, edit the sitemap-generation script to filter out any URL containing query parameters before writing entries.
  4. BigCommerce automatically adds rel=canonical pointing to the clean product URL on all pages including those loaded with option/variant parameters — verify this by viewing page source on a variant URL.
  5. Resubmit your sitemap in Google Search Console: yourstore.com/xmlsitemap.php.
Seo variant urls not canonicalizedModerate effort

Add a canonical tag to every product variant URL pointing back to the base product page, so Google consolidates ranking signals onto one authoritative URL instead of splitting them across hundreds of near-duplicate pages.

On BigCommerce

  1. BigCommerce natively generates variant URLs like /products/my-shirt?color=Red. As of current platform versions, BigCommerce automatically outputs a canonical tag on product pages pointing to the base product URL — verify this is working.
  2. In your admin, go to Storefront → Script Manager and check no third-party script is overriding the canonical tag.
  3. To verify: view the page source of a variant URL (right-click → View Page Source, Ctrl+F for 'canonical') and confirm the href is the base product URL without query parameters.
  4. If using a Stencil theme, open templates/layout/base.html in the Theme Editor (Storefront → Themes → Advanced → Edit Theme Files) and confirm {{canonicalUrl}} resolves to the base product. If it does not, hardcode it for product templates: in templates/pages/product.html, add <link rel="canonical" href="{{product.url}}"> inside {{#partial "head"}}.
  5. Check your XML sitemap (yourstore.com/sitemap.xml) to ensure only base product URLs appear, not variant query strings.
Slow pageLarger project

Reduce page load time to under 3 seconds by compressing images, minifying CSS/JS, enabling caching, and improving server response speed.

On BigCommerce

  1. Images: In the BigCommerce control panel, go to Products → [product] → Images and upload images at the largest display size needed (BigCommerce serves them via its built-in Akamai CDN and auto-resizes). Keep source images under 1MB; use WebP or high-quality JPEG.
  2. Theme JS/CSS: In Storefront → My Themes → Advanced → Edit Theme Files (Stencil CLI locally), add 'defer' to non-critical <script> tags in templates/layout/base.html. Minimize use of custom scripts added via storefront Script Manager (Settings → Script Manager).
  3. Script Manager: Go to Settings → Script Manager and audit every third-party script. Remove unused ones; set placement to 'Footer' and load method to 'Defer' for scripts that allow it.
  4. CDN: BigCommerce automatically delivers theme assets and images through Akamai CDN — no configuration needed. For additional performance, enable Cloudflare via the BigCommerce App Marketplace (search 'Cloudflare') or configure it at your DNS level.
  5. Apps: Review installed apps in Apps → My Apps and uninstall any that are no longer in use, as each may inject additional scripts.
Thin contentModerate effort

Expand thin pages to at least 300 words of unique, helpful content that genuinely describes your products, category, or topic.

On BigCommerce

  1. Product pages: Admin → Catalog → Products → [select product] → 'Description' tab → use the rich-text editor to write the expanded description. Enable 'Custom Fields' for additional spec content.
  2. Category pages: Admin → Catalog → Product Categories → [select category] → 'Description' field. Ensure your theme's category template (category.html in Stencil) renders the {{category.description}} variable.
  3. For faceted search pages creating thin duplicates, go to Admin → Storefront → Faceted Search and restrict which facet combinations are crawlable, or use the BigCommerce robots.txt editor (Storefront → robots.txt) to disallow deep facet URL patterns.
Title too longQuick win

Shorten your page title tag to 60 characters or fewer so it displays in full — not truncated — in Google search results.

On BigCommerce

  1. For a product: go to Products → View → select the product → click the 'SEO & Sharing' tab → edit the 'Page Title' field.
  2. For a category: go to Products → Product Categories → select the category → 'SEO' tab → edit 'Category Page Title'.
  3. For a content page: go to Storefront → Web Pages → select the page → 'SEO' tab → edit 'Page Title'.
  4. For the homepage: go to Storefront → Home Page → 'SEO' tab → 'Page Title' field.
  5. BigCommerce shows no live character counter by default; paste your title into a free SERP preview tool before saving to confirm length.
Title too shortQuick win

Expand your page title to between 50 and 60 characters so it displays fully in Google search results and gives shoppers a clear reason to click.

On BigCommerce

  1. Go to the item you want to edit: Products → View (for products), Storefront → Web Pages (for content pages), or Products → Product Categories (for categories).
  2. Open the specific product, page, or category.
  3. Click the 'SEO' tab within the editor.
  4. Update the 'Page Title' field with your new 50–60 character title.
  5. Click 'Save & Exit'.

Answer Engine Optimization · 15 fixes

Article missing authorModerate effort

Add a structured-data author field (schema.org Person) to every article and blog post so AI engines and search crawlers can verify who wrote the content.

On BigCommerce

  1. Go to Storefront → Script Manager and create a new script scoped to 'All Pages' or target specific blog page templates.
  2. Paste your JSON-LD BlogPosting block (see code example above) as a <script type='application/ld+json'> tag, filling author name and sameAs statically or via Handlebars variables available in the Stencil theme (e.g. {{blog.post.author}}).
  3. Alternatively, edit the blog post template directly: open Storefront → My Themes → Edit Theme Files → templates/pages/blog-post.html and insert the JSON-LD block.
  4. Use BigCommerce custom fields or the blog post 'Author' metadata field to supply the author name dynamically.
  5. Test the updated page in Google's Rich Results Test.
Invalid rating valueModerate effort

Fix the AggregateRating.ratingValue in your structured data so it falls within the valid numeric range (1–5 by default, or within the declared bestRating/worstRating bounds).

On BigCommerce

  1. Go to Storefront > My Themes > current theme > Advanced > Edit Theme Files.
  2. Search for 'ratingValue' in templates/components/products/ — typically in product-view.html or a structured-data partial.
  3. Ensure the Handlebars expression outputs a value between 1 and 5, e.g. {{product.rating.average}}, and add '"worstRating": "1", "bestRating": "5"' to the same JSON-LD block.
  4. If ratingValue could be 0 (no reviews yet), wrap the entire aggregateRating block in a conditional: {{#if product.rating.count}} … {{/if}} so it is omitted when there are no reviews.
  5. Save and preview, then run the Rich Results Test.
Low answer first scoreModerate effort

Restructure your page content to lead with a direct, concise answer and add FAQ schema so search engines and AI assistants can surface your content as a featured snippet or direct answer.

On BigCommerce

  1. Go to Storefront → Web Pages to edit static pages, or Catalog → Products → Edit Product → Description tab for product pages.
  2. Place your direct-answer summary paragraph at the top of the WYSIWYG editor content.
  3. Use the Heading styles in the editor to create question-format H2/H3 subheadings.
  4. For FAQ schema: BigCommerce does not have a built-in FAQ schema UI, so switch to the HTML source view in the editor and paste the FAQPage JSON-LD <script> block at the bottom of the page's HTML content.
  5. Alternatively, add the JSON-LD globally via Storefront → Script Manager → Create a Script, setting location to 'Footer' and targeting specific pages by page type.
  6. Test with Google's Rich Results Test.
Low review countModerate effort

Collect at least 5 published reviews so Google can display star ratings in search results for your product pages.

On BigCommerce

  1. Go to BigCommerce Admin → Marketing → Product Reviews to see current review counts per product.
  2. Enable the built-in review request email: Store Setup → Store Settings → Miscellaneous → 'Send product review emails' and set the send delay (7–14 days recommended).
  3. For more control, install a review app from the BigCommerce App Marketplace (e.g. Yotpo, Okendo, or Judge.me).
  4. BigCommerce themes (Cornerstone) automatically render aggregateRating JSON-LD when reviews exist; once 5 reviews are approved and published, the schema updates automatically.
  5. Verify with the Rich Results Test that reviewCount reaches ≥ 5 on your target product pages.
Missing schema articleModerate effort

Add Article and BreadcrumbList JSON-LD structured data to every editorial/blog page so search engines and AI answer engines can correctly identify, understand, and feature your content.

On BigCommerce

  1. In BigCommerce admin, go to Storefront › Script Manager › Create a Script.
  2. Set Location to 'Head', Pages to 'Store Pages', and Script Category to 'Essential'.
  3. Paste a JavaScript snippet that detects when the current page is a blog post (check the URL pattern or a page-level variable) and then document.writes or injects the Article and BreadcrumbList JSON-LD blocks using Handlebars template variables available in Stencil themes ({{page.title}}, {{urls.current}}).
  4. Alternatively, edit the Stencil theme directly: in your local Stencil CLI setup, open templates/pages/blog-post.html and add the JSON-LD <script> blocks using Handlebars variables for post title, date, author, and URL.
  5. Push the theme update via Stencil CLI (stencil push) and validate with Google's Rich Results Test.
Missing schema breadcrumblistModerate effort

Add BreadcrumbList structured data (JSON-LD) to every page so Google can display your site's navigation path directly in search results.

On BigCommerce

  1. Log in to your BigCommerce control panel and go to Storefront → My Themes → click Customize on your active theme → Advanced → Edit Theme Files (or use the Stencil CLI for local editing).
  2. Open the relevant Handlebars template files: 'templates/pages/product.html', 'templates/pages/category.html', and 'templates/pages/brand.html'.
  3. Add a <script type="application/ld+json"> block in each template, using Handlebars expressions ({{product.name}}, {{urls.home}}, {{category.url}}) to populate the BreadcrumbList items dynamically.
  4. Alternatively, use a BigCommerce app from the App Marketplace (search 'SEO' or 'structured data') such as 'SEO Manager' or 'Schema App Structured Data' which handle BreadcrumbList injection automatically.
  5. After saving, test a live product and category URL in Google's Rich Results Test to confirm the schema renders correctly.
Missing schema faqpageModerate effort

Add FAQPage (and BreadcrumbList) JSON-LD structured data to pages that contain FAQ content so Google can display rich results directly in search.

On BigCommerce

  1. Go to Storefront › Script Manager (requires store owner or approved app access).
  2. Click 'Create a Script'. Set Location to 'Footer', Pages to 'Specific Pages' (select your FAQ or product page), and paste your <script type='application/ld+json'> FAQPage block into the Script Content field.
  3. For BreadcrumbList: repeat the process with your BreadcrumbList JSON-LD block, targeting the same or relevant pages.
  4. Alternatively, open Storefront › Themes › Advanced › Edit Theme Files. Locate the relevant template (e.g. templates/pages/page.html for custom pages or templates/pages/product.html) and paste the JSON-LD block near the closing </body> tag.
  5. Use Stencil CLI for local development if you prefer editing theme files offline before pushing.
  6. Validate with Google's Rich Results Test.
Missing schema howtoModerate effort

Add HowTo and BreadcrumbList structured data (JSON-LD) to pages that contain step-by-step instructions so Google can display them as rich results and answer-engine snippets.

On BigCommerce

  1. Go to Storefront › My Themes › Advanced › Edit Theme Files (Stencil theme).
  2. Open the relevant template file, typically templates/pages/custom/page/[your-page].html or templates/pages/blog-post.html for instructional content.
  3. Paste the <script type='application/ld+json'> block (HowTo + BreadcrumbList) anywhere within that template file before </body>.
  4. Alternatively, add a Custom Script via Storefront › Script Manager: set location to 'Footer', select the specific page(s), and paste the JSON-LD wrapped in a <script type='application/ld+json'> tag.
  5. Validate with Google's Rich Results Test.
Missing schema localbusinessQuick win

Add a LocalBusiness JSON-LD schema block to your store so search engines and AI assistants can surface your business name, address, phone number, and hours in rich results and answer boxes.

On BigCommerce

  1. Go to Storefront → My Themes → click Customize on your active theme → select 'Edit Theme Files' (Advanced mode).
  2. Open templates/layout/base.html (or the equivalent base layout file in your theme).
  3. Paste your <script type='application/ld+json'>…</script> block immediately before the closing </head> tag.
  4. Save and apply the theme, then validate with Google's Rich Results Test.
  5. Alternatively, use BigCommerce's Script Manager (Storefront → Script Manager → Create a Script) to inject the JSON-LD block on all pages without editing theme files directly.
Missing schema organizationQuick win

Add Organization schema markup to your store's homepage so search engines and AI systems can definitively identify your business, logo, and social profiles.

On BigCommerce

  1. From your BigCommerce Admin, go to Storefront → My Themes.
  2. Click 'Advanced' → 'Edit Theme Files' on your active theme.
  3. Open 'templates/layout/base.html' (or equivalent root layout file).
  4. Paste your <script type='application/ld+json'>…</script> block just before the closing </head> tag.
  5. Save the file and preview your homepage, then validate with Google's Rich Results Test.
Missing schema productModerate effort

Add Product schema (JSON-LD structured data) to every product page so search engines can display rich results like price, availability, and ratings directly in search listings.

On BigCommerce

  1. Go to Storefront → Themes → click Customize on your active theme → then Advanced → Edit Theme Files (or use the Stencil CLI for local editing).
  2. Open templates/pages/product.html (Stencil theme).
  3. Check whether your theme already outputs a JSON-LD block by searching for 'application/ld+json'. Cornerstone (BigCommerce's default theme v5+) includes basic Product schema by default — review and extend it if needed.
  4. To add or extend: paste a <script type='application/ld+json'> block using Handlebars variables — e.g. {{product.title}}, {{product.price.without_tax.value}}, and a conditional for availability based on {{product.stock_level}}.
  5. Save and publish, then validate a product URL with Google's Rich Results Test.
Missing schema webpageModerate effort

Add WebPage (and Organization) JSON-LD schema markup to every page so search engines and AI answer engines can confidently understand and describe your site's content.

On BigCommerce

  1. Go to Storefront → Script Manager (or legacy: Storefront → Footer Scripts).
  2. Create a new script, set Location to 'Head', Page to 'All Pages', and Script type to 'Script'.
  3. Paste your Organization JSON-LD <script type='application/ld+json'> block into the script body. Use BigCommerce Handlebars variables for dynamic WebPage values where available (e.g. {{page.title}}).
  4. For per-template WebPage schema, edit the relevant Stencil theme template files (e.g. templates/pages/home.html, templates/pages/page.html) via Stencil CLI or the built-in theme editor, and insert the JSON-LD block in the <head> partial.
  5. Validate using Google's Rich Results Test after publishing.
Non iso dateModerate effort

Change all datePublished (and dateModified) values in your structured data from informal formats like "09/23/2019 00:00:00" to the ISO-8601 format "2019-09-23" so search engines can correctly read your content's publication date.

On BigCommerce

  1. In your BigCommerce admin, go to Storefront → Script Manager and check for any custom JSON-LD scripts injected site-wide — update any date strings to YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ format there.
  2. Go to Storefront → Themes → click 'Edit Theme Files' (Advanced) on your active theme to open the Stencil theme editor.
  3. Search for 'datePublished' or 'dateModified' in template files (commonly in 'templates/pages/product.html', 'blog-post.html', or partials in 'templates/components/').
  4. BigCommerce Handlebars templates use helpers like {{format-date}} — replace any non-ISO date helper output with a correctly formatted ISO string: use {{date published format='YYYY-MM-DDTHH:mm:ssZ'}} if your theme/helper supports it, or hard-code a corrected helper.
  5. If your theme uses a third-party SEO app from the BigCommerce App Marketplace (e.g. SEO King, Yoast for BigCommerce), check that app's structured data output settings to ensure ISO dates.
  6. Validate a product and blog page in Google's Rich Results Test after changes.
Org missing sameasQuick win

Add a `sameAs` array to your Organization structured data, linking to your official social profiles, Wikipedia page, LinkedIn, and other authoritative directories so search engines can confidently identify your brand as a distinct entity.

On BigCommerce

  1. In BigCommerce admin, go to Storefront → Script Manager → Create a Script.
  2. Set Location to 'Head', Page to 'All Pages', Script type to 'Script'.
  3. Paste your Organization JSON-LD block (with `sameAs`) into the script body.
  4. Save, then test your homepage with Google's Rich Results Test.
Page unreachableModerate effort

Ensure every page that should appear in AI-powered answers and rich results is actually reachable by crawlers, then add structured data so search engines and AI systems can read and surface its content.

On BigCommerce

  1. In the BigCommerce control panel, go to Storefront → Web Pages (or Products / Categories) and confirm the page is set to visible/active.
  2. For broken URLs, go to Server Settings → 301 Redirects to create redirects from old broken paths to correct live pages.
  3. Check Storefront → robots.txt — BigCommerce allows editing robots.txt under Storefront → robots.txt in newer versions. Remove any Disallow rules blocking important pages.
  4. For structured data, BigCommerce themes (Cornerstone) include basic Product schema by default. To extend it or add FAQPage schema, edit the relevant Handlebars template files in Storefront → My Themes → Edit Theme Files (e.g., templates/pages/product.html) and add a JSON-LD script block.
  5. Alternatively, use a third-party SEO app from the BigCommerce App Marketplace (e.g., 'StoreSEO') to manage schema without code edits.
  6. Submit the fixed URL in Google Search Console and confirm with the Rich Results Test.

Accessibility (WCAG) · 63 fixes

Aria allowed attrModerate effort

Remove or replace any ARIA attributes that are not permitted on an element's assigned role so that assistive technologies can correctly interpret the element.

On BigCommerce

  1. In your BigCommerce Control Panel go to Storefront → My Themes → click Customize on your active theme → then Edit Theme Files (available on Developer-tier or via the Stencil CLI).
  2. In the Stencil CLI or the online file editor, search template files (`.html` Handlebars partials under `templates/components/` and `templates/pages/`) for the offending `aria-` attribute.
  3. Open the relevant partial, remove or correct the disallowed ARIA attribute, and save.
  4. If using Page Builder widgets, go to Storefront → Page Builder, select the widget containing the element, and inspect its HTML/Custom HTML block for the offending attribute.
  5. Push the updated theme (`stencil push`) or apply changes in the online editor, then re-test with axe DevTools.
Aria allowed roleModerate effort

Remove or replace the invalid `role="presentation"` (or other disallowed ARIA role) on HTML elements where that role is not permitted, so assistive technologies can correctly interpret your page.

On BigCommerce

  1. Go to Storefront → My Themes → click Customize on your active theme → select Edit Theme Files (or download the theme to edit locally).
  2. Search template files (Handlebars `.html` files in `/templates/`, partials in `/templates/components/`) for the offending role attribute.
  3. Edit the relevant template file to remove or correct the `role` attribute.
  4. Upload/save the modified theme and preview it before publishing.
  5. Verify with axe DevTools on the live or preview storefront.
Aria command nameModerate effort

Add a discernible, screen-reader-accessible name to every button, link, and menuitem that uses an ARIA command role so assistive technology can announce what it does.

On BigCommerce

  1. Go to Storefront → My Themes → click Customize on the active theme, or click Advanced → Edit Theme Files to access the raw Handlebars/HTML files.
  2. Find the template file containing the problematic element (e.g. templates/components/header/navigation.html or templates/components/cart/preview.html).
  3. Add `aria-label="Descriptive action"` to the element. For SVG icons embedded inline, add `aria-hidden="true"` to the `<svg>` tag and insert a visually-hidden `<span>` with the label text.
  4. Save and push changes, then use the BigCommerce Theme Preview and run axe DevTools to confirm the fix.
Aria dialog nameModerate effort

Add a descriptive accessible name to every dialog and alertdialog element using aria-label or aria-labelledby so screen-reader users know what the dialog is about.

On BigCommerce

  1. Go to Storefront → My Themes → click 'Advanced' → Edit Theme Files (Stencil themes).
  2. Locate the relevant Handlebars template — common files are templates/components/cart/preview.html (mini-cart), templates/components/common/modal.html, or a quick-search/product-quick-view partial.
  3. Find the element with role="dialog" (or the <dialog> tag) and add aria-labelledby="[id-of-heading]" or aria-label="[dialog purpose]".
  4. If you use Page Builder widgets or third-party scripts for popups, check the widget's HTML settings panel for an ARIA label field, or add a Script Manager snippet that patches the attribute on DOMContentLoaded.
  5. Save and push changes; test with a screen reader or the axe browser extension.
Aria hidden focusModerate effort

Remove `aria-hidden="true"` from any element that contains focusable children (links, buttons, inputs), or remove the focusable elements from inside the hidden container.

On BigCommerce

  1. In BigCommerce Admin, go to Storefront → My Themes → click Customize on your active theme → Advanced → Edit Theme Files.
  2. Search for `aria-hidden` in your Handlebars template files (`.html`) and associated JavaScript files — focus on `templates/components/`, `templates/layout/`, and `templates/pages/`.
  3. Identify any `aria-hidden="true"` on a container that wraps a link, button, or form control, then apply the relevant fix (remove attribute or restructure markup).
  4. If the issue is in a third-party widget or script injected via the Script Manager (Storefront → Script Manager), edit or remove that script.
  5. Preview changes in the theme editor, then publish and re-test with axe DevTools.
Aria input field nameModerate effort

Add a meaningful accessible name (label) to every ARIA input field so screen readers can identify and announce it to users.

On BigCommerce

  1. Go to Storefront → My Themes → click Customize on the active theme → select Edit Theme Files (Advanced) or use the Web DAV connection to download the theme files locally.
  2. Search the Handlebars (.html) template files for the ARIA role causing the violation — commonly found in templates/components/search/quick-search.html, templates/components/cart/, or templates/components/account/.
  3. Add a <label for="..."> element before the input, or add aria-label="..." directly to the <input> or element with the ARIA role.
  4. For Stencil CLI users: edit the file locally, run 'stencil start' to preview, verify with axe DevTools in the browser, then push via 'stencil push'.
  5. Upload the corrected theme via Storefront → My Themes → Upload Theme, then apply it.
Aria meter nameModerate effort

Add a descriptive accessible name (via aria-label, aria-labelledby, or a visible <label>) to every element that uses role="meter" so screen readers can announce what the meter represents.

On BigCommerce

  1. In BigCommerce Admin, go to Storefront → Themes → click 'Advanced' → 'Edit Theme Files' for your active Stencil theme.
  2. Search template files (templates/components/products/rating.html or similar) for `role="meter"` or `<meter`.
  3. Add `aria-label="Average customer rating"` (or a Handlebars variable like `aria-label="{{product.name}} rating"`) to the meter element.
  4. Commit your changes and push to your live theme, then verify with the axe browser extension.
Aria progressbar nameQuick win

Add a descriptive accessible name to every progress bar element so screen readers can announce what it represents.

On BigCommerce

  1. In your BigCommerce admin go to Storefront → My Themes → your active theme → Edit Theme Files (or download via Stencil CLI).
  2. Search template files (`.html` Handlebars partials under `templates/`) and JavaScript files (`assets/js/`) for `role="progressbar"` or `<progress`.
  3. Edit the relevant template or JS file to add `aria-label="…"` or `aria-labelledby` to the element. Stencil Handlebars partials support standard HTML attributes — just add them inline.
  4. If the progress bar is injected by a third-party script (e.g., a page-builder widget), add a JavaScript snippet via Storefront → Script Manager that targets the element and sets the attribute after page load.
  5. Push the changes via Stencil CLI (`stencil push`) or save in the theme editor, then verify using browser DevTools Accessibility tab.
Aria prohibited attrModerate effort

Remove or replace ARIA attributes that are explicitly prohibited on an element's assigned role, ensuring every ARIA attribute used is valid for its context.

On BigCommerce

  1. Go to Storefront → Themes → click Customize on your active theme → then use Advanced → Edit Theme Files (or download the theme via Theme Editor → Download).
  2. Search the downloaded theme's HTML/Handlebars templates (.html files in `/templates/`) for the prohibited attribute name.
  3. Edit the relevant template (common areas: `templates/components/header.html`, `templates/components/products/card.html`, `templates/layout/base.html`).
  4. Remove or correct the prohibited ARIA attribute, then upload the modified theme and apply it.
  5. If the violation comes from a BigCommerce widget or a third-party script injected via Script Manager (Storefront → Script Manager), update or remove the offending script.
  6. Verify with axe DevTools on your live store.
Aria required attrModerate effort

Add the required `aria-level` attribute (and any other missing required ARIA attributes) to every element that uses an ARIA role which mandates them.

On BigCommerce

  1. In your BigCommerce Admin, go to Storefront → My Themes → click Customize on the active theme, then select Edit Theme Files (requires Stencil CLI or the in-browser editor).
  2. Search Handlebars (.html) template files for `role=` — common locations are `templates/components/`, `templates/pages/`, and `templates/layout/`.
  3. Add the missing `aria-level` (or other required attribute) to the flagged element in the correct template file.
  4. If using Page Builder widgets that inject the markup, switch that widget to a custom HTML widget and add the correct attributes there.
  5. Push the updated theme and verify with axe DevTools in your browser.
Aria required childrenModerate effort

Ensure every ARIA parent role contains only its required, permitted child roles — and remove focusable elements (e.g. tabindex on img or a) that are not allowed inside that ARIA context.

On BigCommerce

  1. Go to Storefront → My Themes → (active theme) → Advanced → Edit Theme Files (Stencil CLI) or use the in-browser editor for Cornerstone-based themes.
  2. Search your templates/ and templates/components/ directories for role= attributes (common locations: header.html, navigation.html, product-listing.html, carousel.html).
  3. Correct the ARIA parent/child mismatch: add the required child role attribute or restructure to use native HTML elements (<ul>/<li> instead of <div role="list">/<div>).
  4. Remove any tabindex attributes from img or a elements that sit directly inside a restricted ARIA parent role.
  5. Bundle and push the updated theme using Stencil CLI (stencil push) or save via the in-browser editor, then verify with axe DevTools.
Aria required parentModerate effort

Wrap every ARIA child role (such as `tab`, `option`, `listitem`, `row`, etc.) in the correct required ARIA parent container role (such as `tablist`, `listbox`, `list`, `rowgroup`, or `grid`) so assistive technologies can correctly interpret the widget's structure.

On BigCommerce

  1. In your BigCommerce control panel, go to Storefront → My Themes → click 'Edit Theme Files' (Stencil CLI) or use 'Edit Theme' for the active theme.
  2. Locate the Handlebars template rendering the flagged widget — commonly under `templates/components/products/tabs.html` or a custom partial.
  3. Wrap the child role elements (e.g., elements with `role="tab"`) in a `<div role="tablist">` or appropriate container.
  4. If using Page Builder widgets, switch to the HTML block editor for that widget and add the container role manually.
  5. Push the updated theme via Stencil CLI (`stencil push`) or save in the control panel, then test with Chrome Accessibility Inspector.
Aria rolesModerate effort

Audit every element that has a `role` attribute and replace any invalid, misspelled, or non-existent ARIA role value with a valid WAI-ARIA role from the official specification.

On BigCommerce

  1. In your BigCommerce Admin, go to Storefront → My Themes → (active theme) → Advanced → Edit Theme Files (or download the theme for local editing).
  2. Search Handlebars template files (`.html` files inside `templates/`) for `role=` — key files include `layout/base.html`, `components/header.html`, `components/footer.html`, and product/category templates.
  3. Correct invalid role values in the relevant file, then upload the modified theme files via the theme editor or re-upload the theme zip.
  4. For issues in third-party widgets or scripts injected via Script Manager (Storefront → Script Manager), locate the script and edit or replace the offending code, or contact the vendor.
  5. Save, publish the theme, and verify with an accessibility audit tool.
Aria toggle field nameModerate effort

Give every toggle control (checkbox, switch, or ARIA toggle button) a descriptive accessible name so screen readers can announce what it does.

On BigCommerce

  1. In your BigCommerce control panel, go to Storefront → My Themes → click Customize on your active theme → click Advanced → Edit Theme Files.
  2. Find the Handlebars template containing the toggle (e.g. templates/components/form-fields/checkbox.html or the relevant page partial).
  3. Pair every <input type='checkbox'> with a <label for='...'> using matching id values, or add aria-label directly to a custom toggle button element.
  4. Save changes, then use the BigCommerce theme preview and an axe browser extension to verify the accessible name is present.
Aria tooltip nameModerate effort

Add a visible, descriptive text label to every element that has role="tooltip" so screen readers can announce its purpose.

On BigCommerce

  1. In your BigCommerce Admin, go to Storefront → My Themes → click Customize on your active theme → click Advanced → Edit Theme Files.
  2. Search template files (templates/components/ and templates/pages/) for 'role="tooltip"'.
  3. Open the relevant Handlebars (.html) file and add descriptive text content inside the tooltip element, or add an aria-label attribute: <span role="tooltip" aria-label="Compare products">Compare</span>.
  4. If tooltips are rendered by a widget or third-party script injected via Script Manager (Storefront → Script Manager), edit that script to include aria-label on all tooltip elements.
  5. Save and publish the theme, then verify with a screen reader or axe browser extension.
Aria valid attrModerate effort

Find every misspelled or non-existent ARIA attribute name in your HTML (e.g. `aria-labeledby` instead of `aria-labelledby`) and correct each one to a valid ARIA attribute name.

On BigCommerce

  1. Go to Storefront → My Themes → (your active theme) → Advanced → Edit Theme Files.
  2. Use the editor's search functionality to look for `aria-labeledby` (or the flagged attribute) across your `.html`, `.handlebars`, and `.js` template files.
  3. Correct the misspelling in each affected file and save.
  4. If the error is in a third-party widget installed via the Marketplace, check for an updated version of that widget or contact the vendor.
  5. Preview your storefront and re-run axe DevTools to confirm the error is cleared.
Aria valid attr valueModerate effort

Audit every ARIA attribute on your pages and correct any that point to a non-existent element ID, use a disallowed value, or reference an empty/misspelled target so that assistive technologies can correctly interpret your page.

On BigCommerce

  1. Go to Storefront → My Themes → click Customize on your active theme, or download the theme ZIP via Theme Editor → Advanced → Download.
  2. Unzip and search all .html template files (especially templates/components/ and templates/pages/) for ARIA attributes using a code editor.
  3. Fix ID-reference mismatches and invalid keyword values, then re-upload or push the corrected theme.
  4. For widgets added via Page Builder, go to Content → Page Builder, select the widget, and look for ARIA/accessibility settings in the widget's configuration panel.
  5. Rerun an axe DevTools or Lighthouse audit on the live storefront after publishing to verify the fix.
Autocomplete validModerate effort

Add a valid, correctly matched `autocomplete` attribute to every personal-data form field so browsers and assistive technologies can autofill them reliably.

On BigCommerce

  1. Go to Storefront → My Themes → your active theme → Edit Theme Files (or download the theme and edit locally).
  2. Locate the relevant template files: templates/components/account/address-fields.html, templates/pages/auth/login.html, templates/pages/account/add-address.html, or the checkout templates.
  3. For the BigCommerce Optimized One-Page Checkout (which is served from a separate hosted domain), contact BigCommerce support or use a Checkout SDK custom implementation to add autocomplete attributes.
  4. For non-hosted forms, find each <input> tag and add the correct autocomplete token (e.g., autocomplete='email').
  5. Upload/save the modified theme and preview to verify autofill works correctly.
Avoid inline spacingModerate effort

Remove hard-coded text-spacing CSS properties from inline `style` attributes so users can override them with their own stylesheets.

On BigCommerce

  1. Go to Storefront → My Themes → Advanced → Edit Theme Files (Stencil CLI is recommended for larger edits).
  2. Search `.html` template files and Handlebars partials for `style=` attributes with spacing properties on text elements.
  3. Move the value into your theme's `assets/scss/` or `assets/css/` directory under an appropriate class rule.
  4. Replace the inline `style` on the HTML element with the new class name.
  5. For spacing set via Theme Editor (Storefront → My Themes → Customize), check Typography settings — if the editor is injecting inline styles, reset those fields to their defaults so the theme's stylesheet governs spacing instead.
  6. Re-upload or push the updated theme and verify with axe.
Button nameModerate effort

Add a visible or programmatically accessible name to every button so screen readers can announce what it does.

On BigCommerce

  1. In BigCommerce Admin go to Storefront → My Themes → click Customize on your active theme → click Advanced → Edit Theme Files (opens the Stencil file editor).
  2. Locate the template containing the button — typical paths: templates/components/cart/preview.html, templates/components/common/header.html, or templates/components/product/add-to-cart.html.
  3. Add aria-label="Descriptive name" to the <button> element, or add a <span class="u-hidden-visually">Descriptive name</span> inside it (BigCommerce Cornerstone theme ships this utility class).
  4. Save and publish, then verify with axe DevTools in your browser.
Color contrastModerate effort

Increase the contrast ratio between your text color and its background color to at least 4.5:1 so all users — including those with low vision — can read your content.

On BigCommerce

  1. Go to Storefront → Themes → click Customize on your active theme to open Page Builder.
  2. In Theme Styles (gear icon) look for Typography or Colors sections. Adjust the relevant color swatch (e.g. link color, button text) to a shade with ≥ 4.5:1 contrast.
  3. If the color isn't in Theme Styles, click Advanced → Edit Theme Files, navigate to assets/scss/settings/ or assets/scss/theme.scss, find the failing color variable (e.g. $color-primary), and change it to a darker passing value.
  4. Save and publish, then re-run an accessibility audit to confirm.
Definition listModerate effort

Fix all `<dl>` (definition list) elements so they contain only valid `<dt>` and `<dd>` child elements, in the correct order, with no stray tags or text directly inside the list wrapper.

On BigCommerce

  1. Go to Storefront → Themes → click Customize on your active theme, then exit the visual editor and use Edit Theme Files (or download the theme via Channel Manager → Themes → Download).
  2. Search the Handlebars (.html) and partial template files for '<dl'. Common files: 'templates/components/products/product-view.html' and custom partials for specs or FAQs.
  3. Correct the `<dl>` markup so only `<dt>`, `<dd>`, or wrapping `<div>`s are direct children.
  4. Re-upload the corrected theme files or push via the Stencil CLI ('stencil push'), then verify on a staging channel before publishing to production.
  5. If content is entered in the Page Builder (via HTML widget), open the widget, edit the raw HTML, and fix the list structure there.
DlitemQuick win

Wrap every `<dt>` (term) and `<dd>` (description) element inside a parent `<dl>` element so screen readers can correctly announce the list structure.

On BigCommerce

  1. In your BigCommerce admin, go to Storefront → My Themes → click Customize on your active theme → click Edit Theme Files (or download the theme to edit locally).
  2. Search for `<dt` or `<dd` in your Handlebars template files. Common locations are `templates/components/products/product-view.html` or `templates/components/products/options/`.
  3. Locate any `<dt>` or `<dd>` whose parent element is not `<dl>` and change the parent wrapper to `<dl>`, updating both opening and closing tags.
  4. Upload or save the edited file, publish the theme, then validate on a product page using the axe DevTools browser extension.
Document titleQuick win

Add a unique, descriptive <title> element to every page so browsers, screen readers, and search engines can identify it.

On BigCommerce

  1. For the homepage: Storefront → My Theme → Edit Theme Files is NOT needed — go to Store Setup → Store Profile → 'Meta Title' for site-level defaults, or Marketing → SEO for global settings.
  2. For product pages: Catalog → Products → [select product] → 'SEO' tab → 'Page Title' field.
  3. For category pages: Catalog → Categories → [select category] → 'SEO' tab → 'Page Title' field.
  4. For standard web pages: Storefront → Web Pages → [select page] → 'SEO' tab → 'Page Title' field.
  5. For global title tag template defaults: Storefront → My Theme → Edit Theme Files → open templates/layout/base.html and ensure the <title> block uses {{head.title}} — do not override with a static string.
  6. Use the BigCommerce bulk import/export (Catalog → Import / Export) to update page titles across many products at once via CSV.
Empty headingModerate effort

Find every empty heading tag on your store and add meaningful, visible text to it — or remove the tag entirely if it serves no structural purpose.

On BigCommerce

  1. Go to Storefront → My Themes → Advanced → Edit Theme Files to access your Stencil theme source.
  2. Search your Handlebars templates (e.g. templates/pages/product.html, templates/components/) for `<h1>`–`<h6>` tags that may output an empty string when a variable is undefined (e.g. `<h2>{{product.brand}}</h2>` where brand may be blank).
  3. Add a Handlebars conditional guard: `{{#if product.brand}}<h2>{{product.brand}}</h2>{{/if}}` so the heading is only rendered when it has content.
  4. For pages edited in the Page Builder (Storefront → Page Builder), locate Heading widgets with no text in the Content field, add text or delete the widget, then Publish.
  5. Use the axe DevTools browser extension on your live store to confirm the fix.
Empty table headerModerate effort

Add descriptive text to every table header cell (`<th>`) so that screen readers can announce what each column or row represents.

On BigCommerce

  1. In your BigCommerce control panel, go to Storefront → My Themes → click 'Edit Theme' (Advanced) to open the Stencil theme editor, or download the theme for local editing.
  2. Tables commonly appear in `templates/components/products/description.html`, comparison pages, or custom widgets. Use your editor's search to find empty `<th>` tags.
  3. Add the missing text label or `aria-label` to each empty `<th scope='col'>` and save/upload the theme.
  4. For Page Builder content: go to Content → Web Pages, open the relevant page, switch to HTML source in the editor, and fix `<th>` elements there.
  5. Use BigCommerce's built-in 'Accessibility' settings (Storefront → Accessibility) as a starting point, then re-test with the WAVE extension.
Frame titleQuick win

Add a descriptive `title` attribute to every `<iframe>` element on your store so screen readers can identify the frame's content.

On BigCommerce

  1. Go to Storefront → My Themes → click 'Advanced' → 'Edit Theme Files' on your active theme.
  2. Search the template files (templates/pages/, templates/components/) for `<iframe>` tags using the file search.
  3. Open the relevant file (e.g. templates/components/products/video.html or a custom widget template) and add `title="Your descriptive label"` to the iframe tag, then save.
  4. For iframes inside Page Builder widgets: go to Storefront → My Themes → Customize → open the page in Page Builder → click the HTML widget or Custom HTML block containing the iframe → edit the raw HTML to add the title attribute.
  5. For third-party app iframes, check the app's configuration in Apps → My Apps → the specific app settings for an accessibility or title field.
  6. Preview the storefront and confirm the attribute is present with browser DevTools.
Heading orderModerate effort

Fix heading tags so they follow a logical, sequential order (H1 → H2 → H3…) without skipping levels anywhere on the page.

On BigCommerce

  1. Go to Storefront → My Themes → click Customize on your active theme, or click Advanced → Edit Theme Files.
  2. Open the relevant Handlebars template (e.g., templates/pages/product.html, templates/pages/home.html) and correct any heading tags that skip levels.
  3. For content widgets placed via Page Builder (Storefront → Page Builder), click into each Text or HTML widget that contains headings, switch to the HTML source view, and correct the heading tags.
  4. For static web pages, go to Storefront → Web Pages, edit the page, switch the rich-text editor to HTML source view, and fix heading levels there.
  5. Republish/save changes and run the axe DevTools extension on the live page to confirm the fix.
Html has langQuick win

Add a valid `lang` attribute to the `<html>` element so browsers and assistive technologies know what language your page is written in.

On BigCommerce

  1. In your BigCommerce admin, go to Storefront → My Themes.
  2. Next to your active theme click Advanced → Edit Theme Files (or download the theme to edit locally).
  3. Open `templates/layout/base.html` (Cornerstone theme) — this is the root layout containing the `<html>` tag.
  4. BigCommerce's Cornerstone theme uses Handlebars: the tag should read `<html lang="{{locale_name}}">`. If the `lang` attribute is absent or hard-coded, add the Handlebars variable: `<html lang="{{locale_name}}">` to make it dynamic.
  5. Save and upload (or push via Stencil CLI), then verify via View Source.
  6. The active storefront language is configured under Settings → Store Profile → Default Language.
Html lang validQuick win

Set a valid BCP 47 language code on the `lang` attribute of your page's `<html>` element (e.g., `lang="en"`) so browsers, screen readers, and search engines correctly identify the page language.

On BigCommerce

  1. In your BigCommerce Admin, go to Storefront → My Themes → click Customize on your active theme → click Edit Theme Files (Advanced).
  2. Open `templates/layout/base.html` (the exact name may vary by theme, e.g. Cornerstone uses `templates/layout/base.html`).
  3. Find the `<html` tag. It should read `<html lang="{{locale_name}}">` to use BigCommerce's built-in locale variable. If it's missing or has a hard-coded/invalid value, update it to use that Handlebars variable.
  4. Save and publish. View page source to confirm the rendered `lang` attribute is a valid BCP 47 code.
Image altModerate effort

Add a descriptive `alt` attribute to every `<img>` element on your store so screen readers and search engines can understand what each image shows.

On BigCommerce

  1. **Product images:** Admin → Products → View → select a product → scroll to the Images & Videos section → hover over an image and click the pencil/edit icon → fill in the 'Image Alt Text' field → Save.
  2. **Theme / storefront images (banners, homepage content):** Admin → Storefront → My Themes → Customize → select the relevant widget or section → look for the 'Alt Text' input field.
  3. **Page Builder widgets:** Admin → Storefront → Page Builder → click an Image widget → enter alt text in the 'Alt Text' field in the widget sidebar.
  4. **Bulk product image alt text:** Use the BigCommerce Product Import CSV — the column `image_description` maps to the main product image alt text. Export, fill in missing values, and re-import.
  5. **Hardcoded theme files:** Admin → Storefront → My Themes → Advanced → Edit Theme Files → open the relevant Handlebars (`.html`) template and add `alt` attributes to `<img>` tags.
Image redundant altModerate effort

Remove or empty the alt attribute on images whose caption or surrounding text already describes them, so screen readers don't announce the same information twice.

On BigCommerce

  1. For product images: go to Admin → Catalog → Products → select the product → Images & Videos tab → click the image thumbnail → clear the 'Alt Text' field → Save.
  2. For banner/carousel images in Page Builder: go to Storefront → My Themes → Customize → click the banner or image widget → find the 'Alt Text' field in the widget panel and clear it.
  3. For images added via the WYSIWYG editor on a page or blog post: click the image in the editor → click the image properties/edit icon → clear the 'Image Description (Alt Text)' field → OK → Save.
  4. For theme template images: go to Storefront → My Themes → Advanced → Edit Theme Files → locate the relevant .html or .handlebars file → find the <img> tag and set alt="".
Input button nameQuick win

Add a descriptive label to every input button so screen readers can announce what the button does.

On BigCommerce

  1. In your BigCommerce admin, go to Storefront → My Themes → click Customize on the active theme → then Edit Theme Files (or use the Stencil CLI locally).
  2. Search template files (`.html` files in `templates/components/` and `templates/pages/`) for `<input type="submit"` or `<input type="button"` with an empty or missing `value`.
  3. Update the `value` attribute to a meaningful label, using Stencil's translation keys where available (e.g., `value="{{lang 'cart.checkout'}}"`), then save.
  4. Publish the theme update and verify with Chrome DevTools Accessibility panel or a screen reader.
LabelModerate effort

Add a visible or programmatic label to every form input so assistive technologies can identify its purpose.

On BigCommerce

  1. Go to Storefront → My Themes → click 'Advanced' → 'Edit Theme Files' on your active theme.
  2. Locate the relevant Handlebars template (e.g., templates/components/forms/, templates/pages/contact-us.html, templates/pages/auth/login.html).
  3. Add a <label for="INPUT_ID"> element linked to each unlabeled <input> or <textarea>, ensuring the input has a matching id.
  4. For the native search bar in the header, edit templates/components/header.html and add aria-label="Search" to the search input if a visible label is not shown.
  5. Save changes and use the axe DevTools browser extension to verify on the live or preview storefront.
Label title onlyModerate effort

Add a visible, persistent label to every form field so it is never labeled only by a tooltip (title) or hidden description (aria-describedby).

On BigCommerce

  1. In your BigCommerce admin, go to Storefront → My Themes → click 'Advanced' → 'Edit Theme Files' on your active theme.
  2. Navigate to the relevant template file — common locations are `templates/components/common/header.html` (search), `templates/pages/auth/login.html` (login form), `templates/pages/checkout` (checkout fields), and `templates/components/newsletter` (newsletter).
  3. Find the `<input>` element using only a `title` attribute. Add a `<label for="FIELD_ID">Visible Label</label>` before the input and add `id="FIELD_ID"` to the input element. For design-constrained fields, add `aria-label="Description"` directly on the `<input>` and remove any standalone `title` labeling.
  4. Save and preview changes. Use the BigCommerce Stencil CLI for local development and testing before pushing to production.
Landmark banner is top levelModerate effort

Ensure your site's banner landmark (<header> or role="banner") sits at the top level of the page, not nested inside another landmark region.

On BigCommerce

  1. In your BigCommerce control panel, go to Storefront → My Themes → click Customize on your active theme, then open the Theme Editor; for code edits go to Storefront → My Themes → Advanced → Edit Theme Files.
  2. Open `templates/layout/base.html` (Cornerstone-based themes) — this is the master template that wraps all pages.
  3. Locate the `<header>` element (usually contains `id="header"` or similar). Confirm it is a direct child of `<body>`, not wrapped inside a `<main>` or other landmark element.
  4. If it is nested inside a landmark, move it to be a sibling of `<main>` at the top level under `<body>`.
  5. Save, push changes, and test with axe DevTools or the WAVE browser extension on a storefront page.
Landmark complementary is top levelModerate effort

Move any `<aside>` element (or element with `role="complementary"`) so it is a direct child of `<body>`, not nested inside another landmark region like `<main>`, `<header>`, `<footer>`, or `<nav>`.

On BigCommerce

  1. In your BigCommerce admin, go to Storefront → My Themes → Advanced → Edit Theme Files (Stencil CLI or in-browser editor).
  2. Open the relevant Handlebars template — typically `templates/pages/product.html`, `templates/pages/category.html`, or a partial in `templates/components/` — where the `<aside>` is defined.
  3. Locate the `<aside>` and check its parent elements. If it is nested inside `{{> components/common/main}}` or a `<main>` element, extract it and place it as a sibling of `<main>` in the page template.
  4. Adjust the Stencil theme's SCSS (in `assets/scss/`) to keep the visual column layout using flexbox or grid on the outer wrapper.
  5. Bundle and push the updated theme (`stencil push`) or save via the in-browser editor, then re-test accessibility.
Landmark contentinfo is top levelModerate effort

Move your footer element (or any element with role="contentinfo") to the top level of the page so it is not nested inside another landmark region.

On BigCommerce

  1. In your BigCommerce admin, go to Storefront → My Themes → click 'Advanced' → 'Edit Theme Files' on your active theme (Stencil-based themes).
  2. Navigate to `templates/layout/base.html` — this is the master layout wrapping all pages.
  3. Locate the `{{> components/common/footer}}` include (or the `<footer>` block directly). Confirm it appears after the closing `</main>` tag and is NOT inside any other landmark element.
  4. If it is nested inside a `<main>` or landmark `<div>`, move the footer include to appear after `</main>` at the top level.
  5. Save and push the theme. Use axe DevTools to validate.
  6. If you cannot access theme files directly (hosted theme), contact your theme developer or use BigCommerce's 'Download' theme option to edit locally and re-upload.
Landmark main is top levelModerate effort

Move the `<main>` element (or `role="main"`) so it is a direct child of `<body>` and not nested inside any other landmark element such as `<header>`, `<nav>`, `<aside>`, or `<footer>`.

On BigCommerce

  1. In BigCommerce Admin, go to Storefront → My Themes → your active theme → Advanced → Edit Theme Files (or use Stencil CLI locally for safer editing).
  2. Open `templates/layout/base.html` — this is the global page shell.
  3. Search for `<main` or `role="main"`. Verify it is not nested inside a `<header>`, `<nav>`, or `<aside>` landmark in this file.
  4. Adjust the HTML structure so `<main>` (or the element with `role="main"`) is a direct child of `<body>`, sitting as a sibling to `<header>` and `<footer>`.
  5. Save and push the theme, then test with axe DevTools or WAVE on a live store page.
Landmark no duplicate bannerModerate effort

Ensure your page has only one banner landmark (a single `<header>` element or `role="banner"`) so assistive technologies can navigate your site correctly.

On BigCommerce

  1. Go to Storefront → My Themes → click 'Advanced' → Edit Theme Files (or download the theme to edit locally).
  2. Open 'templates/layout/base.html' and any partial templates in 'templates/components/'. Search for '<header' and 'role="banner"'.
  3. Keep only one top-level <header> (or role="banner"`) for the site header. Change all others to <div> or wrap them inside a sectioning element.
  4. Check 'templates/components/header.html' specifically — this is the canonical site header file in most Stencil themes.
  5. Any secondary headers added via Page Builder widgets should be inspected; use Page Builder → drag-and-drop editing to remove or reassign HTML wrapper tags where the widget allows it.
  6. Publish changes and validate with the axe browser extension.
Landmark no duplicate contentinfoModerate effort

Remove duplicate `<footer>` elements or `role="contentinfo"` landmarks so your page has exactly one, site-wide footer region.

On BigCommerce

  1. Go to Storefront → My Themes → click 'Advanced' → 'Edit Theme Files' on your active theme (or download the theme to edit locally).
  2. Open 'templates/layout/base.html' — search for `<footer` and `role="contentinfo"`. Your global footer should be declared here exactly once.
  3. Also check 'templates/components/common/footer.html' — ensure it is referenced once in base.html and does not itself contain a wrapping `<footer>` tag if base.html already provides one.
  4. Search all partial/component files under 'templates/components/' for any additional `<footer>` or `role="contentinfo"` occurrences and remove or change them to `<div>` elements.
  5. If a third-party script or widget injected via the Script Manager (Storefront → Script Manager) adds a `<footer>`, edit that script's output or contact the vendor.
  6. Save and publish, then verify with the axe DevTools extension in your browser.
Landmark no duplicate mainModerate effort

Ensure each page contains exactly one `<main>` landmark element (or one element with `role="main"`) so screen-reader users can navigate directly to the page's primary content.

On BigCommerce

  1. Go to Storefront › My Themes › (active theme) › Advanced › Edit Theme Files.
  2. Open 'templates/layout/base.html' (Cornerstone theme) and search for '<main' and 'role="main"'. Ensure only one exists.
  3. Check page-specific templates in 'templates/pages/' (e.g. 'product.html', 'category.html') for any additional '<main>' tags and replace them with '<section>' or '<div>'.
  4. If a widget placed in Page Builder (Storefront › Page Builder) is injecting extra markup, open that widget's HTML and remove or change any '<main>' tag.
  5. Preview the storefront page and verify with browser DevTools (Accessibility panel) or the WAVE extension.
Landmark one mainQuick win

Add a single `<main>` landmark element (or `role="main"`) to every page so that screen-reader users and assistive technologies can skip directly to the primary content.

On BigCommerce

  1. Go to Storefront → Themes → Advanced → Edit Theme Files (Stencil CLI is preferred for version control).
  2. Open `templates/layout/base.html` — this is the master layout.
  3. Find the main content wrapper (usually `<div id="main-content">` or a `{{{snippet.page_wrapper}}}`); change it to `<main id="main-content" role="main">` … `</main>`.
  4. Add a skip link immediately after the opening `<body>` tag: `<a href="#main-content" class="skip-nav">Skip to main content</a>`.
  5. Push changes via Stencil CLI (`stencil push`) or save in the theme editor, then validate with the axe DevTools Chrome extension on your live storefront.
Landmark uniqueModerate effort

Add a unique aria-label (or aria-labelledby) to every repeated landmark role so assistive technologies can distinguish between them.

On BigCommerce

  1. In your BigCommerce admin, go to Storefront → My Themes → click Customize on your active theme → click Advanced → Edit Theme Files (or download the theme via Theme Editor → Download).
  2. Open templates/layout/base.html and templates/components/common/header.hbs, navigation.hbs, and footer.hbs.
  3. Find each <nav> element and add unique aria-label attributes (e.g. aria-label="Primary navigation", aria-label="Footer navigation").
  4. For breadcrumb landmarks, check templates/components/common/breadcrumbs.hbs and add aria-label="Breadcrumbs" to its wrapping <nav>.
  5. Upload the modified files back via the Theme Editor, publish the theme, and re-run your accessibility audit to confirm.
Link in text blockModerate effort

Make inline links visually distinguishable from surrounding body text by ensuring at least 3:1 color contrast between the link color and the non-link text color, or by adding a non-color visual cue (such as underline) to every link.

On BigCommerce

  1. Go to Storefront → My Themes → (active theme) → Advanced → Edit Theme Files.
  2. Open `assets/scss/settings/foundation/base/_settings.scss` or the equivalent base variables file and locate `$anchor-color` and `$anchor-text-decoration`.
  3. Set `$anchor-color` to a value with ≥3:1 contrast against your body text, and/or set `$anchor-text-decoration: underline`.
  4. If your theme uses a Cornerstone-based Page Builder, also check Storefront → Style Editor for a 'Link Color' picker and update it there.
  5. Download a local copy as backup, save changes, and preview on a product description page or blog post before publishing.
Link nameModerate effort

Add a descriptive, screen-reader-accessible label to every link on your store so assistive technologies can announce where each link leads.

On BigCommerce

  1. Go to Storefront → My Themes → (active theme) → Advanced → Edit Theme Files.
  2. Locate the template containing the unnamed link — typical files: templates/components/common/navigation.html for nav icons, templates/components/products/card.html for product cards, templates/layout/base.html for header/footer links.
  3. Add aria-label to icon-only <a> tags or add alt text to linked <img> tags directly in those Handlebars (.html) template files.
  4. For social share icons, check templates/components/common/share.html.
  5. Click Save & Apply and re-test with the axe DevTools extension.
ListModerate effort

Fix all HTML list elements so that `<ul>` and `<ol>` contain only valid `<li>` children, and `<li>` elements appear only inside a proper list container, ensuring correct semantic list structure throughout your store.

On BigCommerce

  1. Go to BigCommerce Admin → Storefront → My Themes → your active theme → Advanced → Edit Theme Files.
  2. Navigation markup is usually in 'templates/components/header/navigation.html' or a similar component file; product details are in 'templates/pages/product.html'.
  3. Search for '<ul', '<ol', or '<li' and correct any invalid nesting: all direct children of <ul>/<ol> must be <li>, and all <li> must have a <ul>/<ol> parent.
  4. If you use Page Builder widgets, switch to the HTML view of the widget and fix the markup inline.
  5. Publish the theme changes, then use axe DevTools or WAVE on the live page to confirm the list rule passes.
ListitemQuick win

Wrap every `<li>` element in a proper `<ul>` or `<ol>` parent so screen readers and browsers can correctly identify and announce list structure.

On BigCommerce

  1. Go to Storefront → Themes → click Customize on your active theme, then Advanced → Edit Theme Files (opens the Stencil theme editor), or download the theme via Theme Editor → Download.
  2. Search your template files (typically in 'templates/components/' and 'templates/layout/') for `<li>` tags missing a `<ul>` or `<ol>` parent.
  3. Open the relevant '.html' template file (e.g. 'templates/components/header.html', 'templates/components/footer.html') and wrap orphaned `<li>` elements with `<ul>…</ul>`.
  4. If using Page Builder widgets, go to Storefront → Pages, open the affected page, click Edit, find the HTML widget with the issue, and update the markup.
  5. Upload or save the corrected theme file and preview before publishing.
  6. Verify the fix with the axe browser extension.
Meta refreshQuick win

Remove or disable any `<meta http-equiv="refresh">` tag that automatically redirects or reloads the page in under 20 hours.

On BigCommerce

  1. In your BigCommerce Control Panel, go to Storefront → My Themes → click Customize on your active theme → click 'Edit Theme Files' (Advanced).
  2. Open 'templates/layout/base.html' (the global wrapper) and search for 'http-equiv' or 'refresh'.
  3. Delete the `<meta http-equiv="refresh" ...>` line, then save.
  4. Also check 'templates/pages/' subdirectories for page-level templates that may contain the tag.
  5. If an injected script or third-party app is responsible, go to Storefront → Script Manager and look for scripts that add a meta-refresh; delete or edit those scripts.
  6. For URL redirects, use Storefront → 301 Redirects (native BigCommerce feature) instead of meta-refresh.
Meta viewportQuick win

Remove `user-scalable=no` (and any `maximum-scale` value below 5) from your site's `<meta name="viewport">` tag so visitors can pinch-to-zoom on mobile devices.

On BigCommerce

  1. In your BigCommerce admin, go to Storefront → My Themes.
  2. Click Advanced → Edit Theme Files on your active theme.
  3. Open `templates/layout/base.html` (Cornerstone theme) or the equivalent base layout file.
  4. Search for `meta name="viewport"` and remove `user-scalable=no` / correct `maximum-scale`.
  5. Save the file and preview on a mobile device.
Meta viewport largeQuick win

Remove or raise the `maximum-scale` value in your site's `<meta name="viewport">` tag so mobile users can pinch-to-zoom freely.

On BigCommerce

  1. In your BigCommerce admin, go to Storefront → My Themes.
  2. Click Advanced → Edit Theme Files on your active theme (or Download the theme, edit locally, then re-upload).
  3. Open templates/layout/base.html (Cornerstone theme) or the equivalent base layout file for your theme.
  4. Search for `<meta name="viewport"` and correct the content attribute.
  5. Save / upload and preview on mobile to confirm zoom works.
Nested interactiveModerate effort

Remove or restructure focusable elements nested inside interactive controls so that no interactive element contains another focusable child.

On BigCommerce

  1. In your BigCommerce Admin go to Storefront → My Themes → (active theme) → Advanced → Edit Theme Files.
  2. Product cards are in templates/components/products/card.html (Cornerstone theme). Open that file.
  3. Search for a wrapping <a> or <button> that encloses another interactive element.
  4. Apply the sibling restructure: change the outer wrapper to a <div>, keep the product title as its own <a>, and ensure the quick-add or wishlist buttons are siblings, not children of the title link.
  5. Save and preview. Use the Stencil CLI locally for faster iteration if you have developer access.
  6. Test keyboard tab order on the category/product listing pages.
Object altQuick win

Add a descriptive text alternative to every `<object>` element so screen readers can convey its content to users who cannot see it.

On BigCommerce

  1. In your BigCommerce admin, go to Storefront → My Themes → click 'Advanced' → 'Edit Theme Files' on your active theme.
  2. Locate the relevant Handlebars template (e.g. `templates/pages/product.html` or a partial in `templates/components/`).
  3. Find the `<object>` tag and add `aria-label="Descriptive text here"` to it, and/or add descriptive fallback content between the tags.
  4. If the object is placed via a content page (Web Pages → Edit), click the HTML source button (`<>`) in the rich text editor and edit the tag directly.
  5. Save the file and preview the page; verify with the axe DevTools browser extension.
Page has heading oneModerate effort

Add a single, descriptive `<h1>` heading to every page so screen readers and search engines can identify the page's main topic.

On BigCommerce

  1. Go to Storefront → Themes → click 'Advanced' → Edit Theme Files (Stencil theme editor).
  2. For **product pages**, open `templates/pages/product.html` — find the product name output (usually `{{product.title}}`) and ensure it is wrapped in `<h1>…</h1>`.
  3. For **category pages**, open `templates/pages/category.html` and wrap `{{category.name}}` in `<h1>…</h1>`.
  4. For **custom pages**, open the relevant page template or go to Storefront → Web Pages → edit the page in the HTML editor and add `<h1>Page Title</h1>` as the first heading.
  5. Commit the changes and preview the storefront, then verify with browser DevTools.
Presentation role conflictModerate effort

Remove conflicting ARIA attributes and tabindex from elements that are marked as presentational (role="presentation" or role="none"), so screen readers consistently ignore them.

On BigCommerce

  1. In your BigCommerce admin, go to Storefront → My Themes → click Customize on your active theme → then Edit Theme Files (or download the theme ZIP and edit locally).
  2. Search all Handlebars (.html) and JS template files for 'role="presentation"' and 'role="none"'.
  3. For each match, inspect the element for co-occurring aria-* attributes or tabindex.
  4. Remove the conflicting attribute following the decision logic in the generic steps, then save or re-upload the theme.
  5. Preview the storefront and run an axe DevTools scan on the relevant page to confirm the conflict is resolved.
  6. If the element comes from a third-party widget script, contact the widget vendor.
RegionModerate effort

Wrap all visible page content inside HTML landmark elements (such as `<main>`, `<nav>`, `<header>`, `<footer>`, or ARIA `role` attributes) so screen-reader users can navigate your store efficiently.

On BigCommerce

  1. In BigCommerce Admin go to Storefront → My Themes → click Customize on your active theme → then Edit Theme Files (Advanced).
  2. Open `templates/layout/base.html` — this is the master layout. Verify the header markup uses `<header role="banner">`, the main nav uses `<nav aria-label="Main navigation">`, and the page body region uses `<main id="content" role="main">`.
  3. Open `templates/layout/footer.html` (or the footer partial) and confirm it uses `<footer role="contentinfo">`.
  4. Check partial templates in `templates/components/` for promotional or utility blocks (e.g. banners, breadcrumbs). Ensure they render inside the relevant landmark in `base.html`, not in a raw `<div>` outside it.
  5. If a component must stay as a `<div>`, add `role="region"` and `aria-label="[Description]"` to its outermost element in the component's Handlebars file.
  6. Save, then preview the theme and run axe DevTools to confirm the fix.
Role img altQuick win

Add an accessible text label (aria-label) to every element that has role="img" so screen readers can announce what the image conveys.

On BigCommerce

  1. Go to Storefront → My Themes → click Customize on your active theme → click Advanced → Edit Theme Files (or use the Stencil CLI locally).
  2. Search theme template files (templates/components/, templates/pages/) for role="img" using your editor's Find in Files feature.
  3. Open the relevant .html Handlebars template and add aria-label="[descriptive text]" to each flagged element.
  4. For SVG icons in the cornerstone theme, check templates/components/icons/ — each SVG partial should have role="img" and aria-label, or aria-hidden="true" if decorative.
  5. Commit and push changes via Stencil CLI (stencil push) or save directly in the theme editor, then publish.
  6. Verify with axe DevTools on your live storefront.
Scrollable region focusableQuick win

Make every scrollable region on your store reachable and operable by keyboard by adding tabindex="0" (or placing focusable content inside it) so users who cannot use a mouse can scroll it.

On BigCommerce

  1. In the BigCommerce Control Panel, go to Storefront → My Themes → (active theme) → Advanced → Edit Theme Files.
  2. Locate the Handlebars template for the scrollable region — typically templates/components/products/description.html or a custom partial.
  3. Add tabindex="0" and aria-label="Product description" to the container element in that template.
  4. Open assets/scss/ (or assets/css/) and add a :focus outline rule for the container class.
  5. Click Save & Apply, then use the Preview tool and keyboard Tab to confirm focus lands on the element.
Select nameModerate effort

Add a descriptive, programmatically associated label to every `<select>` dropdown element on the site so assistive technologies can announce its purpose to users.

On BigCommerce

  1. Go to Storefront → My Themes → click Customize on your active theme → click Advanced → Edit Theme Files (or use the Stencil CLI for local development).
  2. Search the Handlebars templates for bare <select> tags. Likely files: 'templates/components/products/product-view.html' (variant pickers), 'templates/components/faceted-search/facets.html' (filter dropdowns), 'templates/components/cart/item-options.html'.
  3. Add a <label for="MATCHING-ID">Descriptive text</label> before each <select>, or add aria-label="..." directly on the <select> if a visible label would break the layout.
  4. Save changes, publish the theme update, and test with the axe DevTools extension.
Skip linkQuick win

Add a valid, matching target ID to every skip-navigation link so keyboard and assistive-technology users can bypass repeated header content and jump directly to the main content area.

On BigCommerce

  1. In BigCommerce Admin go to Storefront → My Themes → your active theme → Advanced → Edit Theme Files.
  2. Open templates/layout/base.html. Look for the skip link near the top of <body> — Cornerstone theme includes `<a href='#content' class='skip-nav'>Skip to main content</a>`.
  3. Search the same file (and templates/pages/home.html or the appropriate page template) for the element with `id='content'`. In Cornerstone it is `<main id='content' ...>`.
  4. Ensure the href fragment (`#content`) and the target id (`content`) match exactly. Add `tabindex="-1"` to the <main> or wrapper element if it is not natively focusable.
  5. Save and preview with keyboard navigation to confirm Tab → Enter skips past the nav.
Svg img altModerate effort

Add a meaningful text alternative to every SVG image so screen readers can describe it to visually impaired shoppers.

On BigCommerce

  1. Go to Storefront → My Themes → (active theme) → Advanced → Edit Theme Files.
  2. SVGs typically live in `templates/components/` (e.g. `icon.html`) or in the `assets/icons/` directory as `.svg` files.
  3. Open the relevant `.html` or `.svg` file and add `role='img'` and `aria-labelledby='UNIQUE-ID'` to the `<svg>` tag; add `<title id='UNIQUE-ID'>Descriptive text</title>` as its first child.
  4. For decorative SVG icons (arrows, UI chrome), add `aria-hidden='true'` and `focusable='false'`.
  5. Save changes and preview the storefront; validate with the axe browser extension.
TabindexModerate effort

Remove all positive tabindex values (tabindex="1" or higher) from your store's HTML elements, replacing them with tabindex="0" or relying on natural document order to control keyboard focus.

On BigCommerce

  1. Go to Storefront → My Themes → click 'Advanced' → 'Edit Theme Files' on your active theme (or download the theme for local editing).
  2. Use the built-in editor's search (or a local code editor) to search all .html and .html.twig template files for 'tabindex'.
  3. Remove or replace any positive tabindex values, then save/upload the files.
  4. If you use Page Builder widgets, go to the affected page in the Page Builder, select the widget containing the element, and edit its HTML in the 'Custom HTML' block.
  5. Preview the store and tab through the page to confirm logical focus order.
Valid langModerate effort

Add a valid BCP 47 language code to every `lang` attribute on your pages so assistive technologies can read content in the correct language.

On BigCommerce

  1. Go to BigCommerce admin → Storefront → My Themes → click 'Advanced' → 'Edit Theme Files' on your active theme.
  2. Open `templates/layout/base.html` (Cornerstone theme) and find the `<html` tag.
  3. BigCommerce injects `lang="{{locale_code}}"` automatically via Handlebars. Check that your store's locale is set correctly: Settings → Store Profile → Default Language.
  4. If a `lang` attribute is hard-coded to an invalid value in the template, replace it with `{{locale_code}}` to use the dynamic value.
  5. For any custom HTML widgets containing a `lang` attribute (added via Page Builder), edit the widget in Storefront → Page Builder, open the HTML block, and correct the value.
  6. Save and preview, then validate with the axe extension.

Security (OWASP) · 23 fixes

Dmarc policy noneModerate effort

Strengthen your DMARC policy from p=none (monitor-only) to p=quarantine, then p=reject, to actively block email spoofing of your domain.

On BigCommerce

  1. BigCommerce does not control DNS. Navigate to your domain registrar or DNS host's control panel.
  2. Locate the TXT record named _dmarc for your store domain.
  3. Edit the value to change p=none to p=quarantine. Save and allow propagation (up to 48 hours).
  4. BigCommerce sends transactional emails via its own infrastructure. In BigCommerce Admin > Store Setup > Email, confirm the From address domain matches your domain, and verify your SPF record includes BigCommerce's sending IPs (check their Help Center for current SPF include values).
  5. Review aggregate reports, then edit the _dmarc record a final time to set p=reject.
Hsts disabledQuick win

Enable HTTP Strict-Transport-Security (HSTS) by setting a max-age of at least 31536000 seconds (one year) so browsers always use HTTPS when visiting your store.

On BigCommerce

  1. BigCommerce's SaaS infrastructure enforces HTTPS on all storefronts and sets HSTS headers automatically for stores on bigcommerce.com subdomains.
  2. For custom domains, go to BigCommerce Admin → Store Setup → Domain Settings and ensure your SSL certificate is active (BigCommerce provides a free Let's Encrypt cert). The platform then manages HSTS for that domain.
  3. If you use a CDN or reverse proxy in front of BigCommerce (e.g. Cloudflare), enable HSTS in the CDN layer: Cloudflare → SSL/TLS → Edge Certificates → HTTP Strict Transport Security (HSTS) → enable with max-age 12 months and Include Subdomains ON.
  4. Verify by opening DevTools → Network → any page request → Response Headers for Strict-Transport-Security.
Hsts max age too shortQuick win

Increase your HSTS max-age to at least 31536000 (one year) so browsers enforce HTTPS-only connections for a meaningful period.

On BigCommerce

  1. BigCommerce manages HTTPS and HSTS at the platform/CDN level for storefronts hosted on bigcommerce.com infrastructure — the header is set automatically with a compliant max-age.
  2. If you are running BigCommerce behind a custom CDN or reverse proxy, log in to that CDN dashboard (e.g. Cloudflare: SSL/TLS → Edge Certificates → HTTP Strict Transport Security) and set max-age to 31536000.
  3. For headless BigCommerce storefronts (Next.js, Gatsby, etc.), add the header in your hosting layer: in Next.js use next.config.js headers(); on Vercel/Netlify use their dashboard or config file headers settings.
  4. Verify at securityheaders.com.
Https not availableQuick win

Enable HTTPS by installing a valid SSL/TLS certificate and redirecting all HTTP traffic to the secure HTTPS version of your store.

On BigCommerce

  1. BigCommerce provides a free SSL certificate for all storefronts automatically.
  2. In your BigCommerce Control Panel, go to Store Setup → Store Profile and confirm your Store URL begins with https://.
  3. To force HTTPS, go to Store Setup → Store Settings → Miscellaneous and enable 'Force Secure Checkout' if available, or verify that server-side HTTPS redirect is active (it is on by default for all BigCommerce-hosted storefronts).
  4. For a custom domain, go to Store Setup → Domains and ensure your domain is correctly pointed and the SSL certificate is listed as active.
  5. If using a custom SSL certificate (enterprise plans), upload it via the BigCommerce support request process or through your account manager.
Info disclosure serverQuick win

Remove or obscure the Server HTTP response header so your web server software name and version are no longer exposed to the public internet.

On BigCommerce

  1. BigCommerce is a fully hosted SaaS platform — the underlying web server and CDN headers are managed by BigCommerce and are not configurable by merchants.
  2. BigCommerce's infrastructure does not expose exploitable server version strings in the `Server` header by design.
  3. If you have a custom domain behind Cloudflare: Cloudflare dashboard → your domain → Rules → Transform Rules → Modify Response Header → Create rule → Remove header named `server`. Deploy the rule.
  4. If you are concerned about a scanner finding on your BigCommerce store, contact BigCommerce support to confirm whether any actionable misconfiguration exists.
Info disclosure x powered byQuick win

Remove or mask the X-Powered-By HTTP response header to stop advertising your server technology stack to attackers.

On BigCommerce

  1. BigCommerce is a fully managed SaaS platform; core HTTP response headers are controlled by BigCommerce's infrastructure and cannot be changed from the merchant admin.
  2. If X-Powered-By is flagged on a BigCommerce storefront, raise a support ticket with BigCommerce to request header suppression, or note it as a platform-level finding outside merchant control.
  3. If you use a custom headless front-end (e.g., Next.js via BigCommerce's headless channel), remove the header there: in next.config.js add a `headers()` async function returning `{ source: '/(.*)', headers: [{ key: 'X-Powered-By', value: '' }] }` and set `poweredByHeader: false`.
Insecure cookieModerate effort

Set the HttpOnly, Secure, and SameSite=Strict flags on every session and CSRF cookie your store sets so they cannot be stolen by malicious scripts or sent over unencrypted connections.

On BigCommerce

  1. BigCommerce's core platform cookies (e.g., SHOP_SESSION_TOKEN, XSRF-TOKEN) are set server-side by BigCommerce. Ensure your store is on HTTPS (Settings → Setup → SSL Certificate) — this is a prerequisite for Secure flag delivery.
  2. For the CSRF token cookie specifically: BigCommerce handles this automatically in Stencil themes via `{{inject 'secureBaseUrl' settings.secure_base_url}}` — do not attempt to replicate this manually.
  3. For custom cookies set in Stencil theme JavaScript (assets/js/): open the relevant JS file in Page Builder → Theme Files or via Stencil CLI, find any `document.cookie = ` assignments, and append `; Secure; SameSite=Strict; HttpOnly` (note: HttpOnly cannot be set via JS — move cookie creation to a server-side API route or custom app backend).
  4. For custom app backends connecting to BigCommerce via API: in your server middleware, set cookie options to httpOnly: true, secure: true, sameSite: 'strict' before setting any response cookies.
  5. Submit a support ticket to BigCommerce (Help → Contact Us) if a platform-managed cookie is found missing flags, as these are within their infrastructure control.
Missing content security policyModerate effort

Add a Content-Security-Policy (CSP) response header to every page so browsers block unauthorized scripts, styles, and resources from loading.

On BigCommerce

  1. BigCommerce does not expose raw HTTP response header configuration in the merchant admin for its managed storefront.
  2. The recommended approach is to proxy your storefront through Cloudflare: activate Cloudflare for your domain, then go to Cloudflare Dashboard → your domain → Rules → Transform Rules → Modify Response Headers → Create Rule → Add Header → Name: `Content-Security-Policy`, Value: your policy string → Save and Deploy.
  3. For BigCommerce headless (Next.js / React) storefronts hosted on Vercel or Netlify: in `next.config.js` add a `headers()` export with your CSP value, or in `netlify.toml` add `[[headers]]` with `Content-Security-Policy`.
  4. Test by visiting your storefront, opening DevTools → Network → click the HTML document response → Headers tab and confirm `content-security-policy` appears.
Missing dmarcQuick win

Add a DMARC DNS TXT record at _dmarc.yourdomain.com to protect your domain from email spoofing and phishing.

On BigCommerce

  1. BigCommerce does not manage DNS directly. Go to your BigCommerce control panel → Store Setup → Domain Names to confirm whether your domain DNS is managed by BigCommerce (via Fastly/Cloudflare) or your own registrar.
  2. If DNS is managed externally: log into your registrar's DNS dashboard, add a TXT record with Name = '_dmarc' and Value = v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com
  3. BigCommerce sends transactional emails on your behalf. Navigate to Store Setup → Email Templates to review your sender address, then follow BigCommerce's Help Center guide for 'Email DNS Authentication' to add the SPF and DKIM records BigCommerce provides — these must pass before you enforce DMARC.
  4. If you use a third-party ESP (Klaviyo, Mailchimp, etc.) connected via BigCommerce apps, configure SPF/DKIM in that ESP for your domain as well.
Missing permissions policyQuick win

Add a Permissions-Policy HTTP response header to explicitly restrict which browser features (camera, microphone, geolocation, etc.) your store's pages are allowed to use.

On BigCommerce

  1. BigCommerce is a hosted SaaS platform — direct server-level header configuration is not available to merchants.
  2. The recommended approach is to front your store with Cloudflare (free tier is sufficient) and add the Permissions-Policy header via Cloudflare Transform Rules: Log in to Cloudflare → select your domain → Rules → Transform Rules → Modify Response Headers → Create Rule → Add header: Name = 'Permissions-Policy', Value = 'camera=(), microphone=(), geolocation=(), payment=(), usb=()'.
  3. As a partial fallback, go to BigCommerce Admin → Storefront → Script Manager → Create Script. Set Location = Head, add a <meta http-equiv='Permissions-Policy' content='camera=(), microphone=(), geolocation=()'> tag. This is not a true HTTP header but provides some browser-level hint.
  4. Verify via Chrome DevTools → Network → Response Headers after the Cloudflare rule is live.
Missing referrer policyQuick win

Add a `Referrer-Policy: strict-origin-when-cross-origin` HTTP response header to every page so browsers control what referrer information is sent with requests.

On BigCommerce

  1. BigCommerce's SaaS infrastructure does not expose raw HTTP response header configuration in the standard control panel.
  2. Inject the meta-tag fallback: go to Storefront → Themes → Advanced → Edit Theme Files → open `templates/layout/base.html` (or your active layout file).
  3. Add `<meta name="referrer" content="strict-origin-when-cross-origin">` immediately after `<head>`.
  4. Save and apply. For a true HTTP header, route your storefront behind Cloudflare and use a Transform Rule (Modify Response Header) to add `Referrer-Policy: strict-origin-when-cross-origin` on all responses.
Missing spfQuick win

Add a DNS TXT record containing a valid SPF policy to your domain so email servers can verify that messages sent from your domain are legitimate.

On BigCommerce

  1. BigCommerce does not manage your domain's DNS — you manage it at your registrar or DNS host.
  2. Log in to your DNS provider and add a TXT record at '@' with your SPF value.
  3. BigCommerce sends transactional email through its own infrastructure; add 'include:_spf.bigcommerce.com' to your SPF record (verify the current include tag in BigCommerce's official documentation, as it may update).
  4. If you have connected an external ESP (e.g. Klaviyo, Mailchimp) via BigCommerce's marketing integrations, add that provider's include: directive as well.
  5. In BigCommerce admin, go to Settings → Email Templates to review which addresses send mail, then cross-reference with your sending services.
  6. Verify propagation with a free SPF lookup tool.
Missing strict transport securityQuick win

Add an HTTP Strict-Transport-Security (HSTS) response header with at least `max-age=31536000; includeSubDomains` to every HTTPS response your store sends.

On BigCommerce

  1. BigCommerce manages the underlying infrastructure and automatically sends HSTS headers for storefronts on *.bigcommerce.com and SSL-enabled custom domains.
  2. In your BigCommerce Admin go to Store Setup → Store Profile and ensure your custom domain has an active SSL certificate (BigCommerce provisions this automatically via Let's Encrypt).
  3. If you are using a custom CDN or reverse proxy (e.g., Cloudflare) in front of BigCommerce, configure HSTS as a custom response header in your CDN dashboard.
  4. For Cloudflare: SSL/TLS → Edge Certificates → Enable HSTS → set Max-Age to 12 months, enable 'Apply HSTS policy to subdomains'.
  5. Verify with DevTools as described above.
Missing x content type optionsQuick win

Add the `X-Content-Type-Options: nosniff` HTTP response header to every page of your store so browsers never guess at file types.

On BigCommerce

  1. BigCommerce's SaaS storefront automatically includes X-Content-Type-Options: nosniff on all storefront responses — confirm this in browser dev-tools Network tab.
  2. If you are running a headless BigCommerce storefront (e.g. using Next.js + BigCommerce API), add the header in your Next.js config: open next.config.js and add it inside the headers() async function returning { key: 'X-Content-Type-Options', value: 'nosniff' }.
  3. If you use a CDN or reverse proxy in front of BigCommerce (Cloudflare, Akamai), add a custom response header rule for X-Content-Type-Options: nosniff at the CDN layer.
  4. For custom BigCommerce apps or API-connected middleware, set the header in your server-side response handler.
Missing x frame optionsQuick win

Add an X-Frame-Options HTTP response header set to DENY or SAMEORIGIN to prevent your store's pages from being embedded in iframes on other websites.

On BigCommerce

  1. BigCommerce does not expose direct server-header configuration in the store admin for the storefront.
  2. Place your BigCommerce storefront behind Cloudflare (free tier works): in Cloudflare go to Rules → Transform Rules → Response Header Modification → Create Rule → Add Header: X-Frame-Options = SAMEORIGIN → deploy to all requests for your domain.
  3. Alternatively, contact BigCommerce Support and request that X-Frame-Options: SAMEORIGIN be added to your store's response headers at the platform level.
  4. Verify the header is present using DevTools → Network → Response Headers on any storefront page.
Passive scan onlyModerate effort

Complement passive security scans with active Dynamic Application Security Testing (DAST) against a staging copy of your store before each release.

On BigCommerce

  1. BigCommerce's core platform is managed infrastructure. Direct active scanning of BigCommerce's shared servers is prohibited by their ToS. Focus DAST on your custom theme JavaScript, custom widgets, and any external apps or APIs you own.
  2. For custom integrations or headless BigCommerce frontends, deploy a staging version to a separate environment (e.g. a BigCommerce sandbox store or a staging URL on Vercel/Netlify).
  3. Point OWASP ZAP at your staging/sandbox store URL. Use the Ajax Spider for Stencil theme pages that rely on client-side rendering.
  4. Supply a test-customer session cookie in ZAP to scan authenticated flows (cart, checkout, account).
  5. Remediate any High/Critical findings in your theme code or custom app before pushing to production.
  6. For the platform itself, monitor BigCommerce's security advisories and keep all installed apps updated via BigCommerce Admin → Apps → My Apps.
Ssl cert expiring soonQuick win

Renew your SSL/TLS certificate before it expires to keep your store secure, trusted, and visible in search results.

On BigCommerce

  1. BigCommerce automatically provisions and renews SSL for all storefronts using the built-in shared certificate — no manual action needed for the default subdomain (*.mybigcommerce.com).
  2. For a custom domain: go to BigCommerce Admin → Store Setup → Store Profile → SSL Certificate. BigCommerce auto-provisions a free Let's Encrypt certificate when your custom domain's DNS is correctly pointed to BigCommerce.
  3. If the certificate shows as expired or invalid, go to Server Settings → Store Profile, remove and re-add the custom domain to trigger re-provisioning.
  4. If you have purchased a dedicated/EV certificate, upload the certificate files under Store Setup → SSL Certificate → 'Upload Certificate' and enter the private key, certificate, and CA bundle.
Ssl cert invalidModerate effort

Install a valid SSL/TLS certificate that exactly matches your store's domain name, so browsers trust your site and customer data is encrypted in transit.

On BigCommerce

  1. BigCommerce auto-provisions free SSL certificates for all storefronts on bigcommerce.com subdomains and for custom domains connected through the control panel.
  2. Go to Store Setup → Domain Settings. Confirm your custom domain is correctly pointed to BigCommerce (DNS CNAME to stores.yourstore.bcapp.net or the value BigCommerce specifies).
  3. If the SSL status shows an error, click 'SSL Settings' next to your domain and select 'Let BigCommerce manage my SSL certificate'. BigCommerce will provision a new Let's Encrypt certificate automatically.
  4. If you are using Cloudflare or another proxy in front of BigCommerce, ensure the SSL mode in Cloudflare is set to 'Full (Strict)' and that a valid certificate is also installed at the BigCommerce origin.
  5. Contact BigCommerce Support if the certificate does not provision within 24 hours.
Ssl errorModerate effort

Replace or reissue your SSL/TLS certificate so it is valid for the exact domain name your store uses, eliminating the hostname mismatch error.

On BigCommerce

  1. BigCommerce automatically provisions SSL for your store's default domain (*.mybigcommerce.com) and for custom domains connected through their system.
  2. Go to: BigCommerce Admin → Store Setup → Domain.
  3. If your custom domain has an SSL issue, verify that your DNS CNAME record points to your BigCommerce store URL (shown in the Domain settings page).
  4. Remove the custom domain and re-add it to trigger a fresh certificate provisioning if the mismatch persists.
  5. For multi-storefront setups, each domain must be added separately and have its own DNS record pointing to BigCommerce.
  6. Contact BigCommerce Support if automatic provisioning fails after DNS is confirmed correct.
Ssl not accessibleModerate effort

Enable HTTPS on your store by opening port 443 and installing a valid SSL/TLS certificate so every page is served over a secure connection.

On BigCommerce

  1. BigCommerce provisions and manages SSL certificates automatically for all storefronts hosted on their platform.
  2. Go to Admin → Store Setup → Store Profile and verify your store URL uses https://.
  3. For custom domains: Admin → Store Setup → Store Profile → change Store URL to your custom domain, then point your domain's DNS to BigCommerce's servers (instructions in Admin → Store Setup → Store Profile → Domain Settings). BigCommerce will provision the certificate automatically.
  4. If you are on a legacy plan or using a third-party SSL, contact BigCommerce Support via the Help menu to request certificate provisioning and confirm port 443 is open on their infrastructure.
  5. If you use a custom storefront on your own servers (BigCommerce headless), open port 443 in your server's firewall and install a TLS certificate as described in the generic steps.
Weak spfQuick win

Add a hard-fail (-all) or soft-fail (~all) mechanism to your SPF DNS record so that mail servers are explicitly told to reject or flag email from senders not listed in your record.

On BigCommerce

  1. SPF is managed at your DNS provider, not inside BigCommerce's control panel.
  2. Log in to your domain registrar or DNS host (e.g. Cloudflare, GoDaddy).
  3. Locate the TXT record for @ starting with v=spf1.
  4. BigCommerce sends transactional email through its own infrastructure — check BigCommerce's official documentation for the current SPF include value to add, then close the record with -all.
  5. Save and verify propagation with an SPF checker tool.
X content type options weakQuick win

Set the X-Content-Type-Options response header to exactly `nosniff` (once, not duplicated) on every page and asset your store serves.

On BigCommerce

  1. BigCommerce's platform injects `X-Content-Type-Options: nosniff` by default on storefront responses.
  2. If your scanner reports a duplicate, the extra copy is likely coming from Cloudflare or another CDN/proxy sitting in front of your store.
  3. Log in to your Cloudflare (or other CDN) dashboard → Rules / Transform Rules → Modify Response Headers — remove any rule that adds `X-Content-Type-Options`, since BigCommerce already sets it.
  4. If you use a custom nginx or Apache reverse proxy, remove the header directive from that config.
  5. Verify with DevTools or securityheaders.com after clearing any CDN cache.
X frame options weakQuick win

Change the X-Frame-Options response header from its current weak or missing value to either DENY or SAMEORIGIN so your store cannot be embedded in a malicious iframe.

On BigCommerce

  1. BigCommerce SaaS storefronts set X-Frame-Options automatically; use DevTools to confirm it is present on your live store.
  2. If your store sits behind a CDN such as Cloudflare, go to Cloudflare dashboard → your domain → Rules → Transform Rules → Modify Response Header → Create rule → Add header: Name = X-Frame-Options, Value = DENY. Set it to apply to all requests matching your hostname.
  3. For BigCommerce headless (Next.js / React) storefronts deployed on Vercel: add to vercel.json: { "headers": [{ "source": "/(.*)", "headers": [{ "key": "X-Frame-Options", "value": "DENY" }] }] }
  4. For headless storefronts on Netlify: add to netlify.toml: [[headers]] for = "/*" [headers.values] X-Frame-Options = "DENY"

Site Lifecycle · 12 fixes

Cms versionModerate effort

Identify your ecommerce platform and CMS version, then ensure it is always kept up to date to protect your store from security vulnerabilities and avoid loss of vendor support.

On BigCommerce

  1. BigCommerce is a SaaS platform — core platform updates are applied automatically by BigCommerce.
  2. Log in to BigCommerce Admin → Storefront → Themes Marketplace: if your active theme has an update, you will see a notification — click 'Update & Preview' to review changes before publishing.
  3. Go to BigCommerce Admin → Apps → My Apps: review all installed apps for active maintenance status and remove deprecated ones.
  4. Check BigCommerce's release notes (via the BigCommerce Community or changelog) to understand what has changed and if any theme customizations need adjustments after platform updates.
Domain expiryQuick win

Enable auto-renew on your domain registration and set calendar reminders well before expiry to prevent accidental loss of your store's address.

On BigCommerce

  1. BigCommerce does not sell or manage domain registrations. Your domain lives at a separate registrar.
  2. Log in to your registrar (e.g. GoDaddy, Namecheap, Google Domains), navigate to your domain management page, and turn on auto-renew.
  3. Under your registrar account settings, ensure your payment method and contact email are current.
  4. In BigCommerce Admin → Store Setup → Store Profile, verify the store URL is correct so you notice immediately if the domain ever changes status.
Gtm auditModerate effort

Install Google Tag Manager on your store and configure GA4 with ecommerce event tracking (view_item, add_to_cart, purchase) so you can measure what's driving revenue.

On BigCommerce

  1. In BigCommerce Admin, go to Storefront → Script Manager → Create a Script.
  2. Set Location to 'Head', Pages to 'All Pages', and paste the GTM <head> snippet. Create a second script with Location set to 'Body' for the <body> snippet.
  3. For ecommerce dataLayer events, install the 'Pixel Manager for BigCommerce' app from the BigCommerce App Marketplace, which pushes GA4-compatible ecommerce events automatically.
  4. Alternatively, edit your Stencil theme's base.html (via Stencil CLI or Theme Editor) to add the GTM snippets and custom dataLayer pushes on product, cart, and order-confirmation pages.
  5. Configure GA4 tags in GTM, verify with Preview + DebugView, and publish.
Html langQuick win

Add a correct `lang` attribute to your site's `<html>` tag so browsers, search engines, and assistive technologies know what language your store is written in.

On BigCommerce

  1. In your BigCommerce admin, go to Storefront › My Themes.
  2. Click Customize on your active theme, then choose Edit Theme Files (or use the Stencil CLI for local development).
  3. Open templates/layout/base.html — this is the master layout that wraps every page.
  4. Find the <html tag and add lang="en" (or your correct BCP 47 code), e.g.: <html lang="en">
  5. Save and apply the theme, then verify via View Page Source on your live store.
Lifecycle oos schema not updatedModerate effort

Update the `offers.availability` field in your Product schema to `OutOfStock` (or `PreOrder`/`Discontinued`) whenever a product sells out, so Google's data matches your real inventory.

On BigCommerce

  1. BigCommerce injects Product schema via its Stencil theme framework. Open Storefront > My Themes > your active theme > Edit Theme Files (Advanced).
  2. Locate 'templates/components/products/product-view.html' or search for 'availability' in the theme editor. BigCommerce's default Cornerstone theme dynamically outputs availability based on the product's inventory tracking settings.
  3. Ensure inventory tracking is enabled for each product: go to Products > View, edit the product, open the Inventory tab, and set 'Inventory' to track by product or variant. When stock reaches 0, BigCommerce will set the product as unavailable.
  4. Check that your theme's schema block uses the Handlebars variable '{{product.availability}}' rather than a hard-coded string. If it is hard-coded, replace it with the dynamic variable.
  5. For a no-code fix, use a BigCommerce app from the App Marketplace such as 'Schema App Structured Data' which generates dynamic availability from live inventory.
  6. Validate using Google's Rich Results Test on a sold-out product URL.
Lifecycle orphaned productsModerate effort

Add internal links from category pages, navigation, and related-product sections to every product page so crawlers and shoppers can find them without relying solely on your sitemap.

On BigCommerce

  1. Go to Products → View and use the 'Category' filter set to 'Uncategorized' to identify products not assigned to any category.
  2. Click Edit on each product and scroll to the 'Categories' section — assign it to one or more relevant categories using the category tree.
  3. Ensure categories appear in your storefront navigation: go to Storefront → Navigation and add the relevant categories to your main menu.
  4. To add related products: on the product edit page, scroll to the 'Related Products' section and manually select related products, or enable 'Automatic Related Products' in Store Setup → Store Settings → Display.
  5. Use the Page Builder (Storefront → My Themes → Customize) to add 'Product' or 'Featured Products' widgets to your homepage or category pages, targeting the previously-orphaned products.
  6. For blog/content links: go to Storefront → Blog, edit a relevant post, and hyperlink product names to their URLs using the editor.
Lifecycle products missing from sitemapModerate effort

Add every canonical product URL to your XML sitemap so search engines can discover and index your products faster.

On BigCommerce

  1. BigCommerce auto-generates a sitemap. Go to Store Setup → Store Settings → Search Engine Optimization → confirm 'Sitemap' is enabled.
  2. Your sitemap is available at yourdomain.com/xmlsitemap.php. Products must be published (not hidden) to appear.
  3. For product pages that are still missing, check the product: go to Products → Edit Product → confirm 'Visible' is checked under 'Storefront Details'.
  4. Submit yourdomain.com/xmlsitemap.php to Google Search Console → Sitemaps.
Lifecycle products too deepModerate effort

Reduce the number of clicks required to reach every product page to 4 or fewer from the homepage by flattening your site structure or surfacing buried products on shallower category pages.

On BigCommerce

  1. Storefront → Product Categories: review the category tree. BigCommerce supports three levels (root → sub → sub-sub); sub-sub categories push products to depth 5 — collapse or eliminate the third level where possible.
  2. Edit a deep category (Storefront → Product Categories → [select category] → Edit) and change its Parent Category to a shallower level, or set it to 'None' to make it a root category.
  3. Add products to multiple categories: open the product (Products → View → Edit product), go to 'Categories' and tick an additional shallower category so the product is reachable in fewer clicks.
  4. Storefront → Navigation & Layout (or theme editor): add a custom link to your main navigation pointing to a collection or individual product that is otherwise buried.
  5. Use Page Builder (Storefront → My Themes → Customize) to add a 'Product Carousel' or 'Featured Products' widget on the homepage, pulling in buried products.
  6. Verify: use a site crawl tool and confirm no product URL has a depth greater than 4.
Mixed contentModerate effort

Audit every page, asset, and third-party embed on your store to ensure no HTTP resources are loaded on HTTPS pages, and fix any mixed-content violations before they silently break security warnings or block content in visitors' browsers.

On BigCommerce

  1. BigCommerce provides HTTPS sitewide; mixed content typically comes from theme files or content entered in the control panel.
  2. Go to Storefront → My Themes → your active theme → Advanced → Edit Theme Files.
  3. Search all template (.html), stylesheet (.scss/.css), and JavaScript files for 'http://' and update any found asset URLs to 'https://'.
  4. In the control panel, go to Products and check product descriptions (HTML view in the description editor) for HTTP image URLs — update each to HTTPS.
  5. Check Storefront → Script Manager for any third-party scripts using HTTP src URLs; update them to HTTPS equivalents.
  6. Add the CSP upgrade-insecure-requests meta tag inside the <head> section of your base.html (or equivalent) template file as a safety net.
  7. Use browser DevTools on your live store to confirm no mixed-content errors remain in the Console tab.
Mobile viewportQuick win

Confirm your store has a correct responsive viewport meta tag so it displays properly on phones and tablets.

On BigCommerce

  1. In your BigCommerce Admin, go to Storefront → My Themes.
  2. Click 'Advanced' → 'Edit Theme Files' on your active theme (or download and edit locally).
  3. Open templates/layout/base.html (the path may vary slightly by theme framework).
  4. Search for 'viewport'. Cornerstone and most BigCommerce themes include the correct tag by default.
  5. If missing or incorrect, add/correct the tag inside the <head> section: <meta name="viewport" content="width=device-width, initial-scale=1">.
  6. Save and publish. Use Google's Mobile-Friendly Test to confirm.
Server versionModerate effort

Remove or suppress the Server version header so your web server software and version number are no longer exposed in every HTTP response.

On BigCommerce

  1. BigCommerce is a fully hosted SaaS platform — you do not control the web server configuration.
  2. BigCommerce already manages and genericises server response headers centrally; no version strings are typically exposed.
  3. If a scanner flags a version header, verify the request is truly hitting BigCommerce infrastructure and not a custom middleware, reverse proxy, or headless front-end you have separately deployed.
  4. For headless BigCommerce storefronts (e.g., Next.js / Gatsby hosted on your own infrastructure), apply the fix at the Node.js / Nginx / CDN layer: in Next.js set `poweredByHeader: false` in next.config.js; configure your CDN (Fastly, Cloudflare) to strip the Server header via response header rules.
Ssl expiryQuick win

Monitor your SSL/TLS certificate expiry date and set up auto-renewal so your store never goes offline or shows a security warning to shoppers.

On BigCommerce

  1. BigCommerce automatically provides and renews a free shared SSL certificate for all stores on the platform.
  2. For a custom domain with a dedicated SSL, go to: Store Setup → Domain (in the BigCommerce control panel) and review the SSL status shown there.
  3. If you purchased a dedicated SSL through BigCommerce or a third party, contact BigCommerce Support (support.bigcommerce.com) to initiate renewal, as dedicated cert installation requires their involvement.
  4. Ensure your custom domain's DNS CNAME points to your BigCommerce store URL so the platform can manage certificate validation automatically.

Generative Engine Optimization · 9 fixes

Ai crawler blockedQuick win

Your robots.txt explicitly blocks one or more AI assistants from crawling your store, so those engines can't discover, index, or cite your products when shoppers ask for recommendations.

On BigCommerce

  1. Go to Channel Manager > your storefront > Customize robots.txt (or Settings > SEO depending on plan).
  2. Remove any 'Disallow: /' rule under the AI bot's user-agent, or add an explicit allow group for it.
  3. Save and verify at https://yourstore.com/robots.txt.
Ai crawler not specifiedQuick win

Your robots.txt doesn't explicitly allow several AI crawlers. They aren't blocked, but a number of AI engines act on explicit permission, so naming them removes any ambiguity.

On BigCommerce

  1. Go to Channel Manager > your storefront > Customize robots.txt (or Settings > SEO depending on plan).
  2. Remove any 'Disallow: /' rule under the AI bot's user-agent, or add an explicit allow group for it.
  3. Save and verify at https://yourstore.com/robots.txt.
Geo brand name inconsistentModerate effort

Your brand name appears in multiple different formats across your site (schema, og:site_name, footer, logo). AI engines may treat the variants as separate entities.

On BigCommerce

  1. Edit your Stencil theme templates ('templates/pages/product.html') to extend the JSON-LD with the missing fields using Handlebars ({{product.title}}, {{product.price}}).
  2. Set your store's social profile URLs and business info so Organization sameAs/address/contactPoint can be emitted.
  3. Validate with Google's Rich Results Test.
Geo eeat trust signals weakModerate effort

Your store is missing trust signals (E-E-A-T) that AI engines and shoppers look for before recommending a store: clear policies, real contact details, and a credible business identity.

On BigCommerce

  1. Edit your Stencil theme templates ('templates/pages/product.html') to extend the JSON-LD with the missing fields using Handlebars ({{product.title}}, {{product.price}}).
  2. Set your store's social profile URLs and business info so Organization sameAs/address/contactPoint can be emitted.
  3. Validate with Google's Rich Results Test.
Geo faqpage missing productsModerate effort

Your product pages don't use FAQPage schema, so AI assistants can't pull direct answers to common buyer questions (sizing, materials, shipping) about your products.

On BigCommerce

  1. Edit your Stencil theme templates ('templates/pages/product.html') to extend the JSON-LD with the missing fields using Handlebars ({{product.title}}, {{product.price}}).
  2. Set your store's social profile URLs and business info so Organization sameAs/address/contactPoint can be emitted.
  3. Validate with Google's Rich Results Test.
Geo price not crawlableModerate effort

Your product prices appear to be rendered by JavaScript and may not be present in the static HTML, so AI crawlers (which often don't run JS) can't read or cite them.

On BigCommerce

  1. Edit your Stencil theme templates ('templates/pages/product.html') to extend the JSON-LD with the missing fields using Handlebars ({{product.title}}, {{product.price}}).
  2. Set your store's social profile URLs and business info so Organization sameAs/address/contactPoint can be emitted.
  3. Validate with Google's Rich Results Test.
Geo schema org missing sameasModerate effort

Your Organization schema has no sameAs links to your social profiles, Wikipedia, or other authoritative sources - so AI engines can't confidently connect the dots about your brand.

On BigCommerce

  1. Edit your Stencil theme templates ('templates/pages/product.html') to extend the JSON-LD with the missing fields using Handlebars ({{product.title}}, {{product.price}}).
  2. Set your store's social profile URLs and business info so Organization sameAs/address/contactPoint can be emitted.
  3. Validate with Google's Rich Results Test.
Geo schema product incompleteModerate effort

Your Product structured data is missing fields AI engines rely on to cite your products accurately (price, availability, currency, brand, ratings).

On BigCommerce

  1. Edit your Stencil theme templates ('templates/pages/product.html') to extend the JSON-LD with the missing fields using Handlebars ({{product.title}}, {{product.price}}).
  2. Set your store's social profile URLs and business info so Organization sameAs/address/contactPoint can be emitted.
  3. Validate with Google's Rich Results Test.
Llms txt missingQuick win

Your store has no llms.txt - the emerging standard (like robots.txt, but for AI) that tells language models which content to read and cite. SEOLZ has generated a ready-to-upload file from your own pages.

On BigCommerce

  1. BigCommerce doesn't expose the web root directly; serve llms.txt via a redirect to a hosted file or a Page with a raw-text template, or via your CDN/edge rules.
  2. Paste the generated content and confirm it returns at https://yourstore.com/llms.txt.