Table of Contents
- Stencil Theme SEO Audit Checklist
- Script Manager vs. Theme-Level Schema Injection
- Fixing the Broken Canonical Tag in Stencil
- URL Structure Configuration
- Akamai CDN Cache-Busting After Bulk URL Changes
- Screaming Frog Configuration for BigCommerce
- Product Page Optimisation
- Category Page SEO and Faceted Navigation
- Internal Linking Strategy
- Measuring Success
- Frequently Asked Questions
BigCommerce stores share a single architectural problem that most SEO guides skip over entirely: the Stencil theme layer controls your crawlability, your schema output, and your canonical logic, yet the default theme ships with broken implementations of all three. This guide walks through every fix we apply to BigCommerce stores, with the exact admin paths, Handlebars code, and API endpoints you need to do the work yourself.
We’ve audited over 140 BigCommerce storefronts since 2019. The patterns repeat. Broken canonicals on paginated category pages. Schema markup injected through Script Manager that Google indexes on desktop but AMP discards entirely. Akamai caching stale 301 chains for 48 hours after a bulk URL migration. Each of these failures has a specific root cause in the BigCommerce stack, and each one has a deterministic fix.
This post is the hub of our BigCommerce SEO resource centre. Where a topic deserves deeper treatment, we’ve linked to the dedicated sibling post. Start here, then go deep where your store needs it.
1. Stencil Theme SEO Audit Checklist
Every BigCommerce SEO engagement starts inside the Stencil theme files, not the admin panel. The admin panel exposes roughly 30% of the settings that affect crawl behaviour. The other 70% lives in Handlebars templates, JSON schema config, and config.json front matter.
Files to Open First
Open templates/layout/base.html before anything else. This file controls the <head> section across every page type. Here you’ll find (or won’t find) your canonical tags, hreflang declarations, schema injection points, and preconnect hints. A typical base.html <head> section runs 80-120 lines. The critical block sits between {{#block "head"}} and {{/block}}.
Next, open templates/pages/product.html. This is where product-specific meta tags get injected. Look for the {{#partial "page"}} block. Inside it, you’ll find the product title tag pattern, the meta description injection, and any Open Graph overrides. Most Cornerstone-based themes use {{product.title}} directly in the <title> tag without any suffix control. That means your brand name appending logic has to live in base.html, not in the page template.
Third file: templates/pages/category.html. This template controls pagination rendering, faceted navigation output, and the category description placement. The SEO-critical element here is the {{pagination}} partial. BigCommerce’s default pagination partial does not output rel="next" or rel="prev" link headers. Google deprecated those signals in 2019, but Bing still uses them, and they serve as a useful crawl hint for any crawler respecting the spec.
The Audit Sequence
Run through these checks in order:
- Canonical tag presence on every page type. Render a product page, category page, brand page, and content page. View source. Confirm a
<link rel="canonical">tag exists on each. If any page type is missing it, you’ve found the broken conditional we cover in Section 3. - Schema markup source. Check whether structured data comes from the theme template or from Script Manager. Right-click, View Page Source (not Inspect Element). Script Manager injections won’t appear in View Source because they’re JavaScript-rendered. If your schema only appears in Inspect Element, it’s Script Manager. That’s a problem we address in Section 2.
- Robots meta tag. Look for
<meta name="robots">in base.html. The default Cornerstone theme doesn’t include one, which means every page is indexable by default. That’s fine until you realise BigCommerce generates indexable URLs for every filter combination on category pages. - Hreflang tags. If you’re running a multi-storefront setup, check for
<link rel="alternate" hreflang="x">tags. BigCommerce doesn’t generate these automatically. They must be hardcoded in the theme or injected via the API. - Page speed bottlenecks in the template. Look for render-blocking script tags above the
{{/block}}closure in the head. Check for inline CSS that should be extracted toassets/scss. Our BigCommerce site speed guide covers the full performance audit.
2. Script Manager vs. Theme-Level Schema Injection
BigCommerce’s Script Manager (found at Storefront > Script Manager) lets you inject arbitrary JavaScript into the <head>, footer, or order confirmation page. It’s tempting to use it for JSON-LD schema. Don’t.
Script Manager fires JavaScript. The script creates a <script type="application/ld+json"> element and appends it to the DOM at runtime. Googlebot’s renderer executes JavaScript and will eventually see this schema. But “eventually” introduces two failure modes.
Failure Mode 1: Render Budget
Google’s Web Rendering Service (WRS) queues JavaScript-dependent pages for a second pass. Your schema won’t appear in the initial HTML parse. If your page gets crawled but not rendered (which happens during large crawl spikes or for lower-priority URLs), the schema never gets indexed. You’ll see the page in Search Console’s Coverage report but the Rich Results Test will intermittently fail.
Failure Mode 2: AMP and Non-JS Contexts
If you’re serving AMP versions of product pages through a third-party integration, Script Manager scripts do not execute in the AMP context. AMP strips non-whitelisted JavaScript. Your schema disappears entirely on AMP pages. The fix is straightforward: put schema directly in the Handlebars template.
Theme-Level Injection Pattern
Open templates/pages/product.html and add your JSON-LD directly inside a <script> tag using Handlebars variables:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "{{product.title}}",
"image": "{{#each product.images}}{{#if @first}}{{getImageSrcset this}}{{/if}}{{/each}}",
"description": "{{plainTextSummary product.description 200}}",
"sku": "{{product.sku}}",
"brand": {
"@type": "Brand",
"name": "{{product.brand.name}}"
},
"offers": {
"@type": "Offer",
"url": "{{product.url}}",
"priceCurrency": "{{currency_selector.active_currency_code}}",
"price": "{{product.price.without_tax.value}}",
"availability": "{{#if product.add_to_cart_url}}https://schema.org/InStock{{else}}https://schema.org/OutOfStock{{/if}}"
}
}
</script>
This renders server-side. No JavaScript execution required. The schema appears in View Source. Googlebot sees it on the first pass. AMP pages retain it. Our structured data guide covers Product, FAQ, Breadcrumb, and Organisation schema implementation in full detail.
3. Fixing the Broken Canonical Tag in Stencil
Ninety percent of Stencil themes ship with a canonical tag implementation that silently breaks on most page types. The bug has persisted across five years of Cornerstone releases. Here’s the exact code you’ll find in templates/layout/base.html:
{{#if page.canonical}}
<link rel="canonical" href="{{page.canonical}}">
{{/if}}
The problem: page.canonical only populates when a merchant manually sets a custom canonical URL in the admin panel for that specific page. For 99% of pages, no custom canonical exists. The conditional evaluates to false. No canonical tag renders at all.
The consequence is severe. Without a canonical tag, Google makes its own canonicalization decisions. On BigCommerce, that means Google chooses between /product-name/ and /product-name/?variant=123 and /category/product-name/. You lose control of which URL enters the index.
The Fix
Replace the conditional with a self-referencing canonical that falls back to the current page URL:
{{#if page.canonical}}
<link rel="canonical" href="{{page.canonical}}">
{{else}}
<link rel="canonical" href="{{urls.current}}">
{{/if}}
The {{urls.current}} Handlebars helper outputs the full URL of the current page without query parameters. That’s exactly what a self-referencing canonical should do: point to the clean URL and signal that any parameterised variants are duplicates.
Testing After Deployment
After pushing this fix via stencil bundle and uploading through Storefront > Themes > Upload, verify the output on four page types:
- A product page accessed directly
- A product page accessed through a category path (the URL will differ)
- A category page with active filters
- A content page (e.g., /about-us/)
View Source on each. Confirm the canonical tag is present and points to the clean URL. If the canonical includes query parameters on filtered category pages, you’ve got a different problem: {{urls.current}} is including the query string on your theme version. In that case, use {{urls.current_without_params}} if your Stencil CLI version supports it (v3.x+), or build a custom Handlebars helper to strip parameters.
For a deeper dive on canonical handling across paginated and filtered category pages, read our category page duplicate content guide.
4. URL Structure Configuration
BigCommerce offers three URL structure options, buried at Store Setup > Store Settings > SEO > URL Structure. The choice you make here propagates to every product, category, and brand URL on the store. Changing it on a live store triggers a site-wide URL migration.
The Three Options
- Short URLs (recommended):
/product-name/. No category prefix. No/products/directory. The flattest possible structure. - Category-prefixed:
/category-name/product-name/. Adds the primary category as a directory. Creates longer URLs but adds topical context. - Legacy:
/products/product-name.html. Includes the.htmlextension. No SEO benefit. Exists purely for backward compatibility with stores migrated from older BigCommerce versions.
Short URLs win in almost every scenario. They’re cleaner, they avoid duplicate content issues when a product belongs to multiple categories, and they keep URL length minimal for sharing. The only argument for category-prefixed URLs is keyword density in the URL path, but that signal carries negligible weight in 2026.
Switching on a Live Store
When you change the URL structure setting, BigCommerce automatically creates 301 redirects from old URLs to new ones. That’s the good news. The bad news: Akamai’s CDN layer caches the old URLs. The 301 redirects exist at the application level, but Akamai may continue serving the old response from cache for up to 48 hours.
The propagation sequence looks like this:
- You change the URL structure in admin
- BigCommerce application server starts issuing 301s from old to new URLs
- Akamai edge nodes still hold cached 200 responses for old URLs
- Googlebot hits an Akamai edge node and gets a cached 200, not the 301
- Google continues indexing the old URL structure
The fix requires a cache purge, which we cover in the next section.
5. Akamai CDN Cache-Busting After Bulk URL Changes
BigCommerce runs every storefront behind Akamai’s CDN. You don’t get direct access to the Akamai control panel. Instead, you work through BigCommerce’s cache-purge mechanism and the Akamai purge API (if you’ve negotiated access through BigCommerce’s Enterprise tier).
Standard Cache Purge
Navigate to Server Settings > Store > Cache and hit “Purge All.” This sends a purge request to Akamai for your storefront’s hostname. The purge propagates across Akamai’s edge network in 5-15 minutes under normal conditions. During high-traffic periods or when Akamai is processing a backlog, propagation can take up to 45 minutes.
API-Level Purge
For Enterprise stores with API access, the BigCommerce V3 API exposes a cache purge endpoint:
POST https://api.bigcommerce.com/stores/{store_hash}/v3/cache
Content-Type: application/json
X-Auth-Token: {access_token}
{
"type": "all"
}
The response returns a 204 on success. There’s no callback or webhook to confirm propagation completion. You have to verify manually.
Verification With Screaming Frog
Wait 30 minutes after the purge. Then run a Screaming Frog crawl targeting your old URL structure. You’re checking for two things:
- 301 status codes on old URLs. Every old URL should return a 301 redirect to its new equivalent. If any return 200, the Akamai cache hasn’t fully propagated. Wait another 30 minutes and recrawl.
- Redirect chains. If you’ve changed URL structure more than once (it happens), you may find 301 > 301 chains. BigCommerce doesn’t automatically flatten redirect chains from previous migrations. You’ll need to clean these up manually in Server Settings > 301 Redirects or via the V3 Redirects API endpoint:
PUT /stores/{store_hash}/v3/storefront/redirects.
Skipping the post-purge crawl is the single most common mistake in BigCommerce URL migrations. We’ve seen stores lose 40% of organic traffic because cached 200 responses prevented Google from discovering the 301s for two full crawl cycles.
6. Screaming Frog Configuration for BigCommerce
BigCommerce stores sit behind Akamai, and Akamai’s default security rules block or throttle crawlers aggressively. A default Screaming Frog configuration will trigger rate limiting within the first 200 requests. Here’s the configuration that works.
Custom User-Agent String
Some BigCommerce stores have Akamai rules that block non-browser User-Agent strings entirely. Set your User-Agent to a real browser string:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
In Screaming Frog: Configuration > HTTP Header > User-Agent. Paste the string above. Don’t use Screaming Frog’s default UA or the Googlebot UA. The Googlebot UA triggers a different Akamai rule set that may serve different content (some stores serve pre-rendered pages to Googlebot).
Custom Headers for Geo-Redirect Bypass
If the store uses geo-based redirects (common for multi-storefront setups), add a custom header to lock your crawl to a specific region:
In Screaming Frog: Configuration > HTTP Header > Custom Headers. Add:
X-Forwarded-For: 203.0.113.1
Replace with an IP address from the target region. This header tells Akamai’s edge to treat the request as originating from that geography. Without it, your crawl results will include redirect responses to the geo-targeted storefront, polluting your data.
Crawl Rate Limiting
Set the crawl speed to a maximum of 2 URLs per second. In Screaming Frog: Configuration > Speed > Max Threads = 2, Max URLs Per Second = 2. Going higher than 3 per second reliably triggers Akamai’s rate limiter, which returns 503 responses. Those 503s contaminate your crawl data. You’ll waste time distinguishing legitimate server errors from throttling artefacts.
Essential Crawl Configurations
Under Configuration > Spider, enable these:
- Crawl All Subdomains: Off (BigCommerce stores often have CDN subdomains for images. You don’t want to crawl those.)
- Crawl Outside Start Folder: Off
- Check Canonicals: On
- Store HTML/Response Bodies: On (you’ll need these for schema validation later)
Under Configuration > Robots.txt, set the mode to “Ignore robots.txt” if you need to audit URLs that BigCommerce’s default robots.txt blocks. BigCommerce’s auto-generated robots.txt disallows several URL patterns that are still indexable through internal links, including /cart.php and /wishlist.php.
7. Product Page Optimisation
Product pages drive 60-80% of organic revenue for most BigCommerce stores. The optimisation stack has three layers: meta data, structured data, and on-page content. Each one requires a different tool inside the BigCommerce admin.
Meta Title and Description
Edit individual product SEO settings at Products > [Product Name] > SEO. The “Page Title” field controls the <title> tag. The “Meta Description” field controls the <meta name="description"> tag. Leave the “Search Keywords” field alone. It has zero impact on SEO. It controls BigCommerce’s internal site search, not Google.
For bulk updates, export your product catalogue via Products > Export. The CSV includes columns for Page Title and Meta Description. Edit in a spreadsheet, then re-import. The import API endpoint is POST /stores/{store_hash}/v3/catalog/products if you prefer scripting it.
Failure mode: the CSV import silently truncates meta descriptions longer than 320 characters. BigCommerce doesn’t warn you. The truncation happens at exactly 320 characters, mid-word. Always validate your CSV column lengths before importing.
Custom Fields for Schema Enrichment
BigCommerce custom fields (found at Products > [Product Name] > Custom Fields) let you store structured data attributes that the default schema doesn’t cover. Create custom fields for:
gtin(Global Trade Item Number, required for Shopping results eligibility)mpn(Manufacturer Part Number)materialcoloursize
Then reference these custom fields in your theme-level schema template:
{{#each product.custom_fields}}
{{#if name '==' 'gtin'}}
"gtin": "{{value}}",
{{/if}}
{{#if name '==' 'mpn'}}
"mpn": "{{value}}",
{{/if}}
{{/each}}
This approach scales. You add the data through the admin or CSV import. The theme template picks it up automatically. No code changes needed per product. For the full implementation, including FAQ schema and breadcrumb markup, see our structured data guide.
On-Page Content Strategy
BigCommerce product descriptions support full HTML. Use this. Don’t dump a plain text block into the description field. Structure it with <h2> and <h3> subheadings. Include specification tables using <table> markup. Add FAQ sections directly in the product description using <details> and <summary> tags for expandable content.
The product description renders inside the {{product.description}} Handlebars variable. Whatever HTML you put in the admin field outputs directly into the template. That means your heading hierarchy must account for the template context. If the product name renders as an <h1> in the template, your description headings should start at <h2>.
Read our full product page SEO guide for conversion-focused product page architecture.
8. Category Page SEO and Faceted Navigation
BigCommerce category pages generate more duplicate content problems than any other page type. Every filter combination creates a unique URL. A category with 5 filter groups, each containing 4 options, generates thousands of indexable URL permutations. Google crawls all of them.
The Default Filtering Problem
BigCommerce’s default product filtering appends query parameters to the category URL: /category-name/?brand[]=Nike&price[]=100-200. Each parameter combination is a separate URL from Google’s perspective. Without intervention, Google will:
- Discover these URLs through internal links (the filter sidebar links to each option)
- Crawl each permutation
- Attempt to index each one
- Split the category page’s ranking signals across thousands of near-duplicate pages
The Fix: Canonical Tags and Robots Directives
Two defences work in combination. First, the canonical tag fix from Section 3 ensures that filtered pages point their canonical back to the clean category URL. This consolidates ranking signals. Second, add a noindex meta robots tag to filtered pages specifically. In your templates/pages/category.html:
{{#if category.selected_facets.length}}
<meta name="robots" content="noindex, follow">
{{/if}}
This Handlebars conditional checks whether any facets are actively selected. If yes, it outputs a noindex directive. The follow value ensures Google still follows links on filtered pages (critical for product discovery during crawling). If no facets are selected, no robots tag renders, and the page remains indexable.
Category Description Placement
BigCommerce’s admin lets you set a category description at Products > Product Categories > [Category] > Description. This description renders via {{category.description}} in the template. Place it above the product grid. Google values content that appears early in the HTML source. A 150-300 word category description that uses the target keyword naturally and links to related categories gives the page topical weight that a product grid alone cannot provide.
Don’t duplicate the category description with the meta description. The meta description is a SERP snippet. The on-page description is indexable content. Write them separately. The on-page version should be longer, richer, and structured for the reader. The meta description should be a concise call-to-action that earns the click.
For the complete playbook on pagination, parameter handling, and canonical strategy across category pages, see our category page duplicate content guide.
9. Internal Linking Strategy
BigCommerce’s default internal linking is limited to navigation menus, breadcrumbs, and product grid links. That covers roughly 40% of what a well-linked store needs. The remaining 60% has to be built manually.
Product-to-Product Cross-Links
BigCommerce’s “Related Products” section uses an algorithm based on shared categories and customer purchase behaviour. You can’t control the anchor text. You can’t control which products appear unless you switch to manual related products, which doesn’t scale beyond 50 products.
The better approach: add contextual cross-links inside the product description HTML. Link from Product A’s description to Product B using keyword-rich anchor text. “Pairs well with our stainless steel brewing kettle” is a stronger internal link signal than a “Related Products” carousel with generic “View Product” links.
Category-to-Category Links
Category descriptions are the highest-value placement for internal links between category pages. If you sell coffee equipment, your “Grinders” category description should link to “Coffee Beans,” “Brewing Equipment,” and “Accessories.” These contextual links inside content carry more weight than navigation menu links because they sit within a topically relevant content block.
Blog-to-Commerce Links
BigCommerce’s built-in blog (found at Storefront > Blog) is underused on most stores. Blog posts that target informational keywords should link directly to relevant product and category pages. A post about “How to Choose a Coffee Grinder” should link to your Grinders category page and your top 3 grinder product pages using descriptive anchor text.
Build a linking map. List every category page and its target keyword. Map each category to 3-5 blog post topics that address related informational queries. Write those posts. Link them. This creates topical clusters that reinforce your category pages’ authority for commercial keywords.
Footer and Sidebar Links
Site-wide footer links have diminished value. Google understands that footer links are navigational, not editorial. Don’t stuff 40 category links in the footer hoping to pass equity. Instead, keep the footer clean. Link to top-level categories only. Use breadcrumbs for hierarchical linking. Reserve the footer for legal pages, contact info, and your most important landing pages.
10. Measuring Success
BigCommerce’s built-in analytics dashboard tracks revenue and conversion rates but tells you nothing about organic search performance. You need three external tools to measure SEO progress accurately.
Google Search Console
Verify your BigCommerce store in Google Search Console using the URL prefix method (not the Domain method, which requires DNS TXT record access that BigCommerce doesn’t always expose). Go to Store Setup > Store Settings > SEO and paste the Search Console verification meta tag into the “Analytics & Tracking” header scripts field.
Track these metrics monthly:
- Clicks from organic search (the only metric that directly correlates to revenue)
- Indexed pages (should match your intended indexable page count. If it’s higher, you have a duplicate content problem. If it’s lower, you have a crawlability problem.)
- Core Web Vitals pass rate (BigCommerce stores running Cornerstone 6.x+ typically pass. Stores on older themes or with heavy Script Manager injections often fail LCP.)
- Crawl stats (available under Settings > Crawl Stats. Look for spikes in “Not Modified” responses, which indicate Akamai is serving cached content to Googlebot.)
Google Analytics 4
Install GA4 through BigCommerce’s Store Setup > Web Analytics integration, not through Script Manager. The native integration fires the purchase event automatically on the order confirmation page, which means your revenue attribution data is accurate out of the box.
Build a custom Exploration report that segments organic traffic by landing page. Group landing pages by type: product pages, category pages, blog posts, and content pages. This shows you which page types are driving organic revenue and where the growth opportunities sit.
Rank Tracking
Choose a rank tracker that supports daily tracking for at least 500 keywords. Map keywords to page types: commercial keywords to category and product pages, informational keywords to blog posts. Track ranking movement alongside the technical changes you make. When you fix canonical tags, you should see ranking consolidation within 2-4 weeks. When you deploy structured data, you should see rich result appearances within 1-3 weeks (check via Search Console’s Rich Results report).
Revenue Attribution
The final metric is organic revenue. Pull it from GA4’s monetisation reports, filtered to the “Organic Search” channel. Compare month-over-month and year-over-year. Technical SEO fixes (canonicals, schema, URL structure) typically show revenue impact within 6-8 weeks. Content and internal linking improvements take 3-6 months to compound.
If you need hands-on help implementing any of these optimisations, our BigCommerce development team builds and deploys these fixes daily. We run BigCommerce SEO campaigns for stores across California, Texas, New York, and eight other states.
Frequently Asked Questions
Does BigCommerce support custom robots.txt?
BigCommerce auto-generates the robots.txt file and does not allow direct editing through the admin panel. You can append custom rules through the Store Setup > Store Settings > SEO > Robots.txt field, but you cannot remove or modify BigCommerce’s default disallow rules. The V2 API exposed a robots.txt endpoint that allowed full overrides, but that endpoint was deprecated in 2022. For stores that need full robots.txt control, the workaround is an Akamai edge rule that rewrites the robots.txt response. This requires Enterprise-tier support.
How do I add hreflang tags to a BigCommerce multi-storefront setup?
BigCommerce does not generate hreflang tags automatically, even across linked multi-storefronts. You must add them manually in templates/layout/base.html using hardcoded <link rel="alternate" hreflang="x" href="..."> tags. For stores with large catalogues, hardcoding isn’t practical. The scalable approach is a Handlebars helper that reads a JSON config file mapping each page to its alternate-language URLs. Build the JSON file via the BigCommerce API’s GET /stores/{store_hash}/v3/catalog/products endpoint, pulling custom URL fields from each storefront.
What’s the maximum number of 301 redirects BigCommerce supports?
BigCommerce doesn’t publish an official limit, but performance degrades noticeably above 5,000 redirects. The GET /stores/{store_hash}/v3/storefront/redirects endpoint paginates at 250 results per page. Stores that have undergone multiple URL migrations accumulate redirect chains that compound the load. Audit and flatten chains annually. Delete redirects for URLs that no longer receive any crawl or referral traffic (check the Screaming Frog crawl logs and server-side analytics).
Can I edit BigCommerce’s auto-generated structured data?
BigCommerce injects basic Product schema on product pages automatically. You cannot disable or edit this auto-generated schema through the admin panel. You can override it by adding your own, more detailed JSON-LD in the theme template. Google will use the most complete and specific schema it finds on a page. If your theme-level schema includes gtin, mpn, aggregateRating, and review properties that the auto-generated schema lacks, Google will prefer your version.
How long does it take for BigCommerce URL structure changes to fully propagate?
Application-level changes (the 301 redirects themselves) take effect immediately. Akamai CDN cache propagation takes 5-45 minutes after a purge request. Google’s re-crawling and re-indexing of the new URL structure takes 2-6 weeks depending on your site’s crawl frequency. The full propagation cycle, from clicking “Save” in the admin to seeing the new URLs in Google’s index, runs 3-6 weeks for a store with 1,000+ products.
Should I use BigCommerce’s built-in blog or a subdomain WordPress blog?
Use the built-in blog. A subdomain WordPress blog splits your domain authority between the main store and the subdomain. Google treats subdomains as semi-separate entities for ranking purposes. The built-in blog sits on the same domain, in the same Stencil theme, behind the same SSL certificate. Every blog post’s authority flows directly to your product and category pages through internal links. The built-in blog’s functionality is limited compared to WordPress, but the SEO architecture advantage outweighs the feature gap for most stores.