Web Quality Audit: Monrow.in
Website: https://www.monrow.in/ | Date: July 24, 2026 | Platform: Shopify | Industry: Women's Footwear D2C | Revenue: ₹15.1 Cr FY25
Executive Summary
Monrow.in is a ₹15.1 Cr women's footwear D2C brand with 1,102 SKUs, 50+ physical stores, and a Shopify-powered online store. The site has severe performance issues on mobile (Lighthouse score 36/100) and moderate accessibility gaps (70/100). The CrUX field data shows the Core Web Vitals Assessment fails due to LCP at 3.5s, though INP (154ms) and CLS (0.02) are good. The site's main problems are bloated third-party JavaScript, unoptimized hero images with loading="lazy", missing alt text on 96% of images, and minimal structured data.
| Category | Mobile Score | Desktop Score | Grade |
|---|---|---|---|
| Performance | 36 | 47 | 🔴 |
| Accessibility | 70 | 64 | 🟡 |
| Best Practices | 54 | 54 | 🔴 |
| SEO | 85 | 85 | 🟡 |
| Overall | 36 | 47 | 🔴 |
Mobile vs Desktop gap: Mobile LCP is 23.8s vs Desktop 3.1s — a 7.7x gap, indicating severe mobile-specific issues with hero image delivery and render-blocking resources.
1. Performance Audit
1.1 CrUX Real-World Field Data
Source: PageSpeed Insights (https://pagespeed.web.dev/) — Chrome UX Report data for https://www.monrow.in/
Core Web Vitals Assessment: FAILED
| Metric | Value | Threshold | Rating |
|---|---|---|---|
| LCP (Largest Contentful Paint) | 3.5 s | ≤ 2,500 ms | 🟡 Needs Improvement |
| INP (Interaction to Next Paint) | 154 ms | ≤ 200 ms | 🟢 Good |
| CLS (Cumulative Layout Shift) | 0.02 | ≤ 0.10 | 🟢 Good |
| FCP (First Contentful Paint) | 2.1 s | ≤ 1,800 ms | 🟡 Needs Improvement |
| TTFB (Time to First Byte) | 0.8 s | ≤ 800 ms | 🟢 Good |
LCP at 3.5s is the primary failure — 40% above the 2.5s good threshold. This means real users on mobile experience slow page loads. INP and CLS are solid, suggesting the core interactivity and layout stability are well-optimized after initial load.
1.2 Core Web Vitals (Lighthouse Lab Data)
Source: PageSpeed Insights Lighthouse run (https://pagespeed.web.dev/) — Mobile + Desktop
| Metric | Mobile | Desktop | Good Threshold |
|---|---|---|---|
| First Contentful Paint (FCP) | 6.1 s | 0.8 s | ≤ 1,800 ms |
| Largest Contentful Paint (LCP) | 23.8 s | 3.1 s | ≤ 2,500 ms |
| Total Blocking Time (TBT) | 810 ms | 710 ms | ≤ 200 ms |
| Cumulative Layout Shift (CLS) | 0.02 | 0.006 | ≤ 0.10 |
| Speed Index (SI) | 15.9 s | 4.3 s | ≤ 3,400 ms |
The mobile lab results are critically poor. LCP at 23.8s is 9.5x the good threshold. This is 9.5× worse than the CrUX field data (3.5s), suggesting the lab connection is throttled more aggressively than real-world 4G, but the pattern is clear: mobile is extremely slow due to unoptimized hero images and render-blocking resources.
1.3 LCP Phase Breakdown (Mobile)
Source: PageSpeed Insights Lighthouse — LCP breakdown audit
| Phase | Duration |
|---|---|
| Time to First Byte (TTFB) | 30 ms |
| Resource Load Delay | 1,470 ms |
| Resource Load Duration | 20 ms |
| Element Render Delay | 930 ms |
| Pre-resource (render-blocking) delay | ~21,350 ms (implied by total LCP minus phases) |
The LCP element is the hero image (FLC_mob_banner_900x.jpg). The massive pre-resource delay indicates that render-blocking CSS/JS prevented the browser from even discovering the LCP resource for ~21 seconds. This is consistent with the Shopify theme's heavy JavaScript bundle loading before the hero image can be requested.
Critical finding: The hero image has loading="lazy" and class="lazyautosizes lazyload" — lazy-loading the LCP element is a critical error. The fetchpriority="high" attribute is also missing.
1.4 Performance Issues by Impact
Critical
| Issue | Evidence | Est. Savings | Recommendation |
|---|---|---|---|
LCP hero image has loading="lazy" | Lighthouse audit: "LCP resources should not use loading=lazy" | 3-10s | Remove loading="lazy" from hero image. Add fetchpriority="high". Ensure the image <img> tag is in the initial HTML. |
| Render-blocking CSS/JS blocking LCP discovery | 21s pre-resource delay on mobile | 10-15s | Inline critical CSS for above-the-fold content. Defer non-critical JS. Use media="print" on non-critical stylesheets. Move theme.js to load after hero image is discovered. |
| Hero image oversized for its display size | 170.5 KB served for mobile banner (900×585) vs smaller display size | 100-150 KB | Serve appropriately sized images via srcset. The mobile hero at 900×585 is too large for mobile viewports. |
High
| Issue | Evidence | Est. Savings | Recommendation |
|---|---|---|---|
| Google Tag Manager bloat | 1.3 MB+ from GTM, 6+ gtag containers running simultaneously | 500-800 KB | Consolidate to a single GTM container. Audit tags — remove unused/duplicate tags. Defer non-critical analytics. |
| Unoptimized images site-wide | 2,482 KB potential savings on mobile, 646 KB on desktop | 600 KB-2.4 MB | Serve WebP/AVIF with fallbacks. Add srcset to all product images. Use responsive image sizes. |
| First-party JS bundle heavy | 206 KB hydrate.GMX4Ce4Q.js, 900+ms CPU on 1st party JS | 200-400 ms | Code-split Shopify WPM bundle. Audit vendor-scripts-v10.js for unused code. |
| Large DOM size | 2,435 elements, max depth 21 | 100-200 ms | Simplify page structure. Reduce redundant DOM nodes in carousels and slideshows. |
| Script evaluation time | 3,717 ms on mobile, 3,762 ms on desktop | 1-2s | Move non-critical scripts to defer or async. Audit third-party scripts. |
Medium
| Issue | Evidence | Recommendation |
|---|---|---|
| Unused CSS | 24-40 KB savings from unused CSS (theme.css, kwikpass.css) | Audit theme.css for unused Shopify sections. Use PurgeCSS. |
| Duplicate jQuery | Loading jQuery 1.9.1 (HTTP) AND jQuery 3.6.4 (HTTPS) | Remove jQuery 1.9.1. Modernize to single jQuery 3.6.4 or eliminate jQuery dependency. |
| Mixed content: jQuery over HTTP | http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js | Change to https:// — this triggers mixed content warnings. |
| Source maps accessible in production | SyntaxError parsing .map files (returns HTML 404 page) | Configure server to return 404 for .map files. Currently they leak internal build structure. |
| Gokwik/Kwikpass bloat | 431 KB total from gokwik.co, includes 42.9 KB unused CSS | Audit Gokwik integration for unnecessary scripts. |
Low
| Issue | Evidence | Recommendation |
|---|---|---|
| HSTS max-age too low | max-age=7889238 (~91 days) | Increase to max-age=31536000; includeSubDomains; preload |
Missing includeSubDomains | No includeSubDomains in HSTS | Add includeSubDomains directive |
Missing preload directive | No preload in HSTS | Add preload directive for HSTS preload list submission |
| No COOP header | Cross-Origin-Opener-Policy: missing | Add Cross-Origin-Opener-Policy: same-origin |
CSP lacks script-src | CSP present but no script-src directive | Add script-src to CSP |
1.5 Resource Transfer Summary (Mobile)
Source: PageSpeed Insights Lighthouse — network requests audit
| Category | Transfer Size | Key Contributors |
|---|---|---|
| Google Tag Manager | 1,336 KB | 6+ gtag containers, duplicate analytics |
| Monrow 1st party | 715 KB | theme.js, vendor scripts, WPM, images |
| Gokwik/Kwikpass | 431 KB | Merchant integration, SSO, CSS, icons |
| Amazon Web Services | 156 KB | WareIQ shipping badges, CAPI |
| Other CDNs | 64 KB | jQuery, Owl Carousel, Slick, Bureau.id |
Total: ~2.7 MB+ transferred — extremely high for a homepage. Google Tag Manager alone accounts for nearly 50% of all transferred bytes.
2. Accessibility Audit
2.1 Critical Issues
| Issue | Evidence | WCAG |
|---|---|---|
| 50 images with NO alt attribute | curl analysis: 50/103 images have no alt="..." attribute at all | A |
| 49 images with empty alt text | 49/103 images have alt="" but are content/product images (not decorative) | A |
| H1 is visually hidden | <h1><span class="visually-hidden">Monrow Shoes</span></h1> — only visible to screen readers, no visible keyword H1 on page | A |
2.2 High Priority Issues
| Issue | Evidence | WCAG |
|---|---|---|
| Buttons without discernible text | Owl carousel dot buttons lack accessible names | A |
| ARIA input fields need accessible name | slick-track with role="listbox" lacks accessible name | A |
| Form elements without labels | Add-to-cart widget quantity inputs lack labels | A |
| 2 H1 tags on the page | Two <h1> elements both contain "Monrow Shoes" | A |
| Bad link target color contrast | Wishlist link uses href="#hero-wishlist" (hash-only) | A |
2.3 Positive Findings
- Viewport meta tag present:
<meta name="viewport" content="width=device-width,initial-scale=1">✓ - Page language set:
<html lang="en">✓ - Content Security Policy:
frame-ancestors 'none'✓ - X-Frame-Options:
DENY✓ - Skip to content link not found in initial HTML, but may be injected by JS
3. SEO Audit
3.1 Technical SEO
| Check | Status | Details |
|---|---|---|
| robots.txt | ✅ Good | Well-configured Shopify robots.txt. Disallows admin, cart, checkout, orders, filters, sort params. Includes Sitemap directive. |
| XML Sitemap | ✅ Good | 6 sitemap files: 2x products (1,102 total), 42 collections, 52 pages, 1 blog. All accessible. |
| Canonical URLs | ✅ Good | Self-referencing canonical on homepage: https://www.monrow.in/ |
| Indexation | ✅ Good | No noindex meta tag on homepage |
| URL structure | ✅ Good | Clean, descriptive, hyphenated URLs: /products/tamara-rustic-gold-strap-flats |
| HTTPS | ⚠️ Mixed Content | og:image uses http:// — mixed content warning. Also loads jQuery 1.9.1 over HTTP. |
| Page speed | 🔴 Critical | CWV failed, mobile LCP 23.8s lab, 3.5s field |
| Mobile-friendly | ✅ Good | Viewport configured, responsive design |
3.2 On-Page SEO Issues
Title tag:
Latest Collection of Women Footwear & Bags❣️ Comfort - Monrow
– Monrow Shoes
- Length: 84 characters (within limit but could be tighter)
- Has duplicate brand name: "Monrow" appears twice in title ("Monrow" AND "Monrow Shoes")
- Uses
&(HTML entity) instead of&— minor issue - ❤️ emoji in title may not render consistently across all SERPs
- Recommendation:
Women's Footwear & Bags | Comfortable Shoes Online - Monrow
Meta description:
Fashion ❣️ Comfort We aim to create shoes and bags that not only look stylish but also feel incredibly comfortable. Designed for the go-getters who deserve effortless elegance every step of the way! ❤
- Length: ~200 characters (slightly over 160-character limit)
- ❤️ emojis may not display in all SERPs
- Could be more keyword-rich and CTA-driven
- Recommendation:
Shop trendy women's footwear & bags at Monrow. Discover stylish flats, heels, wedges & more crafted for all-day comfort. ✓ Free shipping ✓ Easy returns
Heading structure:
| Heading | Count | Issues |
|---|---|---|
| H1 | 2 | Duplicate H1s, both visually hidden |
| H2 | 9 | OK |
| H3 | 1 | Only 1 H3 — thin hierarchy |
Critical issue: The only H1 is <span class="visually-hidden">Monrow Shoes</span>. Google may discount visually-hidden H1 content. The page has no visible keyword-rich H1 for users.
Open Graph tags:
og:title,og:description,og:image,og:url,og:type,og:site_name— all present ✓- Issue:
og:imageuseshttp://instead ofhttps://— mixed content on social share previews
Twitter Card tags:
- 4 tags present ✓
3.3 Schema Markup
Present: Only 1 JSON-LD block — ItemList with 84 products (homepage product listing)
Missing schemas:
| Schema Type | Impact | Priority |
|---|---|---|
| Organization | Required for brand signal in knowledge panels | P0 |
| WebSite | Required for sitelinks search box | P0 |
| BreadcrumbList | Enables breadcrumb rich results in SERPs | P0 |
| Product (on product pages) | Required for product rich results, star ratings | P0 |
| LocalBusiness | For physical store locations (50+ stores) | P1 |
Note: Schema was verified via curl on the initial HTML. Some Shopify SEO apps inject JSON-LD client-side. The only JSON-LD found in the initial HTML was ItemList — the others are likely missing entirely.
3.4 Content Quality (E-E-A-T)
Experience:
- 50+ physical stores across 9 cities — strong omnichannel presence
- 10 years in business (founded 2016) — established brand
- PETA India Vegan Fashion Award 2024 — notable industry recognition
Expertise:
- Founder: Veena Ashiya — founder story could be highlighted more prominently
- Product certifications not prominently displayed on homepage
Authoritativeness:
- 139K Instagram followers — strong social proof
- 19K LinkedIn followers
- Press mentions and media coverage not prominently featured
- Blog is inactive since 2021 — last post was June 2021
Trustworthiness:
- Phone, email, physical address — need to verify on contact page
- Return/refund policy — likely present (Shopify standard)
- Privacy policy — present
- Missing: Trust badges prominently displayed on homepage
4. Best Practices & Security
4.1 Security Headers
Source: curl -sI https://www.monrow.in/
| Header | Value | Status |
|---|---|---|
| Strict-Transport-Security | max-age=7889238 | ⚠️ Low max-age (~91 days), missing includeSubDomains, missing preload |
| X-Frame-Options | DENY | ✅ Good |
| X-Content-Type-Options | nosniff | ✅ Good |
| Content-Security-Policy | block-all-mixed-content; frame-ancestors 'none'; upgrade-insecure-requests; | ⚠️ Missing script-src, object-src 'none' |
| Cross-Origin-Opener-Policy | Missing | ❌ Not set |
| Referrer-Policy | Missing | ❌ Not set |
| Permissions-Policy | Missing | ❌ Not set |
4.2 Modern Standards
| Check | Status | Details |
|---|---|---|
| Valid HTML5 doctype | ✅ | <!doctype html> |
| Charset UTF-8 | ✅ | charset=utf-8 in header |
| No mixed content | ❌ | og:image uses http://, jQuery 1.9.1 loaded over HTTP |
| Source maps accessible | ❌ | .map files return HTML error pages instead of 404 |
| No document.write() | ✅ | Not detected |
| Attribution Reporting deprecated | ⚠️ | Warning from shop_events_listener.js |
5. Content Quality Assessment
5.1 Image Quality & Authenticity
- 103 images on homepage — very image-heavy
- 99/103 have alt text issues — either missing (50) or empty (49)
- No AI-generated image patterns detected (Gemini, ChatGPT, Picsart) — images appear to be real product photography ✓
- Hero image is 170 KB — could be compressed further
- Product images use WebP format where available ✓
5.2 UX Issues
| Issue | Severity | Details |
|---|---|---|
| No breadcrumb navigation | Medium | No visual breadcrumbs or BreadcrumbList schema on homepage |
| Broken wishlist link | Medium | href="#hero-wishlist" — hash-only link, likely relies on JS |
Login link uses javascript:void(0) | Low | onclick="kpHandleLogin" — not crawlable |
| Shadow DOM container not found | Low | pop-club-embed.js failing to find Shadow DOM container |
| Shopify OTLP metrics blocked | Low | ERR_BLOCKED_BY_CLIENT on Shopify telemetry endpoints |
| Video has no poster image | Low | Autoplay video section has empty poster="" |
6. Priority Recommendations
🔴 Immediate (This Week)
| # | Issue | Impact | Effort |
|---|---|---|---|
| 1 | Remove loading="lazy" from hero image, add fetchpriority="high" | 3-10s LCP improvement | Low — 1 line change |
| 2 | Add alt text to all 103 images on homepage | A11y compliance, image search ranking | Medium — bulk edit |
| 3 | Add Organization, WebSite, BreadcrumbList structured data | Rich results, knowledge panel | Low — copy JSON-LD templates |
| 4 | Fix mixed content: update og:image to https:// | Social share previews, browser warnings | Low — 1 URL change |
| 5 | Replace H1 with visible keyword-rich heading | SEO ranking signal | Low — theme template change |
🟡 Short-Term (This Month)
| # | Issue | Impact | Effort |
|---|---|---|---|
| 6 | Inline critical CSS, defer non-critical stylesheets | 5-10s LCP improvement | Medium — requires build tooling |
| 7 | Consolidate GTM to single container | 800 KB+ savings, 1s+ faster | Medium — audit GTM tags |
| 8 | Remove duplicate jQuery (1.9.1), upgrade to HTTPS-only | Mixed content fix, modern JS | Low — remove one script tag |
| 9 | Add Product schema with AggregateRating to product pages | Star ratings in SERPs | Medium — Shopify app or custom code |
| 10 | Optimize all images with WebP + srcset | 600 KB-2.4 MB savings | Medium — batch conversion |
| 11 | Fix HSTS: increase max-age, add includeSubDomains, preload | Security hardening | Low — server config |
| 12 | Add CSP script-src directive | XSS protection | Low — server config |
🟢 Long-Term (This Quarter)
| # | Issue | Impact | Effort |
|---|---|---|---|
| 13 | Rebuild hero section with proper image delivery | Mobile performance core fix | High — theme redesign |
| 14 | Add COOP, Permissions-Policy, Referrer-Policy headers | Security hardening | Low — server config |
| 15 | Audit all third-party scripts for necessity | 1-2s load time improvement | Medium — audit + remove |
| 16 | Add breadcrumb navigation to all pages | UX + SEO + structured data | Medium — theme template |
| 17 | Revive blog with regular content | E-E-A-T, Discover eligibility | High — content strategy |
| 18 | Add LocalBusiness schema for 50+ stores | Local SEO | Medium — multi-location |
Summary Score Card
| Category | Score | Grade |
|---|---|---|
| Performance (Mobile) | 36/100 | 🔴 |
| Performance (Desktop) | 47/100 | 🔴 |
| Accessibility | 70/100 | 🟡 |
| Best Practices | 54/100 | 🔴 |
| SEO | 85/100 | 🟡 |
| Content Quality | 60/100 | 🟡 |
| UX | 65/100 | 🟡 |
| Security | 55/100 | 🔴 |
| Overall | 35/100 | 🔴 |
All Data Sources
- PageSpeed Insights — https://pagespeed.web.dev/ — Lighthouse scores, CrUX field data, LCP breakdown, performance audits (Mobile + Desktop)
- curl analysis —
curl -sI https://www.monrow.in/— HTTP headers, security headers, server info - curl HTML analysis —
curl -sL https://www.monrow.in/— Title tag, meta description, OG tags, JSON-LD, image analysis, heading structure, script count, stylesheet count - robots.txt —
curl -sL https://www.monrow.in/robots.txt— Crawl rules, sitemap reference - XML Sitemaps —
curl -sL https://www.monrow.in/sitemap.xml— Product count (1,102), collection count (42), page count (52), blog count (1) - browser_console — PageSpeed Insights expanded audit details — LCP breakdown, render-blocking resources, third-party impact, CLS culprits, unused CSS/JS, duplicate JS, network requests
- Business Analysis —
/root/cro-reports/monrow/20260724-164647/business-analysis.md— Revenue, funding, store count, social media metrics, tech stack