Fix Your Sitemap for BigCommerce
BigCommerce auto-generates /xmlsitemap.php, but product variants, faceted category filters, brand archives, and multi-storefront setups routinely produce duplicate and low-value URLs.
BigCommerce's sitemap is a black box compared to Shopify or WooCommerce. You can't edit xmlsitemap.php directly - the platform rebuilds it from the catalog on a schedule. What you can control is what gets fed into that generator. Which means the fix lives in Store Settings, product visibility flags, and Stencil theme templates, not in a plugin config.
Helped a BigCommerce home-goods store last quarter. 3,100 live products, xmlsitemap.php listing 18,000+ URLs. The padding came from brand archives (one brand per SKU for drop-shipped items), SKU-level variant URLs, and three legacy blogs that were never unpublished. After the fixes below, the sitemap dropped to 3,450 URLs and indexed coverage climbed from 41% to 82% in about five weeks.
Common BigCommerce Sitemap Issues
- Faceted category filter URLs (
?brand=,?color=) emitted alongside canonical category pages - Product variant URLs (with
?sku=) indexed separately from the parent product - Brand archive pages auto-generated for every brand, including brands with one product
- Out-of-stock products staying in the sitemap because Customer Visibility defaults to "Yes"
- Multi-storefront setups with a shared catalog producing duplicate product URLs across domains
- Blog module RSS feeds and tag pages appearing without curation
- Currency-switcher variants (e.g.,
?setCurrencyId=2) crawled as separate URLs - Stencil theme category pages paginated at
?page=2included without review
BigCommerce-specific quirks
A few BigCommerce behaviors that trip people up:
- The sitemap updates on a cache cycle, not instantly. Changes to product visibility can take 24 hours to appear.
- Brands are auto-created when you assign a brand name to a product. There's no "don't create a brand page" option - you either delete the brand or live with the archive page.
- Preview/staging domains on the
*.mybigcommerce.comURL are often still indexable. Check that your store's production domain is set as the storefront URL under Store Settings > Store Profile. - Robots.txt is editable but limited to one file across all storefronts on the same store. No per-storefront rules.
Recommended robots.txt additions
User-agent: * Disallow: /search.php Disallow: /compare Disallow: /login.php Disallow: /account.php Disallow: /cart.php Disallow: /checkout Disallow: /*?sort= Disallow: /*?page= Disallow: /*?setCurrencyId= Disallow: /*?sku= Disallow: /*?brand= Disallow: /*?search_query= Sitemap: https://yourdomain.com/xmlsitemap.php
Be careful with Disallow: /*? as a blanket rule - it blocks legitimate filter URLs you might later want to promote as landing pages. Block only the parameters you know are duplicate-producing.
Multi-storefront and hreflang
BigCommerce's Multi-Storefront feature uses one catalog across multiple domains. Each storefront gets its own /xmlsitemap.php, but since products share IDs and slugs across stores, you end up with near-identical URLs that look like duplicates to Google. Use the Stencil theme to emit hreflang tags in the HTML head, and keep each storefront submitted separately in GSC. Do not list every storefront inside one parent sitemap index - GSC handles them as separate properties.
Step-by-Step Fix Guide
- Open Advanced Settings > Data Solutions > robots.txt and add disallow rules for filter parameters
- In Advanced Settings > Store Settings > SEO, enable "Set canonical URL on products" so variants collapse to the parent
- Under Products, set Visible to Customers off for legacy SKUs and out-of-stock items you don't want indexed
- In Storefront > Brands, merge or delete single-product brands to kill thin brand archives
- For multi-storefront, configure per-storefront sitemap URLs and emit hreflang in the Stencil theme head
- Confirm the storefront URL in Store Profile points at your production domain, not
*.mybigcommerce.com - Clear BigCommerce cache (Theme > Clear Cache) and wait up to 24 hours for
xmlsitemap.phpto regenerate - Run
curl -s https://yourdomain.com/xmlsitemap.php | grep -c "<url>"to count URLs and sanity-check - Submit the sitemap in Google Search Console and monitor coverage per URL category