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.
| Category | Mobile Score | Desktop Score | Grade |
|---|---|---|---|
| Performance | Field: Passing | Field: Needs Improvement (CLS) | 🟢 Mobile / 🟡 Desktop |
| Accessibility | 76 | 74 | 🟡 |
| Best Practices | 54 | 54 | 🟡 |
| SEO | 92 | 92 | 🟢 |
| 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):
| Period | LCP | INP | CLS |
|---|---|---|---|
| 2026-03-01→03-28 | 1,571 ms | 107 ms | 0.03 |
| 2026-04-05→05-02 | 1,670 ms | 107 ms | 0.04 |
| 2026-05-10→06-06 | 1,748 ms | 118 ms | 0.04 |
| 2026-06-07→07-04 | 1,907 ms | 117 ms | 0.04 |
| 2026-06-28→07-25 | 1,958 ms | 121 ms | 0.05 |
| 2026-07-19→08-15 | 1,861 ms | 120 ms | 0.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):
| Period | Phone | Desktop | Tablet |
|---|---|---|---|
| 2025-10-26→11-22 | 86.8% | 13.2% | 0.00% |
| 2026-01-04→01-31 | 83.3% | 16.7% | 0.00% |
| 2026-04-12→05-09 | 79.0% | 20.0% | 1.09% |
| 2026-07-19→08-15 | 77.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.
| Metric | Mobile (field) | Desktop (field) | Good | Needs Imp. | Poor |
|---|---|---|---|---|---|
| LCP | 1,861 ms ✅ | 1,400 ms ✅ | ≤2,500 | 2,500–4,000 | >4,000 |
| INP | 120 ms ✅ | 54 ms ✅ | ≤200 | 200–500 | >500 |
| CLS | 0.04 ✅ | 0.18 ⚠️ | ≤0.10 | 0.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
| Impact | Issue | Evidence | Est. Savings | Recommendation |
|---|---|---|---|---|
| 🟡 High | LCP image is loading="lazy", no fetchpriority="high" | Lighthouse "LCP resources should not use loading=lazy"; hero slide <img loading="lazy"> | ~LCP | Add <link rel="preload" as="image"> + fetchpriority="high"; remove lazy on the above-fold hero |
| 🟡 High | Desktop CLS 0.18 (Needs Improvement) | CrUX field (§1.1) | Ranking signal | Audit above-the-fold layout shifts — banner image dimensions, font swap reflow, sticky-header/announcement-bar injection; set explicit width/height on hero media |
| 🟡 High | Render-blocking CSS/JS | "Render-blocking requests" est. 1,310 ms (mobile) / 140 ms (desktop) | 140–1,310 ms | Inline critical CSS for above-fold; defer non-critical theme JS |
| 🟡 Medium | Inefficient cache TTLs on 3rd-party checkout scripts | gokwik checkout.js/.gif/.js served with 10-minute TTL (1,003 KiB est. savings) | 1,003 KiB | Vendor-side; mitigate by lazy-loading gokwik SDK until checkout intent |
| 🟡 Medium | Image delivery not optimized | "Improve image delivery" est. 361 KiB (mobile) / 426 KiB (desktop) | 361–426 KiB | Serve WebP/AVIF, add srcset, proper sizes |
| 🟡 Medium | Font-display swap delay | InterTight (Cloudinary) est. 260 ms (mobile) / 60 ms (desktop) | 60–260 ms | font-display: optional or preload critical font; size-adjust fallback |
| 🟢 Low | Large DOM size | Homepage 3,723 elements; PDP 3,471; depth 26 | — | Trim redundant wrapper nodes in theme sections |
| 🟢 Low | Third-party script weight | Google Tag Manager 885 KiB / 627 ms main thread; Facebook fbevents.js 184 KiB; gokwik SDK | ~627 ms | Consolidate GTM tags; defer fbevents; load gokwik on checkout only |
| 🟢 Low | Legacy JavaScript | est. 13 KiB | 13 KiB | Enable 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-descriptionblocks, each rendering an H1). Multiple H1s dilute document outline and fail WCAG 1.3.1 (info & relationships).
2.2 High Priority Issues
- Missing
altattributes: 32 of 77 homepage images (img:not([alt])); 6 of 50 on the PDP. Pure decorative SVGs (GRS badge, carbon-saved icon) should getalt="", 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, noaria-labelon icon-only buttons (search, account, cart are image-only), and noaria-currenton 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
| Check | Status | Note |
|---|---|---|
| robots.txt | ✅ | Sitemap declared; cart/checkout/account/policies disallowed; allows GPTBot |
| XML Sitemap | ✅ | sitemap.xml → index of products/pages/collections + sitemap_agentic_discovery.xml |
| Canonical | ✅ | Self-referencing https://uppercase.co.in/ |
| Indexation | ✅ | No noindex on key pages |
| HTTPS | ✅ | Enforced (Cloudflare + Shopify), upgrade-insecure-requests |
| Mobile-friendly | ✅ | Responsive, viewport set, mobile-dominant traffic |
| URL structure | ✅ | Clean, hyphenated, keyword-rich handles (/products/glyde-pro-hard-luggage-trolley-bag-cabin-dark-silver) |
content-language | ✅ | en-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
| Type | Homepage | PDP | Note |
|---|---|---|---|
| Organization | ✅ | ✅ | Present |
| WebSite | ✅ | — | Present (no SearchAction sitelinks box detected) |
| Corporation | ✅ (dup) | — | Overlaps with Organization — entity fragmentation |
| OnlineStore | ✅ (dup) | — | Overlaps with Organization — entity fragmentation |
| Product | — | ✅ | Present (name, image, offers, brand) |
| BreadcrumbList | ❌ | ✅ | Missing on homepage/collection templates |
| VideoObject | ✅ (×5) | ✅ | Present (brand videos) |
| AggregateRating / Review | ❌ | Schema present but 0 reviews on sampled PDP | No star ratings in SERP; PDP shows "(0)" reviews |
| FAQPage | ❌ | ❌ | Not detected |
| LocalBusiness | ❌ | ❌ | Not detected (physical EBOs exist — opportunity) |
Schema issues:
- Three overlapping org types (Organization + Corporation + OnlineStore) on the homepage dilute the entity graph. Consolidate to one
@typearray or a single Organization withsameAs. - No BreadcrumbList on homepage/collections — only the PDP has it. Add site-wide.
- No LocalBusiness/Location schema despite 6+ physical EBOs — missed local-SEO + store-locator rich-result opportunity.
- Product reviews = 0 — schema exists but no
aggregateRatingwill 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;alttext 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/)
| Header | Value | Verdict |
|---|---|---|
| Strict-Transport-Security | max-age=7889238 (~91 days) | ⚠️ OK but missing includeSubDomains + preload |
| X-Frame-Options | DENY | ✅ |
| X-Content-Type-Options | nosniff | ✅ |
| Content-Security-Policy | block-all-mixed-content; frame-ancestors 'none'; upgrade-insecure-requests; | ✅ (functional; no script-src allowlist — acceptable behind Shopify) |
| X-XSS-Protection | 1; mode=block | ✅ (legacy, harmless) |
| x-permitted-cross-domain-policies | none | ✅ |
| COOP / COEP | not 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-cookieusesSecure; SameSite=Lax; HttpOnlyon 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
AggregateRatingrich 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)
| # | Issue | Impact | Effort |
|---|---|---|---|
| 1 | Add a visible, keyword-rich H1 to the homepage (e.g., "Sustainable Eco-Friendly Bags, Trolley Bags & Backpacks") instead of the logo-only H1 | Topical relevance, ranking | Low (theme edit) |
| 2 | Fix PDP duplicate H1 (4×) — keep one H1, convert others to H2/section headings | WCAG 1.3.1, outline clarity | Low (theme edit) |
| 3 | Add fetchpriority="high" + preload, remove loading="lazy" from the LCP hero image | LCP (field already Good; protects trend) | Low |
| 4 | Seed product reviews (verified-purchase) to populate AggregateRating | CRO + star-rich SERP | Medium |
🟡 Short-Term (This Month)
| # | Issue | Impact | Effort |
|---|---|---|---|
| 5 | Fix desktop CLS 0.18 — set explicit width/height on hero media, stabilize font swap, audit sticky/announcement-bar injection | Desktop CWV pass | Medium |
| 6 | Add BreadcrumbList schema site-wide (collections, pages, blog) | SERP breadcrumbs | Medium |
| 7 | Consolidate Organization/Corporation/OnlineStore into one entity; add sameAs social links | Entity clarity | Low |
| 8 | Add descriptive alt to the ~32 missing / 39 empty homepage images | Image SEO + a11y | Medium (bulk) |
| 9 | Improve image delivery (AVIF/WebP, srcset) for campaign banners | ~400 KiB, LCP | Medium |
| 10 | Defer/consolidate third-party scripts (GTM 885 KiB, fbevents, gokwik until checkout) | Main-thread, TBT | Medium |
🟢 Long-Term (This Quarter)
| # | Issue | Impact | Effort |
|---|---|---|---|
| 11 | Add LocalBusiness + per-EBO Location schema | Local SEO, store locator | Medium |
| 12 | Launch a content/FAQ hub (Article + FAQPage schema) for sustainable-luggage queries | Top-of-funnel, Discover | High |
| 13 | Strengthen HSTS (includeSubDomains; preload) | Security hardening | Low |
| 14 | Trim large DOM (3,700+ nodes) in theme sections | Parse/UX | Medium |
| 15 | Add SearchAction to WebSite schema for sitelinks search box | Branded SERP | Low |
Summary Score Card
| Category | Score | Grade |
|---|---|---|
| Performance (Mobile, field) | Passing (LCP 1.86s / INP 120ms / CLS 0.04) | 🟢 |
| Performance (Desktop, field) | Needs Improvement (CLS 0.18) | 🟡 |
| Accessibility | 76/100 | 🟡 |
| Best Practices | 54/100 | 🟡 |
| SEO | 92/100 | 🟢 |
| Security Headers | Strong (HSTS needs preload) | 🟢 |
| Content Quality / E-E-A-T | Strong (0 reviews gap) | 🟢 |
| Overall | Healthy, mobile-first D2C store; fix H1 + desktop CLS + reviews | 🟢 / 🟡 |
Sources & Citations
| Data | Source | What 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 split | cruxvis.withgoogle.com SVG form_factors_PHONE_Fractions DOM | Phone 77–87%, Desktop 13→21%, Tablet 0–1.5% |
| Lighthouse scores (mobile/desktop) | pagespeed.web.dev UI | Perf 25 / A11y 76-74 / BP 54 / SEO 92 / Agentic 3/4-2/4 |
| Lighthouse lab metrics | pagespeed.web.dev UI | Lab 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 headers | curl -sI https://uppercase.co.in/ | HSTS, X-Frame-Options DENY, CSP, X-Content-Type-Options, X-XSS-Protection, server cloudflare+Shopify |
| robots.txt / sitemap | curl https://uppercase.co.in/robots.txt, /sitemap.xml | Sitemap declared; products/pages/collections + agentic_discovery index |
| DOM/SEO/a11y/schema | Browser console on live homepage + PDP (Shopify-rendered) | title, meta, lang, viewport, OG/Twitter, alt counts, H1 duplication, schema types, breadcrumbs, contact info |
| Business context | business-analysis.md (task t_01f02d04) | Brand profile, revenue, funding, SKU count, EBO ambition |
Audit limitations (stated honestly):
- 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.
- 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.
- No broken-link crawl was run (robots.txt structure reviewed only).
- AI-image detection is filename-pattern based; it found no AI signatures but cannot certify every asset is human-made.