Web Quality Audit: Neeman's (neemans.com)

Website: https://neemans.com | Date: 27 August 2026 | Platform: Shopify (custom "nms" theme, id 184059658283) | Industry: D2C Sustainable Footwear (India) Business context: see business-analysis.md — ₹108 Cr FY25 revenue (+38% YoY, loss ₹23 Cr), 592 SKUs, 30+ EBO stores, 250+ collection handles, phone-default mobile audience, MRP-anchoring discount model.


Executive Summary

Neeman's is a content-rich, conversion-focused Shopify store, but it carries three structural quality problems that directly threaten revenue (its audience is phone-first mobile shoppers on mid-range Android devices):

  1. Mobile performance is failing real users. CrUX field data (Jun–Aug 2026) shows LCP ~2,680–2,834 ms and INP ~270–280 ms — both Needs Improvement on the 75th percentile — and a clear regression from a March 2026 low (LCP 2,269 ms / INP ~210 ms). Lighthouse mobile lab data is even worse (LCP 23.8 s in the lab, FCP 6.6 s, TBT 1,580 ms), driven by render-blocking CSS (~3.9 s), a 1,130 KB+ Google Tag Manager/GA container stack, and third-party checkout/loyalty scripts (gokwik, unloq, fealtyx).
  2. Image alt-text is broken at scale. 58 of 370 homepage images carry literal "Translation missing: en.Men", "Translation missing: en.Category_sneaker", etc. — a localization-key bug that produces meaningless, duplicate alt text across the entire primary navigation. This is an accessibility and SEO regression (screen readers read the raw key; image search gets junk).
  3. On-site trust/organization signals are mis-wired. The Organization schema logo points to a Shopify no-image placeholder, has no sameAs social profiles, and the footer Twitter link is a dead bare https://twitter.com (real handle is @Neemans190038). The homepage og:image is the 32×32 favicon — broken social-share previews on the most-shared page.

The site does many things right: clean HTML (html lang="en", viewport present), single logical H1, valid Organization/WebSite/BreadcrumbList/FAQPage schema on the homepage, self-referencing canonicals, HTTPS/HSTS/CSP, and product pages with good keyword titles, meta descriptions, and real og:images. But the issues above are P0/P1 for a mobile-first D2C brand whose growth depends on organic + social + paid-search traffic.

CategoryMobileDesktopGrade
PerformanceFailing field (LCP 2.8s NI, INP 279ms NI); Lab LCP 23.8sLab LCP 1.4s, TBT 490ms (Good-ish)🔴 Mobile / 🟢 Desktop
AccessibilityAlt-text bug (58 imgs); otherwise solidSame🟡
Best PracticesLogo placeholder, no CSP script-src, HSTS lowSame🟡
SEOog:image favicon, 228 collection handle sprawl, no hreflangSame🟡
OverallMobile experience degradedDesktop acceptable🔴 (mobile-led risk)
Note the mobile-vs-desktop gap ratio is >15× on LCP (lab 23.8 s mobile vs 1.4 s desktop) — the single biggest risk for a phone-default brand.

1. Performance Audit

1.1 CrUX Real-World Field Data

Source: CrUX Vis (chromeuxdash) for origin https://neemans.com. CrUX Vis exposes the phone form factor only for this origin (no desktop/tablet split is published in the tool).

Core Web Vitals Assessment: Needs Improvement on phones. LCP and INP are both in "Needs Improvement"; CLS is Good.

MetricLatest (2026-07-26 → 2026-08-22)Threshold (Good / Poor)Rating
LCP2,680 ms≤2,500 / >4,000 ms🟡 Needs Improvement
INP274 ms≤200 / >500 ms🟡 Needs Improvement
CLS0.01≤0.10 / >0.25🟢 Good

Trend (phone, 75th pct) — clear post-March 2026 regression:

PeriodLCP (ms)INP (ms)CLS
2026-03-222,269~2100.01
2026-04-182,275~2200.01
2026-05-302,3362300.02
2026-06-202,4242570.07
2026-07-042,4982530.02
2026-07-252,7632650.02
2026-08-082,8242790.01
2026-08-222,6802740.01
  • LCP deteriorated ~18% from its March low (2,269 → 2,824 ms); INP rose ~33% (210 → 279 ms). The recent dip to 2,680 ms (Aug 22) is a slight recovery but still ~18% above the March optimum.
  • CLS spiked to 0.07 in May–June 2026 then settled back to 0.01 — indicates an intermittent layout-shift bug (likely late-loading banner/slideshow images without reserved dimensions; the lab CLS culprit was the COMFORT_CLUB slideshow image with no width/height reservation).

Interpretation: A phone-default, mobile-shopping audience is exactly the segment that feels slower loads most acutely. The 2026 regression is a revenue red flag — every 100 ms of LCP on mobile correlates with measurable conversion drop for D2C fashion. Monitor until LCP < 2.5 s and INP < 200 ms are restored.

1.2 Core Web Vitals (Lighthouse Lab Data)

Source: PageSpeed Insights, 27 Aug 2026.

MetricMobileRatingDesktopRatingThreshold
FCP6.6 s🔴 Poor0.7 s🟢 Good≤1.8 s
LCP23.8 s🔴 Poor1.4 s🟢 Good≤2.5 s
TBT1,580 ms🔴 Poor490 ms🟡 NI≤200 ms
CLS0.00🟢 Good0.022🟢 Good≤0.10
Speed Index14.3 s🔴 Poor3.7 s🟡 NI≤3.4 s
Lighthouse mobile lab (throttled mid-tier device) is dramatically worse than field — typical of heavy render-blocking + third-party script on a slow CPU. The 23.8 s LCP lab vs 2.8 s field gap means the real-world median is saved by fast devices/caching, but a meaningful long-tail of mid-range Android users hits multi-second LCP.

1.3 LCP Phase Breakdown (Mobile, lab)

LCP element: a.slideshow__slide > div.content-over-media > picture > img (COMFORT_CLUB banner, 2500×825).

PhaseDurationNote
Time to First Byte (TTFB)80 msHealthy
Resource Load Delay220 msOK
Resource Load Duration60 msOK
Element Render Delay2,080 ms🔴 Dominant — main-thread blocked by scripts/CSS before paint

The 2.08 s render delay (vs only 80 ms TTFB) confirms the bottleneck is client-side: render-blocking CSS and JS (theme.css + nms-critical + nms-global + nms-theme-override = ~3,920 ms of blocking on the main thread) plus the 1,130 KB GTM/GA stack prevent the browser from painting the hero image. Pre-resource delay is not the issue; main-thread congestion is.

1.4 Performance Issues by Impact

Critical (>1 s savings):

  • Render-blocking CSS (3,920 ms main-thread). Five separate theme stylesheets (theme.css 24 KB, nms-global.css 6.6 KB, nms-critical.css 4.4 KB, nms-theme-override.css 2.8 KB, compiled_assets/styles.css 4.4 KB) load synchronously. Fix: inline critical CSS, defer/async the rest, or merge. Est. 2–4 s LCP savings on mobile.
  • Multiple Google Tag Manager / GA containers (1,130 KB, 1,362 ms main-thread). At least 5 GTM/GA IDs detected (GTM-578LLRZ, G-3042L5GP9T, AW-766…, G-VDE0ZFZ4LP, GT-5D9RG3BJ). GTM alone: 1,132 KB transferred, 409 ms main-thread. Fix: consolidate to one GTM container + server-side tagging; defer non-essential tags. Est. 500 ms–1 s TBT savings.
  • Third-party checkout/loyalty scripts. gokwik (454 KB), unloq/fealtyx (67 KB + 58 KB unattributable), capi-automation S3 bundle, judge.me, shopify-perf-kit — all render/execute on the homepage. Fix: lazy-load below-fold widgets; load gokwik only on cart/checkout. Est. 300–600 ms TBT.

High (200 ms–1 s):

  • LCP image not preloaded / oversized. COMFORT_CLUB banner is 2500×825 served full-size to mobile. Fix: width/height attributes + fetchpriority="high" + preload + mobile srcset. (Note: desktop gets a different COMFORT_CLUB_-_MOB_BANNER — confirm mobile actually receives the mobile variant.)
  • Excessive <link rel="preconnect"> / preload. Headers list 2× cdn.shopify.com preconnect + 5 stylesheet preloads. Some preloads (styles) duplicate render-blocking. Fix: keep preconnect to 2–3 hosts; drop redundant preloads.
  • Large DOM size (6,783 elements; PSI flagged 6,520). Over the 1,500 "good" threshold by 4×. Fix: trim mega-menu/navigation duplication, virtualize carousels.

Medium/Low:

  • Unused CSS (theme ships CSS for unused sections — confirmed nms-search.js, theme.js parsed but partial use).
  • Multiple GTM setTimeout/long-task reflows (gtm.js:844 140 ms; wpm pixel-registration loop 2,800 ms total).

1.5 Resource Transfer Summary (Mobile)

CategoryTransferMain-threadNotes
Google Tag Manager/GA1,130 KB1,362 ms5 containers; top CPU consumer
neemans.com 1st party (JS+CSS)~870 KB~5,000 ms (CPU)theme.js, wpm, search, perf-kit
gokwik (checkout)454 KBloads on homepage unnecessarily
unloq / fealtyx~125 KBloyalty widget
Images (370 on page)~870 KB (lab estimate)many lack proper sizing

2. Accessibility Audit

2.1 Critical Issues

  • Broken image alt text — "Translation missing" keys (58 images). Every primary-navigation category tile and hero/edition tile uses alt text like "Translation missing: en.Men", "Translation missing: en.Category_sneaker", "Translation missing: en.Navigation_new_launches". This is a Shopify theme localization bug: the theme references translation keys that don't exist in en.default.json, so it outputs the raw key. Impact: screen readers announce meaningless keys; visually the images render fine but image SEO gets duplicate junk alt. WCAG A failure (images must have meaningful alt). Fix: add the missing en locale keys in the theme's locales/en.default.json (or hard-code the category labels), so nav tiles read "Men", "Sneakers", "New Launches", etc.

2.2 High Priority Issues

  • 24 images with empty alt="" on the homepage (decorative banners, grid.svg, testimonial portraits). Most are legitimately decorative (empty alt is correct for icons) — but testimonial customer photos (review.png, 4_0a75fb22…png, etc.) use alt="", hiding real customer content from image search and violating the "descriptive alt for content images" rule. Fix: give testimonial/product photos descriptive alt (e.g., "Verified buyer review — The Loaker Tan").
  • No ARIA attributes detected (ariaAttrs: 0). The interactive elements (carousel "Go to item N", mega-menu, variant switches) rely on default semantics without aria-label/aria-current. The carousel dots do have accessible names ("Go to item 1") so this is borderline; add aria-current to active states.
  • aria-hidden/focusable icons: the category nav uses SVG icons without role="img" or labels — acceptable if decorative.

2.3 Positive Findings

  • Skip to content link present (ref e1). ✅
  • Single <h1> (logo/brand) + logical <h2>/<h3> hierarchy (15 h2s). ✅
  • <html lang="en"> set. ✅
  • <meta name="viewport"> present (mobile-friendly). ✅
  • Visible focus styling on links/buttons (observed). ✅
  • 438 links, 211 buttons — all native interactive elements. ✅

3. SEO Audit

3.1 Technical SEO

CheckStatusEvidence
HTTPS enforcedHSTS max-age=7889238 (≈91 days — see 5.1)
robots.txt⚠️Blocks /search, /cart, /checkout, /account (correct) but repeats Sitemap: 21× (Shopify bug — harmless but ugly).
XML Sitemapsitemap.xml index present (200); includes sitemap_products_1/2.xml, sitemap_collections_1.xml, and a new sitemap_agentic_discovery.xml (agentic-commerce discovery).
CanonicalHomepage self-canonical https://neemans.com/. PDPs self-canonical. No cross-locale canonical issue (no hreflang deployed).
IndexationNo noindex on important pages.
Mobile-friendlyViewport present; responsive theme. But mobile CWV failing (see §1).
URL structureClean, hyphenated, keyword-rich (/products/rapid-breeze-serene-lace-ups-for-men-ivory).
Redirect chains⚠️Not exhaustively tested; canonical + Cloudflare healthy.

3.2 On-Page SEO Issues

  • Homepage title lacks keywords: "Buy Shoes for Men & Women Online - Neemans" — brand at end, but no category keywords ("sustainable sneakers", "Merino wool shoes"). For a brand whose differentiator is sustainable materials, the title misses "comfortable sustainable footwear." Fix: "Sustainable Comfortable Footwear for Men & Women | Neeman's".
  • Meta description present & good on homepage (keyword-rich). ✅ PDPs also have unique, well-written descriptions. ✅
  • og:image is the 32×32 favicon on the homepage. og:image = …/favicon-32x32…png?width=2048 (a 32×32 px file scaled to 2048 — pixelated garbage when shared). Twitter card image same. This breaks every Facebook/WhatsApp/Instagram-link share preview of the homepage — a major social-CTR loss for a brand that leans on social (595K IG). Fix: set a 1200×630 hero social image in theme.liquid via the social meta object.
  • PDP og:image is correct (real product shot). ✅ So the bug is homepage/collection templates only — verify all non-PDP templates.
  • No hreflang. Site is en-IN only (no multilingual), so hreflang is not required — but the new sitemap_agentic_discovery.xml suggests agentic-commerce prep. No action needed unless they launch en-US/regional stores.
  • Keyword cannibalization risk from 228 collections (see 3.6).

3.3 Schema Markup

Present on homepage: BreadcrumbList, ImageObject, Organization, WebSite, FAQPage. Good coverage — but:

SchemaStatusIssue
Organization⚠️logo = …/no-image-100-2a702f30_small.gif (broken Shopify placeholder). No sameAs social profiles (IG/FB/LinkedIn/YouTube omitted). Missing foundingDate, telephone is present (+91 9059938941). Fix: set a real logo asset + add sameAs array.
WebSite + SearchActionPresent (sitelinks search box eligible).
BreadcrumbListPresent.
FAQPagePresent (rich-result eligible).
Product / AggregateRating⚠️On PDP, Product schema not in static HTML (JS-injected by Judge.me). aggregateRating not found in raw HTML — must verify it renders client-side. Risk: if Judge.me fails to inject, star ratings won't appear in SERPs. Recommend server-side/Shopify-native Product+AggregateRating via the product template.
LocalBusinessNot present despite 30+ physical stores. Fix: add LocalBusiness/ShoeStore with address + geo for the Hyderabad HQ / store locator.

3.4 Image SEO

  • Filenames are mostly descriptive Shopify handles (RapidBreezeSereneLaceUpsMenIvory-Ether_12.jpg). ✅
  • Alt text quality is the main gap (see §2.1 — 58 broken, 24 empty-on-content). Product PDP images need verification (browser-render timed out; flagged for follow-up).
  • Lazy-load: confirmed below-fold images use loading — but the LCP hero is correctly NOT lazy (good). The issue is hero is oversized, not lazy-loading.

3.5 Internal Linking

  • 438 homepage links, 211 buttons — rich internal graph. ✅
  • Category nav links to collections (200). ✅
  • Broken footer Twitter link (https://twitter.com — bare, no handle). Social proof leak + lost follower acquisition. Real handle @Neemans190038. Fix: https://x.com/Neemans190038.

3.6 Keyword Targeting & Catalog Hygiene

  • 228 collection handles in sitemap, many auto-generated spo-filter-* (e.g., spo-filter-3f960fec865dab23adfdf47ad0079f8a) — filter/SEO bloat that dilutes crawl budget and creates near-duplicate indexable URLs. Combined with the 250+ handle count from business analysis, this is the top SEO-hygiene issue.
  • Recommendation (carried from business-analysis.md): consolidate to ~15–20 logical categories; noindex/Disallow the spo-filter-* and color/occasion vanity collections.

4. International SEO

Not applicable — single locale (en-IN), no hreflang deployed, no multilingual templates. No shell-translation risk present. The sitemap_agentic_discovery.xml is a forward-looking agentic-commerce feed, not i18n. No action required unless regional stores launch.


5. Best Practices & Security

5.1 Security Headers (from curl -sSI)

HeaderValueAssessment
Strict-Transport-Securitymax-age=7889238 (~91 days)🟡 Low — should be max-age=31536000; includeSubDomains; preload (≥1 year).
Content-Security-Policyblock-all-mixed-content; frame-ancestors 'none'; upgrade-insecure-requests;🟡 Missing script-src / object-src 'none' — no script allowlist; weak against XSS. Add a real CSP with nonces.
X-Frame-OptionsDENY
X-Content-Type-Optionsnosniff
X-XSS-Protection1; mode=block✅ (legacy, harmless)
Referrer-Policy(not set)🟡 Add strict-origin-when-cross-origin.

Cloudflare fronts the origin; COOP missing (low impact). Overall: good baseline, but CSP needs a script-src policy and HSTS max-age should be ≥1 year for a payments-handling store.

5.2 Modern Standards

  • Valid HTML5, UTF-8 charset. ✅
  • No document.write / sync XHR observed. ✅
  • No mixed content (CSP upgrade-insecure-requests + block-all-mixed-content). ✅
  • 9 iframes on homepage (gokwik/unloq/loyalty widgets) — acceptable but each is a third-party risk surface.

6. Content Quality Assessment

6.1 Image Quality & Authenticity

  • No AI-generated-image fingerprint patterns detected in filenames (Gemini_Generated_, ChatGPT_Image_, ai0_, unnamed_1). Product/campaign imagery uses real Shopify CDN assets (e.g., COMFORT_CLUB_-_WEB_BANNER.jpg, RapidBreezeSereneLaceUps…jpg). For a "Made-in-India / natural materials" brand, authentic photography is intact — no brand-authenticity mismatch (unlike the critical AI-image risk flagged for artisan brands). ✅
  • Testimonial images (4_0a75fb22…png, review.png) are small customer photos with empty alt — fine visually, fix alt (see §2.2).

6.2 Trust Signals

  • Phone +91 9059938941 (TollFree contactPoint in schema). ✅
  • Email info@neemans.com, privacyofficer@neemans.com. ✅
  • Policies: shipping-return (200), privacy (200), contact (200) all live. ⚠️ /pages/terms-of-service, /pages/about-us, /pages/track-your-order return 404 — broken/incomplete policy pages (about-us 404 is a notable trust + E-E-A-T gap for a brand with a strong founding story). Fix: publish About/Terms/Track-Order.
  • Reviews: Judge.me integrated (homepage surfaces Flipkart/Amazon rating badges). ⚠️ AggregateRating schema not in static HTML (JS-injected) — verify rich-result eligibility.
  • Business registration / GST: not surfaced on-site (common for D2C; low priority).

6.3 E-E-A-T

  • Experience/Expertise: founding story ("Change the Norm", Merino wool first-mover) present on /pages/neemans-story and /pages/why-neemans. ✅ But /pages/about-us 404 means the story isn't in the standard About slot.
  • Authoritativeness: press (ET, Inc42), founder 40Under40 — external, not on-site.
  • Trustworthiness: HTTPS, policies, phone/email present. Org schema logo broken undermines entity trust in structured data.

7. Priority Recommendations

🔴 Immediate (This Week)

#IssueImpactEffort
1Fix "Translation missing" alt-text bug (add en locale keys for nav categories)A11y compliance + image SEO on 58 critical nav imagesLow (theme locale file)
2Replace homepage og:image favicon with 1200×630 hero social image (all non-PDP templates)Fixes broken social-share previews (595K IG audience)Low (theme.liquid)
3Fix footer Twitter link → https://x.com/Neemans190038Restores social proof / follower acquisitionTrivial
4Consolidate GTM/GA to 1 container + server-side tagging; defer non-essential tags−500 ms–1 s mobile TBT, faster INPMedium

🟡 Short-Term (This Month)

#IssueImpactEffort
5Inline critical CSS + defer/merge 5 theme stylesheets−2–4 s mobile LCP (lab 23.8 s → target <4 s, field <2.5 s)Medium
6Lazy-load gokwik/unloq/fealtyx widgets; load checkout SDK only on cart/checkout−300–600 ms TBTMedium
7Add width/height + fetchpriority=high + preload to LCP hero; serve mobile srcsetReduces LCP render delay (2.08 s)Low
8Fix Organization schema: real logo + sameAs social array + foundingDateEntity/brand trust in SERPsLow
9noindex/Disallow spo-filter-* + vanity collections; consolidate to ~15–20 categoriesCrawl-budget + keyword cannibalization fixMedium
10Add LocalBusiness/ShoeStore schema (30+ stores)Local pack + store-locator rich resultsMedium

🟢 Long-Term (This Quarter)

#IssueImpactEffort
11Strengthen CSP (script-src nonce) + raise HSTS to max-age=31536000; includeSubDomains; preload + add Referrer-PolicySecurity hardening for paymentsLow
12Server-side/inject Product + AggregateRating schema on PDPs (don't rely on Judge.me JS)Star ratings in SERPsMedium
13Publish /pages/about-us, /pages/terms-of-service, /pages/track-your-order (currently 404)E-E-A-T + trust completenessLow
14Reduce DOM size (6,783 → <2,000) via mega-menu/virtualizationPerformance + maintainabilityHigh
15Monitor CrUX until LCP <2.5 s & INP <200 ms restored (reverse 2026 regression)Protect mobile conversionOngoing

Summary Score Card

CategoryScoreGrade
Performance (Mobile)Failing field (LCP 2.8s NI, INP 279ms NI) / Lab LCP 23.8s🔴
Performance (Desktop)Lab LCP 1.4s, TBT 490ms🟢
AccessibilityAlt-text bug (58 imgs) + empty content-alt🟡
Best PracticesLogo placeholder, weak CSP, low HSTS🟡
SEOog:image favicon, 228-collection sprawl, no hreflang (N/A)🟡
Content QualityAuthentic photos, but About/Terms 404, Org logo broken🟡
UXRich nav, but mobile perf + broken social share🟡
OverallMobile-led risk; desktop acceptable🔴 (mobile)

Sources Cited

  • https://cruxvis.withgoogle.com/#/ (origin https://neemans.com) — CrUX phone field CWV: LCP/INP/CLS time series 2025-10 → 2026-08-22 [field performance]
  • https://pagespeed.web.dev/ — Lighthouse lab metrics (Mobile + Desktop), 27 Aug 2026 [lab performance, opportunities, diagnostics]
  • https://neemans.com/ — live DOM audit via browser_console (scripts 202, stylesheets 29, iframes 9, images 370, 58 "Translation missing" alt, 24 empty-alt, h1=1, schema types, og:image, Organization schema, footer Twitter link) [accessibility, SEO, schema]
  • https://neemans.com/products/rapid-breeze-serene-lace-ups-for-men-ivory — PDP title/meta/og:image (via curl; browser-render timed out due to 23.8 s LCP) [on-page SEO]
  • curl -sSI https://neemans.com/ — security headers (HSTS, CSP, X-Frame-Options, X-Content-Type-Options) [best practices]
  • https://neemans.com/robots.txt — crawl rules + 21× repeated Sitemap: directive [technical SEO]
  • https://neemans.com/sitemap.xml — sitemap index (products_1/2, collections_1, agentic_discovery) [technical SEO]
  • https://neemans.com/sitemap_collections_1.xml — 228 collection handles incl. spo-filter-* auto-generated [catalog hygiene/SEO]
  • business-analysis.md (workspace) — company context, 250+ collection sprawl, broken Twitter handle @Neemans190038, phone-default audience, CrUX regression [business context]

Note: The PDP (product detail page) could not be fully rendered in the audit browser session (Lighthouse-lab LCP of 23.8 s caused navigation timeouts). Product-page-specific checks (full image-alt audit, Judge.me AggregateRating injection, PDP schema) are flagged for follow-up verification via a faster environment or server-side fetch.