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).
| Category | Mobile Score | Desktop Score | Grade |
|---|---|---|---|
| Performance (field) | Needs Improvement (INP) | Not assessed (0% desktop traffic) | 🟡 |
| Accessibility | 84 | 84 | 🟡 |
| Best Practices | 54 | 81 | 🟡 / 🔴 |
| SEO | 100 | 100 | 🟢 |
| Content Quality | — | — | 🟢 |
| Overall | Solid, 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:
| Metric | Value | Threshold (Good / Poor) | Rating |
|---|---|---|---|
| LCP | 1,900 ms | ≤ 2,500 / > 4,000 | 🟢 Good |
| INP | 251 ms | ≤ 200 / > 500 | 🟡 Needs Improvement (stable) |
| CLS | 0.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:
| Period | LCP | INP | CLS |
|---|---|---|---|
| 2025-10-19 → 11-15 | 3,952 ms | 778 ms | 0.37 |
| 2026-01 → 02 | ~2,200–2,600 ms | ~250 ms | 0.71–0.74 |
| 2026-05 | 2,301 ms | 227 ms | 0.11 |
| 2026-07-12 → 08-08 | 1,900 ms | 251 ms | 0.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.
| Category | Lighthouse Score (mobile) | Lighthouse Score (desktop) |
|---|---|---|
| Performance | 0* | 0* |
| Accessibility | 84 | 84 |
| Best Practices | 54 | 81 |
| SEO | 100 | 100 |
*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 metric | Value | Desktop component metric | Value |
|---|---|---|---|
| FCP | 2.6 s | FCP | 1.6 s |
| LCP | 2.6 s | LCP | 2.6 s |
| CLS | 0 | CLS | 0.002 |
| TBT | 140 ms | TBT | 36,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)
| # | Audit | Evidence (from Lighthouse) | Fix |
|---|---|---|---|
| 1 | color-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). |
| 2 | link-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>. |
| 3 | aria-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. |
| 4 | label-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
expandedstate. - 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
| Check | Status | Evidence |
|---|---|---|
| robots.txt | ✅ sane | Disallows /cart, /account, /checkout/, /api/, /wishlist, /search?, and faceted /collections/? + /collections/? (prevents filter/variant crawl waste). Includes Sitemap: directive. |
| XML Sitemap | ✅ | sitemap.xml indexes 4 sub-sitemaps (products/collections/pages/blogs), all dated 2026-08-18. |
| Canonical URLs | ✅ | Self-referencing canonicals on homepage, PDP, and collection pages (verified live). |
| Indexation | ✅ | meta robots: index, follow; no noindex on key pages. |
| HTTPS | ✅ | Enforced (Azure Front Door, HTTP/2 200). |
| Mobile-friendly | ✅ | viewport present; 100% mobile audience confirms parity. |
| URL structure | ✅ | Clean, 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)
| Page | Title | Meta Desc | OG/Twitter | H1 |
|---|---|---|---|---|
| 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 type | Present on | Key fields |
|---|---|---|
| WebSite | Homepage | name, url, potentialAction: SearchAction (sitelinks search box) ✅ |
| Organization | Homepage | name, logo, sameAs (FB/IG/YouTube/Pinterest), contactPoint ✅ |
| FAQPage | Homepage | Real Q&A (return policy 7-day, etc.) ✅ |
| Product | PDP | sku, brand.name:"Aramya", aggregateRating (4.65 / 1,802), image, offers implied ✅ |
| BreadcrumbList | PDP + Collection | Full itemListElement ✅ |
| CollectionPage + ItemList | Collection | Lists 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)
| Header | Value | Verdict |
|---|---|---|
| Content-Security-Policy | frame-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-Options | nosniff | ✅ |
| Referrer-Policy | origin-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 (MoEngagecdn.moengage.com, ShareChatsc-static.net/sc-events-sdk.sharechat.com,admin.dslrteam.comAPIs, LinkedInsnap.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). NoGemini_Generated_,ChatGPT_Image_,Picsart-AiImageEnhancer, orunnamed_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)
| # | Issue | Impact | Effort |
|---|---|---|---|
| 1 | Fix the 4 accessibility fails (color-contrast token, 5 image-only links, broken aria-labelledby, app-link label mismatch) | WCAG AA compliance; avoids audit/legal risk | Low (dev half-day) |
| 2 | Resolve 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) |
| 3 | Normalize PDP Product.name to clean product title (drop "Buy … | Aramya") | Cleaner rich-result snippets | Low |
🟡 Short-Term (This Month)
| # | Issue | Impact | Effort |
|---|---|---|---|
| 4 | INP reduction — consolidate GA4/GTM to one container; lazy-load MoEngage/ShareChat post-interaction; defer non-critical JS | Directly improves the only failing CWV metric (251→<200 ms = full CWV pass) | Medium |
| 5 | Add full CSP (script-src with nonces/hashes) + HSTS + X-Frame-Options + COOP | XSS/hijack hardening; lifts Best Practices | Medium (security review) |
| 6 | Homepage H1 → keyword-targeted ("Premium Cotton Kurtas & Ethnic Wear for Women") while keeping the "10 Lakh+" banner as a sub-heading | Primary-keyword H1 on the most-linked page | Low |
| 7 | Pre-render / RSC the homepage SHOP BY FABRIC & OCCASION product grids (currently client-"Loading") | Recovers link equity + faster product paint | Medium |
| 8 | Code-split / defer ~596 KiB unused JS; remove legacy/deprecated API usage | Faster TBT, better INP headroom | Medium |
🟢 Long-Term (This Quarter)
| # | Issue | Impact | Effort |
|---|---|---|---|
| 9 | Migrate third-party tags to server-side / consented first-party storage (third-party-cookie phase-out) | Preserves analytics/re-marketing under Chrome changes | Medium |
| 10 | Fix "OCCASSION" → "OCCASION" copy; general brand-copy polish pass | Brand polish | Low |
| 11 | If expanding to NRI/diaspora: introduce locale structure + hreflang | Unlocks international SEO | High (when relevant) |
Summary Score Card
| Category | Score | Grade |
|---|---|---|
| Performance (Mobile, field) | LCP Good / INP 251 ms (Needs Improvement) / CLS Good | 🟡 Needs Improvement |
| Performance (Desktop) | Not assessed (CrUX 0% desktop traffic) | N/A |
| Accessibility | 84/100 | 🟡 B |
| Best Practices | 54 (mobile) / 81 (desktop) | 🟡 / 🔴 |
| SEO | 100/100 | 🟢 A |
| Content Quality | Real photography, full schema, strong trust signals | 🟢 |
| UX | Minor copy/link-name nits | 🟢 |
| Overall | CWV-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/pagespeedonlinereturned 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.