Web Quality Audit: Boldfit (boldfit.com)

Website: https://www.boldfit.com/ | Date: 03 Aug 2026 | Platform: Shopify (theme 141066502231) on Cloudflare | Industry: E-commerce — Fitness / D2C sports goods Test profile: Lighthouse 13.4.1 (PSI, Moto G Power / Slow 4G); CrUX Vis origin data; live curl + HTML inspection Business context: ~₹137–140Cr FY24 revenue, ~96% phone audience, Bessemer-backed value-positioned fitness D2C targeting ₹500Cr by FY26 (see business-analysis.md).


Executive Summary

Boldfit's site is functional and secure at the platform level but is held back by performance (mobile LCP) and Shopify-theme SEO gaps. It lands solid desktop performance (92) and acceptable accessibility (92/94) and best-practices (96) scores, but mobile performance scores just 74 with a 6.5s lab LCP (vs 1.9s on desktop — a 3.4× gap) driven by render-blocking CSS/JS and heavy hero images. Real-world CrUX shows mobile LCP "needs improvement & regressing" and rising INP, against a backdrop of 96% phone traffic where slow mobile load is not an edge case but the core user journey.

The biggest SEO finding is that every collection page — 194 of them — reuses the homepage's low-value meta description ("We've got all thee sports you need", with the misspelling "thee" hard-coded site-wide) and has no H1. Product pages carry the full weight of schema hygiene: the Product JSON-LD omits offers (price/availability/currency) entirely, so products are ineligible for price-rich results, and the brand name is inconsistent ("BoldFit" in schema vs "Boldfit" in Organization markup).

There is one broken image in the live RCB banner (mobile variant 404s) and a dead third-party checkout script (Shopflo) throwing console errors — real bugs hurting the brand's flagship sponsorship campaign pages.

Scores

CategoryMobileDesktopGrade
Performance7492🟡 (mobile) / 🟢 (desktop)
Accessibility9294🟢
Best Practices9696🟢
SEO9292🟢 (schema/on-page gaps hide here)
Agentic Browsing2/32/3🟡
Overall~82~93🟡

Mobile is 18 points behind desktop on performance with a 3.4× LCP gap — significant for a ~96%-mobile store.


1. Performance Audit

1.1 CrUX Real-World Field Data

Source: Chrome UX Report via CrUX Vis, origin https://www.boldfit.com.

Core Web Vitals Assessment: Needs Improvement on mobile. LCP is Needs Improvement (~2.9s, threshold good ≤2.5s / poor >4s) and regressing. INP is borderline Needs Improvement (~200ms, threshold good ≤200ms) and regressing. CLS is Good and stable (~0.04, threshold ≤0.10).

MetricGoodNeeds Imp.PoorCrUX 28d (mobile)Rating
LCP≤2,500ms2,500–4,000ms>4,000ms~2.7–3.0s (regressing)🟡 NI
INP≤200ms200–500ms>500ms~200ms (regressing)🟡 borderline NI
CLS≤0.100.10–0.25>0.25~0.02–0.04🟢 Good

Trend (28-week origin series, phone):

  • LCP: ~2.5s (Oct 2025) → deteriorated to ~3.0s (May 2026), easing to ~2.7–2.9s (Jul 2026). Overall regressing since late 2025.
  • INP: improved 193ms→165ms through early 2026, then climbed back to ~200ms in Jun–Jul (right at the good threshold, trending worse).
  • CLS: strong improvement 0.18→0.00 through early 2026; recent mild rise to ~0.04 but still comfortably Good.

PageSpeed's this-URL 28-day field panel corroborates: LCP ~2.4s, INP ~294ms (Needs Improvement), CLS 0.02, FCP ~2.1s, TTFB ~1.3s.

1.2 Core Web Vitals (Lighthouse Lab Data)

MetricMobileDesktopRating (mobile)
FCP2.4s0.6s🟡
LCP6.5s1.9s🔴 Poor
TBT0ms0ms🟢
CLS0.0010.003🟢
Speed Index2.4s0.7s🟢

Mobile is 3.4× slower than desktop on LCP (6.5s vs 1.9s). TBT and CLS are excellent — interaction responsiveness and visual stability are not the problem; loading is.

1.3 LCP Phase Breakdown (Mobile)

LCP element: hero slider image (div.hero__inner > a > div.media > img, a 1500×1832 PNG).

PhaseDuration
Time to First Byte30ms
Resource load delay200ms
Resource load duration30ms
Element render delay200ms
Pre-resource delay (render-blocking CSS/JS)~6.0s

The four labelled phases sum to only ~460ms of the 6.5s LCP — ~6s is pre-resource delay, i.e. render-blocking CSS and JS preventing the browser from even discovering the hero image. The hero image also carries loading="lazy" + fetchpriority="high" — contradictory signals that can further delay it. This is the single most important fix.

1.4 Performance Issues by Impact

Critical (>1s savings):

  1. Render-blocking requests — est. 1,050ms savings. Six first-party section CSS files (base.css 15.8KiB, section-header, section-announcement-bar, section-marquees, section-header-floating, swiper) block render, one for 750ms each in mobile lab. Worse, the theme loads jQuery 1.9.1 from Google's CDN (ajax.googleapis.com) as a render-blocking resource — 1,200ms in mobile lab. Fix: inline critical CSS, defer non-critical CSS/JS, and remove or localize/defer jQuery (Shopify's Liquid + Vanilla themes don't need it).
  2. LCP hero image lazy+high mismatch. The LCP <img> has loading="lazy" while also fetchpriority="high". Fix: remove loading="lazy" from the hero/LCP image, keep priority, and convert hero to WebP/AVIF.

High (200ms–1s):

  1. Image delivery — est. 1,799KiB savings off 2,023.8KiB of first-party image bytes. Resistance Tube "Set of 11" ships 180KiB (could save 168KiB; 840×840 served for a 272×272 display slot). RCB hero PNGs and Built_to_fly.png (1440×707 served for 1335×655) are oversized. Fix: WebP/AVIF conversion + tighter srcset widths.
  2. Third-party bloat on load path. Shopify hosting 147KiB, Gokwik (COD) 82KiB, Google CDN jQuery 33KiB, SagePilot WhatsApp widget 10KiB. Gokwik merchant JS and SagePilot load early. Fix: defer non-Cart/checkout 3rd parties below the fold.

Medium:

  1. Inefficient cache lifetimes — est. 73KiB savings. Gokwik kp-merchant-v2.js (68KiB) has a 1h TTL; merchant.integration.js 10m; SagePilot whatsapp-widget.js 4h. These are long-lived static JS assets with very short cache TTLs. Fix: extend cache to ≥ 1 day.
  2. Forced reflow — ~158ms total from JS DOM manipulation (theme sliders/tabs). Fix: batch DOM reads/writes in theme JS.
  3. Large DOM — 3,548 elements on homepage (recommendation: <1,500). Fix: prune unused sections/blocks.

1.5 Resource Transfer Summary

CategoryEst. transfer
First-party images2,023.8KiB (1,799KiB saveable)
Shopify hosting (JS/CSS)147KiB
Gokwik (COD)82KiB
Google CDN (jQuery)33KiB
SagePilot (WhatsApp)10KiB

2. Accessibility Audit

Lighthouse Accessibility: Mobile 92 / Desktop 94. The theme has good fundamentals (viewport, lang, labelled form fields, visible focus) but fails 4 automated checks.

2.1 Critical Issues

None at security-blocking severity; all is fixable theme work.

2.2 High Priority Issues

  1. Elements use prohibited ARIA attributes. The custom <hero-slider> element carries aria-label but custom elements (unless they define a role) don't support recommended ARIA roles/names — the label is dropped by AT. Fix: add an explicit role (e.g. role="region"/role="group") or move the accessible name to an associated text/aria-labelledby source.
  2. Links do not have a discernible name. Hero slide links (<a class="hero__slide-link">) wrap an <img alt=""> with no text — screen-reader users get unlabeled links. Fix: give hero images descriptive alt text or add an aria-label/sr-only text.
  3. Heading elements not in sequentially-descending order. Homepage uses h2→h3 (no h1) with h3s stacking; "Choose options" is an <h5>. Fix: enforce a single h1 and logical h1→h2→h3 nesting.
  4. Accessibility tree not well-formed. Related to the above ARIA/link issues; fixing 1 & 2 resolves this.

2.3 Positive Findings

  • All 310 homepage images have an alt attribute present (0 missing); 42 are empty (decorative).
  • <html lang="en"> correctly set.
  • <meta name="viewport"> present and correct.
  • Skip-to-content link present and working.
  • Touch targets and focus states generally adequate in the theme.

3. SEO Audit

Lighthouse SEO: 92 (mobile & desktop). The obvious score is fine, but manual inspection reveals structural on-page and schema gaps that a Lighthouse crawl of one URL can't surface.

3.1 Technical SEO

CheckResult
robots.txt🟢 Excellent — comprehensive: allows crawl, blocks /cart, /checkout, /orders, /account, filters/sort crawl-traps; declares Sitemap:; Shopify agentic/UCP instructions present
XML Sitemap🟢 sitemap.xml index → 509 products, 194 collections, 59 pages, 18+ blogs; all return 200
Canonical URLs🟢 Self-referencing on home, product, collection, blog pages
Indexation / noindex🟢 No unwanted noindex detected
URL structure🟢 Clean, readable, hyphenated: /products/, /collections/, /blogs/bold-blogs/
HTTPS🟢 Enforced with 301 from http://; HSTS present (but weak — see Security)
Mobile-friendly🟢 Responsive, viewport configured (critical given 95.9% phone traffic)

No issue with crawlability or architecture — Boldfit's technical SEO foundation is genuinely good.

3.2 On-Page SEO Issues

  1. 🔴 Homepage title is just Boldfit — no keywords, wastes the most valuable title tag on the domain. Fix: e.g. "Fitness & Gym Equipment, Yoga Mats, Sports Shoes | Boldfit" (≤60 chars).
  2. 🔴 Collection pages re-use the homepage meta description verbatim. All 194 collections (men, yoga, home-gym, bestsellers, sports-shoes…) emit <meta name="description" content="We've got all thee sports you need">. This is (a) duplicate/boilerplate for every collection and (b) contains a misspelling "thee". Collection descriptions are treated as auto-thin and CTR-squandered. Fix: unique meta description per collection (Shopify admin).
  3. 🔴 No H1 on homepage OR any collection page (0 <h1> detected). Homepage jumps h2→h3; collections have no h1 at all. Hurts relevance and heading hierarchy. Fix: theme template — single keyword-h1 per collection ("Yoga Mats & Accessories" etc.) and an h1 on homepage.
  4. 🟡 Homepage meta description is generic and irrelevant to a fitness store. It also repeats as the og:description.
  5. 🟡 twitter:image missing on homepage (card won't render an image on X).
  6. 🟡 og:image uses http:// scheme (content="http://...secure_url is https, so most platforms pick the secure copy — low severity but sloppy).
  7. 🟡 twitter:site is malformed@https://x.com/Boldfit_India?lang=en (mixes @ and full URL).
  8. 🟨 Product titles are good ("Heavy Resistance Band – Boldfit"); H1 present on product pages; blog posts have H1 + Article schema. On-page works where the theme's default templates were set.

3.3 Schema Markup (JSON-LD)

Source: rendered HTML on home, product, collection, and blog pages.

TypeHomeProductCollectionBlogNotes
OrganizationsameAs has 3 empty strings in the array
WebSite+ SearchAction (sitelinks) present on home only
Product⚠️Missing offers entirely (see below)
BreadcrumbList⚠️Visual breadcrumbs on product (11 mentions) but no BreadcrumbList JSON-LD detected
Articleheadless fine: headline, dates, author, image
ItemListNo product listing schema on collections

Critical Product-schema findings (products):

  • 🔴 offers object is completely absent (no price, priceCurrency, availability). Products cannot earn price/availability rich results — the most valuable SERP feature for a value-priced store where price is the #1 differentiator.
  • 🔴 Brand name inconsistent: Product schema brand.name="BoldFit" (capital F) vs Organization.name="Boldfit" — fragments the brand entity.
  • 🟡 sku is empty string on product JSON-LD.
  • 🟡 No aggregateRating/review — Boldfit shows no star ratings in SERP despite being a heavy-reviews e-commerce brand.
  • ✅ Positive: gtin (8906135450586) present; product IDs present.
Note (schema detection): structured data is verified in rendered DOM / raw HTML. Organization + WebSite + Product + Article JSON-LD confirmed; BreadcrumbList and ItemList are absent, which is not a tooling artifact.

3.4 Content Quality (E-E-A-T)

  • Experience/Expertise: Strong real-world signals — founder Pallav Bihani (Forbes India 30 Under 30), athlete ambassadors (Manika Batra, KL Rahul, Sania Mirza, Arshdeep Singh), RCB/IPL partnership.
  • Authoritativeness: Bessemer Series A, extensive media coverage. Blog (18 posts) covers informative queries (yoga-mat selection guides) with Article schema — good content depth.
  • Trustworthiness: HTTPS, phone/email/address, return/shipping/privacy policies, GST-typed brand. Comprehensive trust infrastructure.
  • Gap: Product descriptions are functional but generic boilerplate (AI-ish "Take your workouts to the next level…"), reused patterns across SKUs — dilute on-page differentiation for 509 nearly-identical-looking products.

4. International SEO

Not applicable — single-locale site (India), no hreflang, no alternate language URLs, html lang="en". content-language: en-IN and localization=IN cookie confirm India-only. No action required.


5. Best Practices & Security

Best Practices score: 96/96 (mobile/desktop). Strong baseline; failures are security-header depth.

5.1 Security Headers

HeaderValueVerdict
HSTSmax-age=7889238 (≈91 days), no includeSubDomains, no preload🟡 Low max-age; missing directives
X-Frame-OptionsDENY🟢
X-Content-Type-Optionsnosniff🟢
CSPblock-all-mixed-content; frame-ancestors 'none'; upgrade-insecure-requestsno script-src, no object-src🟡 High-severity gaps
COOPMissing🟡
X-XSS-Protection1; mode=block (deprecated; low value)🟡
referrer/NEL/Reportingreport-to + nel present (Cloudflare)🟢
x-download-optionsnoopen🟢

Issues worth fixing (in order):

  1. 🟡 CSP missing script-src — allows unsafe script execution if an injection occurs. Fix: add script-src 'self' 'unsafe-inline' https://cdn.shopify.com https://pdp.gokwik.co etc.
  2. 🟡 Missing object-src 'none' — plugins could load. Add it.
  3. 🟡 No COOP header — cross-origin isolation hardening missing. Add Cross-Origin-Opener-Policy: same-origin.
  4. 🟡 HSTS max-age 91 days too low (+ no includeSubDomains/preload). Bump to max-age=31536000; includeSubDomains; preload.
  5. 🟡 No Trusted Types directive in CSP (defence-in-depth against DOM XSS).

5.2 Broken Resources (Console Findings)

Lighthouse console captured three real load failures:

  • 🔴 RCB-flat_300_-hb-m.png returns 404 (confirmed live — mobile RCB-banner variant missing while desktop -d.png returns 200). Broken image on a flagship sponsorship banner on a ~96%-mobile site.
  • 🔴 cloudfront.net/shopflo.bundle.js fails with ERR_CONNECTION_FAILED — a dead/abandoned Shopflo(rebuy) checkout integration still referenced on every page. Dead third-party JS.
  • 🟡 checkout-merchant.snapmint.com returns 403 — Snapmint EMI snippet blocked (may be geo/bot-gated, but flagging).

These are real, user-visible bugs: remove the abandoned Shopflo script and fix/replace the broken RCB image.


6. Content Quality Assessment

6.1 Image Quality & Authenticity

  • 310 homepage images, 0 missing alt; 42 empty alt (decorative — acceptable).
  • Collection page: 213 images, 17 empty alt on product cards — product card images with empty alt are lost to image search and text-to-image/vision agents.
  • Product photography is real studio/sport imagery (authentic, not AI-generated) — no gene-fraud concern for a sport brand; this is strong and consistent with the sport-marketing identity.
  • Main image issue is delivery, not authenticity: oversized PNG/JPG heroes (LCP) and lazy-loaded LCP image.

6.2 UX Issues

  • Homepage hero/slider and the RCB mobile banner 404 (broken image on first viewport).
  • Dead Shopflo third-party script firing console errors (perceived flakiness, wasted bytes).
  • Collection pages lack an H1/on-page explainer — thin, undifferentiated pages.
  • Large DOM (3,548 elements) on homepage adds jank on low-end Android — exactly the users Boldfit targets.

7. Priority Recommendations

🔴 Immediate (This Week)

#IssueImpactEffort
1Fix broken RCB mobile banner 404 (RCB-flat_300_-hb-m.png)Brand/UX on flagship campaign, 96% of usersLow — re-upload asset
2Remove dead Shopflo script (shopflo.bundle.js ERR_CONNECTION_FAILED)Errors, wasted bytes, agentic jankLow
3Unblock LCP: remove loading="lazy" on hero image, convert hero to WebPMobile LCP 6.5s→~3s targetMedium
4Defer/remove render-blocking jQuery from Google CDN~1.2s mobile LCPMedium

🟡 Short-Term (This Month)

#IssueImpactEffort
5Unique meta description + title + H1 per collection; stop reusing homepage boilerplate; fix "thee" typoSERP CTR across 194 collectionsLow-Medium (bulk admin)
6Add offers (price/currency/availability) to Product JSON-LDPrice-rich results eligibilityMedium (theme JSON-LD)
7Fix brand-name consistency: "Boldfit" everywhere; purge empty sameAsEntity consistencyLow
8Optimize images: WebP/AVIF + tighter srcset~1.8MB savings, faster PLPsMedium
9CSP script-src + object-src 'none' + COOP + harder HSTSSecurity hardeningLow-Medium
10A11y: fix hero-slider ARIA, hero-link names, heading order, "Choose options" h5WCAG A complianceMedium

🟢 Long-Term (This Quarter)

#IssueImpactEffort
11Add BreadcrumbList + ItemList schema (collections)Breadcrumbs/rich listingsMedium
12Add aggregateRating/review schema on productsStar ratings in SERPMedium (app/feeds)
13Add twitter:image, fix malformed twitter:site, use https og:imageSocial share qualityLow
14Reduce DOM (3,548 elements) and defer all non-critical 3rd parties below foldMobile jank, INP headroomHigh
15Differentiate product descriptions (509 SKUs boilerplate)On-page + E-E-A-T depthHigh

Summary Score Card

CategoryScoreGrade
Performance (Mobile)74🟡
Performance (Desktop)92🟢
Accessibility92–94🟢
Best Practices / Security96 (with header gaps)🟢/🟡
SEO92 (Lighthouse) / structural gaps🟡
International SEON/A (single locale)
Content Quality85 (authentic imagery, thin product copy)🟢/🟡
UX88 (mobile perf + broken RCB img)🟡
Overall~85/100🟡

Verdict: Solid, secure, well-architected Shopify store with an excellent technical-SEO foundation, but mobile performance (LCP) is the single biggest business risk for a ~96%-mobile, price-driven audience, and the collection-page on-page SEO (meta/title/H1) plus missing Product offers schema are the biggest quick wins. Fix the two broken assets (RCB image, Shopflo script) immediately, then tackle LCP and collection on-page SEO.


Sources

  • Chrome UX Report / CrUX Vis — https://cruxvis.withgoogle.com/#/ — origin LCP/INP/CLS 28-week phone trend, CWV assessment, device split (95.9% phone / 4.1% desktop / 0% tablet).
  • PageSpeed Insights — https://pagespeed.web.dev/ — Lighthouse 13.4.1 lab scores (mobile/desktop), metrics, failed audits, insights, this-URL field panel, console errors, security audits.
  • Live site / headerscurl -sI https://www.boldfit.com/ — HSTS/CSP/X-Frame/COOP headers, powered-by: Shopify, Cloudflare, Gokwik preconnect, content-language: en-IN.
  • robots.txt — https://www.boldfit.com/robots.txt — crawl rules, Sitemap directive, agentic/UCP instructions.
  • sitemap.xml — https://www.boldfit.com/sitemap.xml → sitemap_products_1 (509), sitemap_collections_1 (194), sitemap_pages_1 (59), sitemap_blogs_1 (18+).
  • Rendered HTML inspection — homepage, /products/boldfit-heavy-resistance-band, /collections/yoga, /collections/men, /collections/home-gym, /collections/bestsellers, /collections/sports-shoes, /pages/about-us, /blogs/bold-blogs/… — title/meta/canonical/H1 counts, JSON-LD blocks (Organization, WebSite, Product, Article, BreadcrumbList, ItemList), image alt audit, broken-image 404 checks.
  • business-analysis.md — parent task (boldfit biz, t_b5efb1c8) — revenue/funding, audience, positioning context.