Web Quality Audit: Aramya (aramya.in)

Website: https://aramya.in | Date: 2026-08-18 | Platform: Custom Next.js (RSC) headless storefront + Shopify media CDN + Azure Front Door | Industry: Women's ethnic wear D2C (vertical manufacturer) Audience context (from business-analysis.md): 100% phone traffic (CrUX), ~2,183 SKUs / 172 collections, ₹599 median price, 4.66/5 avg rating, ₹200 Cr+ ARR claim, 13 Bengaluru COCO stores.


Executive Summary

Aramya's storefront is technically strong on the fundamentals that drive organic traffic — SEO scores a perfect 100/100, schema coverage is best-in-class for a mid-market D2C (Product + AggregateRating + BreadcrumbList + Organization + WebSite + FAQPage + ItemList), and real-user field data shows a genuine, sustained performance-improvement story over the last 10 months. The one metric holding the site back from a full Core Web Vitals pass is INP (interactivity), which sits at 251 ms against a 200 ms "Good" threshold.

The weakest areas are Accessibility (84/100) — four concrete, low-effort fixes — and Best Practices, where a thin CSP (only frame-ancestors), missing HSTS/X-Frame-Options, and a DNS-failing third-party script drag the mobile score to 54. Content authenticity is a strength: real product photography, descriptive image alts, no AI-generated imagery, and rich trust signals (FAQ, policies, app, reviews).

CategoryMobile ScoreDesktop ScoreGrade
Performance (field)Needs Improvement (INP)Not assessed (0% desktop traffic)🟡
Accessibility8484🟡
Best Practices5481🟡 / 🔴
SEO100100🟢
Content Quality🟢
OverallSolid, CWV-blocked by INP🟡
Mobile-vs-desktop note: CrUX reports 0% desktop traffic, so desktop is a non-factor for this brand (confirmed in business analysis). All optimization priority is mobile. Lighthouse desktop was run for completeness; its aggregate was unstable (the live storefront's persistent connections prevented a clean idle capture — see Performance §1.2).

1. Performance Audit

1.1 CrUX Real-World Field Data

Source: Chrome User Experience Report via CrUX Vis (cruxvis.withgoogle.com), origin https://aramya.in, phone-only.

Core Web Vitals Assessment: Needs Improvement on mobile. LCP is Good and CLS is Good, but INP is 251 ms (threshold 200 ms) → Needs Improvement, so the overall assessment is not passing. (PageSpeed Insights labels this "Failed"; per audit convention we say Needs Improvement.)

Latest reported period (2026-07-12 → 2026-08-08), phone:

MetricValueThreshold (Good / Poor)Rating
LCP1,900 ms≤ 2,500 / > 4,000🟢 Good
INP251 ms≤ 200 / > 500🟡 Needs Improvement (stable)
CLS0.10≤ 0.10 / > 0.25🟢 Good (at threshold edge)

10-month trend (this is the headline performance story): the site has improved dramatically since Oct 2025:

PeriodLCPINPCLS
2025-10-19 → 11-153,952 ms778 ms0.37
2026-01 → 02~2,200–2,600 ms~250 ms0.71–0.74
2026-052,301 ms227 ms0.11
2026-07-12 → 08-081,900 ms251 ms0.10

LCP fell ~52% (3,952 → 1,900 ms) and INP fell ~68% (778 → 251 ms) over the window. CLS has swung from 0.37 (Poor) down to the 0.10 Good edge. This is a well-optimized, actively-maintained storefront — the remaining gap is purely INP.

INP interpretation: INP at 251 ms (stable, not regressing) is the single metric preventing a full CWV pass. For a 100%-mobile audience, INP is the most business-critical performance metric (it directly tracks tap responsiveness through the scroll-and-buy funnel). The likeliest drivers are the heavy third-party tag stack and React hydration cost (see §1.4).

1.2 Lighthouse Lab Data (mobile-priority)

Authoritative lab source: Lighthouse CLI v12, run 2026-08-18. Where the automated PageSpeed Insights API could not be reached, field data from the PSI web interface plus local Lighthouse runs were used instead. All scores below are reproducible from the served storefront.

CategoryLighthouse Score (mobile)Lighthouse Score (desktop)
Performance0*0*
Accessibility8484
Best Practices5481
SEO100100

*Performance aggregate is unreliable and should be disregarded. Both runs logged "Runtime error: unable to reliably load the URL — page stopped responding" because the live storefront's persistent/reconnecting connections (MoEngage, Clarity, GTM streams, admin.dslrteam.com long-polls) prevented Lighthouse from reaching network-idle. The aggregate collapsed to 0. The component metrics below are valid and corroborate CrUX:

Mobile component metricValueDesktop component metricValue
FCP2.6 sFCP1.6 s
LCP2.6 sLCP2.6 s
CLS0CLS0.002
TBT140 msTBT36,110 ms*
"interactive"13.0 s*"interactive"43.4 s*

*The 13–43 s "interactive"/TBT figures are artifacts of the hung-headless capture, not real user experience (real INP field data is 251 ms). They are excluded from the verdict.

1.3 LCP Phase Breakdown

Not measurable from the hung capture, but CrUX LCP at 1,900 ms (Good) indicates server/TTFB and render-blocking are well-controlled. curl -sI shows x-azure-ref / Azure Front Door with vary: RSC and preload hints for the hero font + two critical CSS files — consistent with a fast LCP. The remaining risk is client-side waterfalls (below).

1.4 Performance Issues by Impact

High — Third-party script bloat (INP driver). Evidence (live console, 125 resources; Lighthouse unused-javascript estimates ~596 KiB savings on mobile): the page loads GTM + 3 Google tag containers (AW-10905164993, G-VSD8BWDEEV, GT-TQLPN5KV), Microsoft Clarity (clarity.ms), MoEngage (cdn.moengage.com), LinkedIn Insight (snap.licdn.com), and ShareChat (sc-static.net / sc-events-sdk.sharechat.com). On a 100%-mobile, mid-range-device audience this is the most plausible cause of the 251 ms INP. Recommendation: consolidate GA4/GTM into a single container, lazy-load MoEngage/ShareChat after first interaction, and audit whether LinkedIn/ShareChat tags are still needed (they may be campaign-leftovers). Estimated INP impact: meaningful.

Medium — Unminified / unused JS. Evidence: Lighthouse unused-javascript ~596 KiB estimable savings; 103 <script> tags on the homepage DOM. Recommend code-splitting non-critical chunks and deferring below-the-fold carousels.

Medium — Homepage carousels are client-fetched ("Loading" placeholders). Evidence: homepage SHOP BY FABRIC / SHOP BY OCCASION product grids render as "Horizontal product grid - Loading" and product <a> links are absent from the server HTML (confirmed via DOM inspection). Collection/PDP pages ARE server-rendered with full product lists, so this is a homepage-only gap. Verify these grids are server-rendered (RSC) or pre-rendered; if purely client-fetched they lose link equity and slow first meaningful paint of products.

Low — No explicit cache-control discipline on origin. Evidence: cache-control: public, max-age=0, must-revalidate on HTML (correct for dynamic), but confirm long-lived max-age/immutable on /_next/static hashed assets (Lighthouse did not flag caching failures, so likely fine).

1.5 Resource Transfer Summary

Not extracted cleanly (capture hung). Observed stack: Next.js RSC HTML + _next/static (self/CDN), cdn.shopify.com media, assets.aramya.in images/SVGs, and the third-party tag cloud above. Image delivery itself is healthy (descriptive alts, responsive ?width= params on Shopify CDN).


2. Accessibility Audit

Lighthouse: 84/100 (mobile and desktop — identical). Four failing audits, all low-effort:

2.1 Critical Issues

None (document has <html lang="en">, viewport is present and correct, all <img> have an alt attribute — 0 images missing alt on the homepage; 38 have empty alt and they are all genuinely decorative — category icons, size-chart PNGs XS–10XL, customer review photos — which is acceptable).

2.2 High Priority Issues (the 4 fails)

#AuditEvidence (from Lighthouse)Fix
1color-contrast (fail)<p class="typo-body3 text-center p-3.5 text-secondary"> — secondary text color on its background falls below 4.5:1. Appears in policy/caption text.Bump the text-secondary token to meet 4.5:1 (or 3:1 for large text).
2link-name (fail)<a class="block rounded-sm" href="/collections/latest-kurti-collection-onsale">, plus /collections/shop-for-bottoms, /collections/shop-for-dupatta-1, /collections/m-size-kurti (×2) — image-only anchor with no alt/aria-label.Add descriptive alt to the inner image or an aria-label on the <a>.
3aria-prohibited-attr (fail)<section aria-labelledby="image-grid-«Rljnbhalb»">aria-labelledby points to an ID that does not exist / contains invalid characters.Point aria-labelledby to a real heading ID, or use aria-label.
4label-content-name-mismatch (fail)App-store links: <a aria-label="Download Aramya app on Google Play Store" …>Get it on Play Store</a> and the Apple equivalent — visible text ("Get it on Play Store") ≠ accessible name ("Download Aramya app on Google Play Store").Make the aria-label match the visible text, or drop the aria-label so the visible text is used.

2.3 Positive Findings

  • Single <h1> per page, logical <h2>/<h3> nesting (homepage: 1 H1 / 13 H2).
  • Keyboard-navigable (menus, carousels, size selectors all operable).
  • Focus management present; dialogs/FAQ accordions use proper expanded state.
  • Visible breadcrumbs + BreadcrumbList schema on PDP and collection pages.
  • Forms (search, contact, account) have associated labels.

3. SEO Audit

Lighthouse: 100/100 (mobile and desktop). This is genuinely excellent — schema and metadata are the standout.

3.1 Technical SEO

CheckStatusEvidence
robots.txt✅ saneDisallows /cart, /account, /checkout/, /api/, /wishlist, /search?, and faceted /collections/? + /collections/? (prevents filter/variant crawl waste). Includes Sitemap: directive.
XML Sitemapsitemap.xml indexes 4 sub-sitemaps (products/collections/pages/blogs), all dated 2026-08-18.
Canonical URLsSelf-referencing canonicals on homepage, PDP, and collection pages (verified live).
Indexationmeta robots: index, follow; no noindex on key pages.
HTTPSEnforced (Azure Front Door, HTTP/2 200).
Mobile-friendlyviewport present; 100% mobile audience confirms parity.
URL structureClean, hyphenated, keyword-rich (/collections/kurtas-under-600, /product/kurta-grey-butti-pure-cotton-lace-a7817).

3.2 On-Page SEO (verified live in rendered DOM — not just curl)

PageTitleMeta DescOG/TwitterH1
Homepage"Aramya | Premium Cotton Kurtas & Ethnic Wear for Women" (keyword-rich)✅ unique✅ full OG + Twitter Card w/ og:image:alt⚠️ "10 Lakh+ Women Love Aramya" (brand/social-proof, not keyword)
PDP"Buy Embroidered Soft Cotton Block Print Straight Grey Kurta A7817 | Aramya"✅ unique✅ full + og:image:alt✅ keyword H1
Collection"Buy Kurta Set For Women Under 600 Rupees Online"✅ unique✅ 8 OG / 6 Twitter(grid H3s are product names)

PDP and collection meta are exemplary. Homepage H1 is the only on-page SEO weakness (see Medium below).

3.3 Schema Markup (verified via JS-rendered DOM — curl would miss these)

Schema typePresent onKey fields
WebSiteHomepagename, url, potentialAction: SearchAction (sitelinks search box) ✅
OrganizationHomepagename, logo, sameAs (FB/IG/YouTube/Pinterest), contactPoint
FAQPageHomepageReal Q&A (return policy 7-day, etc.) ✅
ProductPDPsku, brand.name:"Aramya", aggregateRating (4.65 / 1,802), image, offers implied ✅
BreadcrumbListPDP + CollectionFull itemListElement ✅
CollectionPage + ItemListCollectionLists products ✅

One nit: the PDP Product.name is "Buy Embroidered Soft Cotton Block Print Straight Grey Kurta A7817 \| Aramya" — it duplicates the page <title> instead of the clean product name ("Embroidered Soft Cotton Block Print Straight Grey Kurta"). Minor; cosmetic for rich results. Brand appears as "ARAMYA" (caps) in WebSite/Organization vs "Aramya" in Product.brand — not a fragmenting inconsistency, but worth normalizing.

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

  • Experience/Expertise: "In-House Design & Manufacturing" (Jaipur), pure-cotton/hand-block claims, fabric FAQ — strong for a manufacturer brand.
  • Authoritativeness: ₹80 Cr Series A (Z47/Accel), 10 Lakh+ customers claim, press coverage.
  • Trustworthiness: HTTPS, visible policies (Returns/Exchange 7-day, Privacy, Terms), contact page with FAQ, app download, phone/email via footer. GST/manufacturer address present in footer ("DSLR Technologies Pvt. Ltd., Sitapur Industrial Area, Jaipur").

3.5 Image SEO

All content images have descriptive alt (PDP gallery: "Embroidered Soft Cotton Block Print Straight Grey Kurta From Aramya 0..10"). Filenames are product-SKU-based (1690900074_l_A78171.jpg), not IMG_xxxx. No lazy-load on hero (correct). Strong.


4. International SEO

Not applicable. The business is single-market India, single-language (English), 100% domestic phone traffic, no international shipping signal (per business analysis). No hreflang is expected or required; none was found, which is correct. If Aramya later expands to NRIs/diaspora, this is where hreflang + /en-in/locale structure would be introduced.


5. Best Practices & Security

Lighthouse: Mobile 54, Desktop 81. Desktop is dragged only by deprecations and third-party-cookies; mobile additionally fails errors-in-console.

5.1 Security Headers (from curl -sI)

HeaderValueVerdict
Content-Security-Policyframe-ancestors 'self' https://gandalf.dslrteam.com https://sauron.dslrteam.com⚠️ Thin — only frame-ancestors; no script-src, so CSP gives zero XSS protection against injected scripts.
X-Content-Type-Optionsnosniff
Referrer-Policyorigin-when-cross-origin
Strict-Transport-Security❌ Missing (no HSTS)
X-Frame-Options❌ Missing (CSP frame-ancestors partially mitigates clickjacking)
Cross-Origin-Opener-Policy❌ Missing

5.2 Modern Standards / Flags

  • errors-in-console (fail, mobile): Lighthouse captured Failed to load resource: net::ERR_NAME_NOT_RESOLVED. Live console shows a cluster of third-party/script hosts that fail to resolve in the capture environment (MoEngage cdn.moengage.com, ShareChat sc-static.net/sc-events-sdk.sharechat.com, admin.dslrteam.com APIs, LinkedIn snap.licdn.com). At least one of these is hard-referenced with a domain that fails DNS — audit which integration is broken and either fix the reference or remove the dead tag.
  • deprecations (fail): page uses a deprecated API (likely a legacy third-party SDK). Identify via Chrome DevTools Issues panel.
  • third-party-cookies (fail, mobile): tags rely on third-party cookies (MoEngage/Clarity) — will break under Chrome's 2024+ third-party cookie phase-out; migrate to server-side tagging / consented first-party storage.
  • Doctype, charset, HTTPS, no document.write — all pass.

6. Content Quality Assessment

6.1 Image Quality & Authenticity

  • No AI-generated imagery detected. Sampled product/collection image filenames show real photography and SKU-based naming (1690900074_l_A78171.jpg, TP4408T-6__3pc__Top-2_…_612x_2.png). No Gemini_Generated_, ChatGPT_Image_, Picsart-AiImageEnhancer, or unnamed_1* patterns. For a "pure cotton / handcrafted" manufacturer brand this is exactly right — authenticity is preserved. ✅
  • Product galleries are real on-model/lifestyle shots with descriptive alts. ✅

6.2 Trust Signals

Phone/email, manufacturer address, 7-day return + exchange, COD, free-delivery threshold, app download, FAQ, and 1,800+ verified ratings per top product — comprehensive. ✅

6.3 Review / Social Proof

AggregateRating (4.65/1,802 on the sampled PDP) is schema-marked up with AggregateRating → eligible for star-rich results. ✅

6.4 UX Issues

  • Minor: "OCCASSION" misspelling in the SHOP BY OCCASION section heading (visible to users; brand polish).
  • Minor: homepage H1 is brand/social-proof rather than keyword-targeted (SEO, §3.2).
  • Minor: several app-store / collection anchor links lack discernible names (a11y, §2.2 #2).

7. Priority Recommendations

🔴 Immediate (This Week)

#IssueImpactEffort
1Fix the 4 accessibility fails (color-contrast token, 5 image-only links, broken aria-labelledby, app-link label mismatch)WCAG AA compliance; avoids audit/legal riskLow (dev half-day)
2Resolve the ERR_NAME_NOT_RESOLVED third-party reference (MoEngage/ShareChat/LinkedIn/admin.dslrteam.com)Removes console errors; may recover Best Practices mobile 54→80+Low (identify + fix/remove tag)
3Normalize PDP Product.name to clean product title (drop "Buy … | Aramya")Cleaner rich-result snippetsLow

🟡 Short-Term (This Month)

#IssueImpactEffort
4INP reduction — consolidate GA4/GTM to one container; lazy-load MoEngage/ShareChat post-interaction; defer non-critical JSDirectly improves the only failing CWV metric (251→<200 ms = full CWV pass)Medium
5Add full CSP (script-src with nonces/hashes) + HSTS + X-Frame-Options + COOPXSS/hijack hardening; lifts Best PracticesMedium (security review)
6Homepage H1 → keyword-targeted ("Premium Cotton Kurtas & Ethnic Wear for Women") while keeping the "10 Lakh+" banner as a sub-headingPrimary-keyword H1 on the most-linked pageLow
7Pre-render / RSC the homepage SHOP BY FABRIC & OCCASION product grids (currently client-"Loading")Recovers link equity + faster product paintMedium
8Code-split / defer ~596 KiB unused JS; remove legacy/deprecated API usageFaster TBT, better INP headroomMedium

🟢 Long-Term (This Quarter)

#IssueImpactEffort
9Migrate third-party tags to server-side / consented first-party storage (third-party-cookie phase-out)Preserves analytics/re-marketing under Chrome changesMedium
10Fix "OCCASSION" → "OCCASION" copy; general brand-copy polish passBrand polishLow
11If expanding to NRI/diaspora: introduce locale structure + hreflangUnlocks international SEOHigh (when relevant)

Summary Score Card

CategoryScoreGrade
Performance (Mobile, field)LCP Good / INP 251 ms (Needs Improvement) / CLS Good🟡 Needs Improvement
Performance (Desktop)Not assessed (CrUX 0% desktop traffic)N/A
Accessibility84/100🟡 B
Best Practices54 (mobile) / 81 (desktop)🟡 / 🔴
SEO100/100🟢 A
Content QualityReal photography, full schema, strong trust signals🟢
UXMinor copy/link-name nits🟢
OverallCWV-blocked by INP; SEO/basics excellent🟡

Bottom line: Aramya is a well-built storefront that nails the SEO and content fundamentals and has measurably improved performance over 10 months. The path to a full Core Web Vitals pass is narrow and specific: cut INP below 200 ms (third-party tag consolidation + JS deferral) and close the four small accessibility gaps. Security headers (CSP/HSTS) are the next meaningful hardening step.


Sources Cited

  • CrUX Vis (cruxvis.withgoogle.com) — field CWV, origin https://aramya.in, phone, 2025-10-19 → 2026-08-08. Verdict: LCP 1,900 ms (Good), INP 251 ms (Needs Improvement, stable), CLS 0.10 (Good).
  • PageSpeed Insights web UI (pagespeed.web.dev) — field-data panel: LCP 1.9 s / INP 256 ms / CLS 0.1; "Core Web Vitals Assessment: Failed" (= Needs Improvement). (API googleapis.com/pagespeedonline returned HTTP 429 — quota exhausted — so API was not used.)
  • Lighthouse CLI v12 — 2026-08-18 runs: Accessibility 84 (m+d), Best Practices 54 (m)/81 (d), SEO 100 (m+d); component metrics FCP 1.6–2.6 s, LCP 2.6 s, CLS 0/0.002, TBT 140 ms (m). Performance aggregate unreliable (page-load hang) and excluded.
  • Live rendered DOM (browser inspection) — meta/OG/Twitter/canonical per page; JSON-LD schema types (WebSite, Organization, FAQPage, Product+AggregateRating, BreadcrumbList, CollectionPage, ItemList); alt-text audit (0 missing on homepage, 38 decorative-empty); image-filename AI check (0 hits); failed-resource console capture (MoEngage/ShareChat/LinkedIn/admin.dslrteam.com).
  • curl -sI / robots.txt / sitemap.xml — security headers, robots disallows, 4 sub-sitemaps.
  • business-analysis.md (this workspace) — 100% phone traffic, 2,183 SKUs, vertical manufacturer, single-market India context.