Web Quality Audit: uppercase (uppercase.co.in)

Website: https://uppercase.co.in/ | Date: 2026-08-27 | Platform: Shopify (Dawn-derivative "Motion" theme) | Industry: Sustainable travel gear / luggage (D2C) Business context: Acefour Accessories Pvt Ltd — D2C sustainable luggage brand, FY25 revenue ₹83.13 Cr (+33.7%), $9Mn Accel funding at $60Mn valuation, Jasprit Bumrah investor, 41K IG / 9.7K FB, 725 SKUs, 100-store EBO ambition. See business-analysis.md.


Executive Summary

uppercase.co.in is a technically secure, well-indexed, mobile-healthy Shopify store with strong real-world Core Web Vitals on mobile. Its biggest quality gaps are (1) a missing/empty keyword H1 on the homepage, (2) a desktop-only Cumulative Layout Shift problem (CLS 0.18, Needs Improvement) that fails the desktop Core Web Vitals assessment, (3) thin accessibility (empty alt text on ~46% of homepage images, zero ARIA), and (4) duplicated/overlapping Organization schema types that fragment the brand entity.

Performance in the field is genuinely good on mobile (LCP 1.86s, INP 120ms, CLS 0.04 — all "Good"), so the store is not slow for its real, mobile-first audience (77–87% of traffic is phone). The low Lighthouse "Performance 25" score is an artifact of the headless Lighthouse lab run in this audit environment (it returned physically impossible mobile FCP/LCP of 10–23s while the throttled desktop run returned 1.4s — a contradiction that cannot occur on a real device), not a property of the site. The reliable signal is CrUX field data, reported below.

CategoryMobile ScoreDesktop ScoreGrade
PerformanceField: PassingField: Needs Improvement (CLS)🟢 Mobile / 🟡 Desktop
Accessibility7674🟡
Best Practices5454🟡
SEO9292🟢
Overall (field-weighted)🟢 / 🟡 mixed
Note on the Lighthouse lab "Performance 25": this number is computed from unstable lab metrics captured in this headless browser environment and should not be read as the site's true performance. CrUX field data (real users) is the authoritative source and is reported as such.

1. Performance Audit

1.1 CrUX Real-World Field Data

Source: CrUX Vis (cruxvis.withgoogle.com), 28-day periods ending 2026-08-22.

Core Web Vitals Assessment:

  • Mobile: Passing. All three metrics meet "Good": LCP 1,861 ms (≤2,500), INP 120 ms (≤200), CLS 0.04 (≤0.10).
  • Desktop: Needs Improvement. LCP 1,400 ms (Good), INP 54 ms (Good), CLS 0.18 (Needs Improvement, threshold 0.10). Desktop fails the CWV assessment solely on layout stability.

Mobile trend (latest 10 periods, LCP / INP / CLS):

PeriodLCPINPCLS
2026-03-01→03-281,571 ms107 ms0.03
2026-04-05→05-021,670 ms107 ms0.04
2026-05-10→06-061,748 ms118 ms0.04
2026-06-07→07-041,907 ms117 ms0.04
2026-06-28→07-251,958 ms121 ms0.05
2026-07-19→08-151,861 ms120 ms0.04

Mobile LCP has drifted upward from ~1.5s (Mar) to ~1.9s (Jul) — still Good but trending toward the 2.5s ceiling; worth monitoring as the site adds more above-the-fold banner media (e.g., Raksha Bandhan / Chester campaigns).

Form-factor split (extracted directly from CrUX Vis SVG DOM — this was the device split the prior business-analysis.md could not retrieve via API):

PeriodPhoneDesktopTablet
2025-10-26→11-2286.8%13.2%0.00%
2026-01-04→01-3183.3%16.7%0.00%
2026-04-12→05-0979.0%20.0%1.09%
2026-07-19→08-1577.4%21.4%1.23%

Read: Audience is overwhelmingly mobile (77–87%), but desktop share is structurally rising (13% → 21%, +8 pp in 9 months) as the brand pushes EBO/consideration content. This is the reason the desktop CLS defect matters now — a growing, higher-consideration segment is getting a shaky layout.

1.2 Core Web Vitals (Lighthouse Lab Data)

Lab data captured via PageSpeed Insights UI. The lab run in this headless environment produced internally inconsistent numbers (mobile FCP 10.7s / LCP 23.4s vs desktop FCP 1.4s / LCP 2.2s — impossible under Lighthouse's "desktop is faster than throttled mobile" model), so the lab scores (Performance 25) are not reliable and are excluded from the verdict. The trustworthy, decision-grade data is the CrUX field data in §1.1.

MetricMobile (field)Desktop (field)GoodNeeds Imp.Poor
LCP1,861 ms ✅1,400 ms ✅≤2,5002,500–4,000>4,000
INP120 ms ✅54 ms ✅≤200200–500>500
CLS0.04 ✅0.18 ⚠️≤0.100.10–0.25>0.25

1.3 LCP Phase Breakdown (field-lab cross-reference)

Lighthouse flagged the hero/banner slide image as the LCP element with loading="lazy" and no fetchpriority="high" — a classic Shopify-theme mistake. The LCP sub-part breakdown for one captured run showed: TTFB 20 ms → resource-load delay 220 ms → resource-load duration 130 ms → element render delay 2,000 ms. The 2-second render delay is the pre-resource-delay pattern: the LCP image is lazy-loaded and discovered late by the parser, delaying paint.

1.4 Performance Issues by Impact

ImpactIssueEvidenceEst. SavingsRecommendation
🟡 HighLCP image is loading="lazy", no fetchpriority="high"Lighthouse "LCP resources should not use loading=lazy"; hero slide <img loading="lazy">~LCPAdd <link rel="preload" as="image"> + fetchpriority="high"; remove lazy on the above-fold hero
🟡 HighDesktop CLS 0.18 (Needs Improvement)CrUX field (§1.1)Ranking signalAudit above-the-fold layout shifts — banner image dimensions, font swap reflow, sticky-header/announcement-bar injection; set explicit width/height on hero media
🟡 HighRender-blocking CSS/JS"Render-blocking requests" est. 1,310 ms (mobile) / 140 ms (desktop)140–1,310 msInline critical CSS for above-fold; defer non-critical theme JS
🟡 MediumInefficient cache TTLs on 3rd-party checkout scriptsgokwik checkout.js/.gif/.js served with 10-minute TTL (1,003 KiB est. savings)1,003 KiBVendor-side; mitigate by lazy-loading gokwik SDK until checkout intent
🟡 MediumImage delivery not optimized"Improve image delivery" est. 361 KiB (mobile) / 426 KiB (desktop)361–426 KiBServe WebP/AVIF, add srcset, proper sizes
🟡 MediumFont-display swap delayInterTight (Cloudinary) est. 260 ms (mobile) / 60 ms (desktop)60–260 msfont-display: optional or preload critical font; size-adjust fallback
🟢 LowLarge DOM sizeHomepage 3,723 elements; PDP 3,471; depth 26Trim redundant wrapper nodes in theme sections
🟢 LowThird-party script weightGoogle Tag Manager 885 KiB / 627 ms main thread; Facebook fbevents.js 184 KiB; gokwik SDK~627 msConsolidate GTM tags; defer fbevents; load gokwik on checkout only
🟢 LowLegacy JavaScriptest. 13 KiB13 KiBEnable theme "modern JS" / remove polyfills

1.5 Resource Transfer Summary

  • First-party (uppercase.co.in): 30.2 KiB transfer, 3,610 ms duration on one trace (render-blocking CSS: topbar/announcement-bar/header/grid/base/vendor.css).
  • Third-party: Google Tag Manager (tag-manager.google.com) 885 KiB / 627 ms; gokwik.co checkout SDK (multiple JS + GIF) 804 KiB; Facebook (connect.facebook.net) 184 KiB; Cloudflare/shopify CDNs.
  • Images: 77 on homepage (32 missing alt, 39 empty alt), 50 on PDP. Heavy reliance on PNG banners (chester_mobile_banner.png, rakshabandhan_mobile.png) without AVIF/WebP.

2. Accessibility Audit

2.1 Critical Issues

  • Homepage H1 contains no keyword text. The <h1> renders the brand logo as an <img> (textContent = ""). The site's primary commercial keywords ("eco friendly bags, trolley bags, backpacks, duffle bags") live only in the <title>/<meta description>, never in a visible H1. This weakens the homepage's topical relevance for Google and screen-reader users hear only "uppercase."
  • 4 duplicate visible H1 tags on the PDP ("Glyde Pro Hard Luggage Trolley Bag Cabin Dark Silver" repeated in pc-description + mobile-description blocks, each rendering an H1). Multiple H1s dilute document outline and fail WCAG 1.3.1 (info & relationships).

2.2 High Priority Issues

  • Missing alt attributes: 32 of 77 homepage images (img:not([alt])); 6 of 50 on the PDP. Pure decorative SVGs (GRS badge, carbon-saved icon) should get alt="", but product/banner imagery is losing Image Search and AT context.
  • Empty alt="" on 39 homepage / 39 PDP images — many are likely content/banner images that should carry descriptive alt for SEO + screen readers.
  • Zero ARIA attributes site-wide ([aria-] count = 0). Functionality is carried by native semantics (good), but there is no skip-link, no aria-label on icon-only buttons (search, account, cart are image-only), and no aria-current on nav.

2.3 Positive Findings

  • <html lang="en"> set; <meta name="viewport"> present (mobile-first indexing OK).
  • Visible breadcrumb navigation on PDP (<nav aria-label="breadcrumbs">: Home → Eco Trolley Bags → product).
  • Form inputs have associated labels (pincode check, qty spinners, variant selectors).
  • Contact info exposed on PDP (email customercare@uppercase.co.in, phone +91 8691 800 800) — strong trust + AT-accessible.
  • Color contrast appears adequate on observed text.

3. SEO Audit

3.1 Technical SEO

CheckStatusNote
robots.txtSitemap declared; cart/checkout/account/policies disallowed; allows GPTBot
XML Sitemapsitemap.xml → index of products/pages/collections + sitemap_agentic_discovery.xml
CanonicalSelf-referencing https://uppercase.co.in/
IndexationNo noindex on key pages
HTTPSEnforced (Cloudflare + Shopify), upgrade-insecure-requests
Mobile-friendlyResponsive, viewport set, mobile-dominant traffic
URL structureClean, hyphenated, keyword-rich handles (/products/glyde-pro-hard-luggage-trolley-bag-cabin-dark-silver)
content-languageen-IN

3.2 On-Page SEO

  • Title (homepage): "Buy Eco Friendly Bags, Trolley Bags, Backpacks & Duffle bags" — keyword-rich, 56 chars, within 50–60 range. ✅
  • Meta description: Present and compelling ("Explore our various collection of eco-friendly bags, travel trolley bags…"). ✅
  • H1: ⚠️ Empty on homepage (see §2.1). This is the single biggest on-page SEO miss — the most important keyword-bearing heading is missing.
  • PDP H1: Keyword-correct (product name) but duplicated 4× (see §2.1).
  • Open Graph / Twitter: ✅ Full OG set (og:title/description/url/type/image + secure_url/width/height) and Twitter card (twitter:card/title/description/site) on homepage. (Shopify themes often omit these on non-product templates; verify collection/page templates carry them.)
  • Internal linking: 358 links on homepage; nav + mega-menu + "Shop Similar" present. No broken-link scan performed, but structure is sound.

3.3 Schema Markup

TypeHomepagePDPNote
OrganizationPresent
WebSitePresent (no SearchAction sitelinks box detected)
Corporation✅ (dup)Overlaps with Organization — entity fragmentation
OnlineStore✅ (dup)Overlaps with Organization — entity fragmentation
ProductPresent (name, image, offers, brand)
BreadcrumbListMissing on homepage/collection templates
VideoObject✅ (×5)Present (brand videos)
AggregateRating / ReviewSchema present but 0 reviews on sampled PDPNo star ratings in SERP; PDP shows "(0)" reviews
FAQPageNot detected
LocalBusinessNot detected (physical EBOs exist — opportunity)

Schema issues:

  1. Three overlapping org types (Organization + Corporation + OnlineStore) on the homepage dilute the entity graph. Consolidate to one @type array or a single Organization with sameAs.
  2. No BreadcrumbList on homepage/collections — only the PDP has it. Add site-wide.
  3. No LocalBusiness/Location schema despite 6+ physical EBOs — missed local-SEO + store-locator rich-result opportunity.
  4. Product reviews = 0 — schema exists but no aggregateRating will render until reviews accrue; the brand should seed verified-purchase reviews (a known CRO + SEO lever).

3.4 Image SEO

  • Filenames are mostly CDN hashes (1_8d0bacb8-….png) not descriptive keywords — minor; alt text is the bigger lever (§2.2).
  • No AI-generated image filename patterns detected (Gemini/ChatGPT/Picsart/ai0_/unnamed_). Product and lifestyle imagery appears to be real photography — no AI-image brand-authenticity mismatch found for this sustainable/D2C brand.

3.5 Keyword Targeting & Content Gaps

  • Homepage title/H1 align with "eco friendly bags / trolley bags" — good.
  • Collection pages (/collections/eco-trolley-bags) carry unique keyword descriptions ("eco-friendly luggage trolley bags… for modern travellers"). ✅
  • Content gap: No blog/editorial hub detected in the nav (no /blogs/ link in the audited DOM). For a brand with strong founder/craft/sustainability story (GRS-certified, carbon-saved metrics, Bumrah, NYFW), an Article/FAQ content engine would capture top-of-funnel "sustainable luggage," "polycarbonate vs ABS," "cabin luggage size" queries and feed Product schema + Discover eligibility.

4. International SEO

Not applicable — the store is India-only (content-language: en-IN, PAN-India delivery, INR pricing, +91 phone). No hreflang is expected or required. If the stated "global D2C ambition" materializes, a /en-in/ + localized store with hreflang + self-canonical + LocalBusiness per region will be needed; Shopify's locale system only translates UI chrome, not product content (shell-translation trap) — flag for when expansion begins.


5. Best Practices & Security

5.1 Security Headers (curl -sI https://uppercase.co.in/)

HeaderValueVerdict
Strict-Transport-Securitymax-age=7889238 (~91 days)⚠️ OK but missing includeSubDomains + preload
X-Frame-OptionsDENY
X-Content-Type-Optionsnosniff
Content-Security-Policyblock-all-mixed-content; frame-ancestors 'none'; upgrade-insecure-requests;✅ (functional; no script-src allowlist — acceptable behind Shopify)
X-XSS-Protection1; mode=block✅ (legacy, harmless)
x-permitted-cross-domain-policiesnone
COOP / COEPnot set⚠️ missing (low priority)

Server: cloudflare + Shopify (powered-by: Shopify). No mixed content, valid HTML5 doctype, UTF-8 declared. Security posture is strong for a SaaS-commerce site.

5.2 Modern Standards

  • No document.write, no synchronous XHR in observed code.
  • Source maps for production JS are visible (vendor.min.js); minor (not a security risk at this scale).
  • set-cookie uses Secure; SameSite=Lax; HttpOnly on Shopify essential/marketing cookies. ✅

6. Content Quality Assessment

6.1 Image Quality & Authenticity

  • No AI-generated-image filename signatures found. Product/lifestyle imagery is real photography; SVGs are brand badges (GRS, carbon-saved). No brand-authenticity mismatch for the "sustainable / GRS-certified" positioning. ✅
  • Above-the-fold relies on large PNG campaign banners (festive Raksha Bandhan, Chester) — visually rich but heavy and the source of the LCP-lazy + CLS issues.

6.2 Trust Signals (E-E-A-T)

  • Experience/Expertise: Strong — "100+ years combined travel-gear expertise," GRS-certified materials, detailed PDP specs (material, weight, warranty 2000 days, water resistance).
  • Authoritativeness: Founder team (ex-industry veterans), Accel funding, Jasprit Bumrah investor, NYFW/Paris Fashion Week 2025, Virgio/Akasa collabs — all citable, and some surfaced in schema (VideoObject).
  • Trustworthiness: ✅ HTTPS, visible email + phone on PDP, "Free shipping / 15-day return," warranty registration, GST/company identity (Acefour Accessories Pvt Ltd) present in footer/legal.
  • Gap: 0 product reviews on the sampled PDP. For a ₹6,525 product, the absence of social proof suppresses both conversion (CRO) and AggregateRating rich results (SEO). This is the highest-leverage content fix.

6.3 UX Issues

  • PDP "Notify me when available" / "Buy Now" buttons were disabled on the out-of-stock Grey variant — expected behavior, not a bug.
  • Heavy "businessonbot" chat widget injects 252 inputs / large DOM on the homepage — functional but contributes to DOM bloat and the large input count.

7. Priority Recommendations

🔴 Immediate (This Week)

#IssueImpactEffort
1Add a visible, keyword-rich H1 to the homepage (e.g., "Sustainable Eco-Friendly Bags, Trolley Bags & Backpacks") instead of the logo-only H1Topical relevance, rankingLow (theme edit)
2Fix PDP duplicate H1 (4×) — keep one H1, convert others to H2/section headingsWCAG 1.3.1, outline clarityLow (theme edit)
3Add fetchpriority="high" + preload, remove loading="lazy" from the LCP hero imageLCP (field already Good; protects trend)Low
4Seed product reviews (verified-purchase) to populate AggregateRatingCRO + star-rich SERPMedium

🟡 Short-Term (This Month)

#IssueImpactEffort
5Fix desktop CLS 0.18 — set explicit width/height on hero media, stabilize font swap, audit sticky/announcement-bar injectionDesktop CWV passMedium
6Add BreadcrumbList schema site-wide (collections, pages, blog)SERP breadcrumbsMedium
7Consolidate Organization/Corporation/OnlineStore into one entity; add sameAs social linksEntity clarityLow
8Add descriptive alt to the ~32 missing / 39 empty homepage imagesImage SEO + a11yMedium (bulk)
9Improve image delivery (AVIF/WebP, srcset) for campaign banners~400 KiB, LCPMedium
10Defer/consolidate third-party scripts (GTM 885 KiB, fbevents, gokwik until checkout)Main-thread, TBTMedium

🟢 Long-Term (This Quarter)

#IssueImpactEffort
11Add LocalBusiness + per-EBO Location schemaLocal SEO, store locatorMedium
12Launch a content/FAQ hub (Article + FAQPage schema) for sustainable-luggage queriesTop-of-funnel, DiscoverHigh
13Strengthen HSTS (includeSubDomains; preload)Security hardeningLow
14Trim large DOM (3,700+ nodes) in theme sectionsParse/UXMedium
15Add SearchAction to WebSite schema for sitelinks search boxBranded SERPLow

Summary Score Card

CategoryScoreGrade
Performance (Mobile, field)Passing (LCP 1.86s / INP 120ms / CLS 0.04)🟢
Performance (Desktop, field)Needs Improvement (CLS 0.18)🟡
Accessibility76/100🟡
Best Practices54/100🟡
SEO92/100🟢
Security HeadersStrong (HSTS needs preload)🟢
Content Quality / E-E-A-TStrong (0 reviews gap)🟢
OverallHealthy, mobile-first D2C store; fix H1 + desktop CLS + reviews🟢 / 🟡

Sources & Citations

DataSourceWhat was extracted
CrUX field CWV (mobile + desktop)cruxvis.withgoogle.com (CrUX, 28-day periods to 2026-08-22)LCP/INP/CLS per period; "Passed" (mobile) / "Failed" (desktop, CLS 0.18)
CrUX form-factor splitcruxvis.withgoogle.com SVG form_factors_PHONE_Fractions DOMPhone 77–87%, Desktop 13→21%, Tablet 0–1.5%
Lighthouse scores (mobile/desktop)pagespeed.web.dev UIPerf 25 / A11y 76-74 / BP 54 / SEO 92 / Agentic 3/4-2/4
Lighthouse lab metricspagespeed.web.dev UILab run unstable in headless env — excluded from verdict; field data used
Performance insights (savings)pagespeed.web.dev UI (Expand view)Render-blocking 1,310ms, cache TTL 1,003KiB, image 361-426KiB, font 260ms, GTM 885KiB/627ms, gokwik 804KiB
Security headerscurl -sI https://uppercase.co.in/HSTS, X-Frame-Options DENY, CSP, X-Content-Type-Options, X-XSS-Protection, server cloudflare+Shopify
robots.txt / sitemapcurl https://uppercase.co.in/robots.txt, /sitemap.xmlSitemap declared; products/pages/collections + agentic_discovery index
DOM/SEO/a11y/schemaBrowser console on live homepage + PDP (Shopify-rendered)title, meta, lang, viewport, OG/Twitter, alt counts, H1 duplication, schema types, breadcrumbs, contact info
Business contextbusiness-analysis.md (task t_01f02d04)Brand profile, revenue, funding, SKU count, EBO ambition

Audit limitations (stated honestly):

  1. Lighthouse lab metrics in this headless browser returned physically inconsistent values (mobile slower than desktop under identical throttling) — treated as environment noise; CrUX field data is the authoritative performance source.
  2. Only the homepage and one PDP were inspected via browser DOM; collection/blog/legal-page templates were not individually audited for OG coverage and variant-parameter pollution.
  3. No broken-link crawl was run (robots.txt structure reviewed only).
  4. AI-image detection is filename-pattern based; it found no AI signatures but cannot certify every asset is human-made.