Sweet Dreams (sweetdreams.in) — Consolidated CRO Audit
Brand: Sweet Dreams (S D Retail Ltd., NSE: SDREAMS) Website: https://www.sweetdreams.in Audit date: 2026-08-27 Prepared by: CRO audit pass (synthesis of pageaudit/*.md + business-analysis.md) Scope: Full funnel — Homepage → PLP → PDP → Cart → Checkout → Support/Utility pages, read against business context.
0. How to Read This Report
This is the master CRO document. It consolidates five page-level audits (homepage, PLP, PDP, cart-checkout, support-utility) into a single prioritized view. Each finding below cites the page audit it came from. Severity is normalized to one scale:
- CRITICAL — the funnel breaks; this alone causes catastrophic abandonment.
- MAJOR — material conversion loss; fix in the next sprint.
- MODERATE — real friction or trust gap; schedule soon.
- MINOR — quality/hygiene; fix opportunistically.
Device-coverage honesty note (carried from every page audit): The audit toolset renders a desktop 1280px browser only — there is no true mobile viewport or screenshot. Mobile-specific behavior (hamburger, sticky buy-bar, touch targets, mobile filter sheet) is inferred from the responsive DOM, not observed on a real phone. All such findings are tagged [inferred]. This is a known limitation, not a pass.
1. Business Context (why these findings matter)
From business-analysis.md:
- Position: India's #1 sleepwear-focused brand (family-wide: women/men/kids 2–16). Listed NSE SME (SDREAMS), FY25 revenue ₹173 cr (+6.45%), net profit ₹8.56 cr.
- Channel mix: Offline-led — majority revenue from 75 EBOs + MBO/distributors. D2C is a growing minority the RHP explicitly says must scale.
- Price tier: Mass-to-mid (core pyjama sets ₹1,049–₹1,799; best-sellers median ~₹2,599).
- Segment behavior: Low-to-mid AOV → impulse + repeat-purchase; the dominant conversion levers are fit certainty, social proof/reviews, and low-friction add-to-cart with COD/return reassurance.
- Differentiators: proprietary fabric library (14+ trademarked fabrics), character licensing (Snoopy/Minions/Garfield), moods segmentation, omnichannel + listed credibility.
- Known technical risk (from CrUX): phone LCP good (~1.7–2.1s) but INP regressing (140→247ms) and CLS spiked to 0.17 (above the 0.10 "good" threshold) — a mobile conversion risk flagged across the page audits.
- Catalog gaps noted: no quick-commerce, no subscription, no app, under-scaled men's "SD Move", no plus-size, weak review/UGC depth.
Strategic read: The D2C storefront is the brand's lowest-friction acquisition surface and the one channel management wants to grow. The findings below show the storefront is well-built on discovery and trust-fundamentals but broken at the two moments that actually convert: add-to-cart and checkout. Fixing the functional breakages (Section 2) is worth far more than the cosmetic gaps.
2. Critical Findings (fix first — funnel-breaking)
| # | Finding | Source | Evidence | Recommended fix | Success metric |
|---|---|---|---|---|---|
| C1 | PDP "ADD TO BAG" does not add to cart in the rendered storefront (Gokwik intercept silently fails; badge/drawer stay empty) | cart-checkout §2–3, pdp §5C | Clicked "ADD TO BAG" (genuine click, size selected) → no drawer, badge stayed "0", cart icon showed empty. Reproduced across reloads. Console: No Gokwik ----->. Standard cart/add.js works when called directly, so the variant mapping is fine — the button is broken. | Fix the Gokwik/theme integration so the on-page add reliably writes to the cart and opens the drawer; add a fallback that POSTs to /cart/add.js if the accelerator handler doesn't confirm success. Verify on real devices/browsers. | Add-to-cart success rate; cart item_count on add. |
| C2 | Cart quantity "+" stepper wipes the ENTIRE cart (reproduced on drawer + dedicated /cart) | cart-checkout §3 | Clicked qty "+" → cart emptied ("Your cart is empty", badge "0"). Reproduced twice. Root cause is in the theme's cart JS (reproduces on native /cart, which Gokwik does not control) — independent of the PDP add bug. | Patch the AJAX qty-increment handler (it is deleting the line/cart instead of updating quantity). Add a regression test for qty 1→2→1. | Cart-edit success rate; abandoned-cart rate. |
These two are hard functional defects, not "missing social proof" nuance. C1 + C2 together mean a shopper often can't add, and if they do, can't change quantity without losing everything. This is the single biggest leak on the site — higher priority than anything in Sections 3–5.
3. Major Findings (next sprint)
3.1 Funnel architecture / checkout
| # | Finding | Source | Evidence | Fix | Metric |
|---|---|---|---|---|---|
| M1 | Checkout entry is a mandatory GoKwik phone-login gate (pdp.gokwik.co iframe) that hides native email guest checkout | cart-checkout §4, pdp §5C | Clicking the real CHECKOUT CTA injected a cross-origin Gokwik iframe with a mandatory mobile-number field + OTP. Native Shopify checkout (loaded directly) offers email-only guest with no phone. The two paths disagree; the on-site one is the higher-friction path a real shopper hits. | Either (a) let the Gokwik gate offer a "Continue as guest / email" path, or (b) restore a visible standard Shopify checkout option. Don't force OTP phone login before shipping/payment. | Checkout-start rate; guest-vs-login split. |
| M2 | Cart↔client sync lag — even a successful server-side add doesn't reflect in the UI (badge/drawer stay "0") until a full reload | cart-checkout §3 | Seeded cart showed badge "0"/empty drawer until browser_navigate to /cart re-synced. | Ensure the add handler updates theme cart state client-side (open drawer, bump badge) on success, not just on reload. | Cart-open rate after add. |
| M3 | Empty-cart dead-end — only "CONTINUE SHOPPING"; no recommendations | cart-checkout §3 | After the qty+ wipe the empty state had only a bare link. Ironically, the "Customers also bought" rail exists for non-empty carts but vanishes when empty. | When empty, reuse the existing "Customers also bought" rail as a "Trending / Best Sellers" carousel with quick-add. | Empty-cart recovery rate. |
3.2 Trust / social proof / discovery
| # | Finding | Source | Evidence | Fix | Metric |
|---|---|---|---|---|---|
| M4 | Reviews are absent site-wide — Judge.me is UNINSTALLED (not "PDP-only" as initially assumed) | plp §1, pdp §4 | Template comment: snippets/judgeme_widgets.liquid was not rendered, the associated app was uninstalled. Zero stars/counts/photos on PLP cards AND PDPs, confirmed by wait+reload+static HTML. | Reinstall Judge.me (or Loox/Yotpo) and seed 5–10 reviews w/ photos per top SKU. The widget then appears on PDP, PLP cards, and homepage uniformly. | PDP→cart rate; review coverage %. |
| M5 | Homepage hero is image-only — no value-prop headline or CTA above the fold | homepage §10 (#1/#2) | 6 image slides, no text overlay, empty <h1> in live DOM. First CTA (SHOP NOW) is ~1 scroll down. VP exists only in the tab <title>. | Add a hero overlay headline + primary CTA (Shop Women / Shop Men). | Hero→PLP CTR. |
| M6 | Conflicting support hours — Contact page "Mon–Sat 9AM–6PM" vs site-wide footer "10 AM to 7 PM" | support §1.2, C1 | Two different support windows published on the same site; directly undermines the trust the Contact page exists to provide. | Single source of truth; sync footer + contact hours. | Support-contact rate; fewer "are you open?" queries. |
| M7 | Store Locator is fully JS-rendered (79 rows) — feeds the regressing INP / CLS 0.17 | support §1.5, F14 | Static HTML has only template labels, no store data. Homepage audit already flagged CrUX INP/CLS regression. | SSR or paginate the store list. | CrUX INP/CLS. |
| M8 | Zero social links on homepage AND all support-page footers | homepage §6/#9, support C7 | Verified: no IG/FB/LI/YT hrefs on homepage or any support footer (footer social links are JS-injected but not surfaced). Owned channels wasted; no community loop. | Add Instagram/Facebook/LinkedIn (YouTube if real) icons to the footer template. | Social click-through. |
| M9 | CLS 0.17 / INP regressing (mobile) — technical conversion risk | homepage §23, business-analysis §5a | CrUX: LCP good, INP 140→247ms (regressing), CLS 0.17 (needs improvement). Late-loading hero/carousel imagery + injected banners ("Summer Arrivals / COD") are likely causes. | Reserve hero/carousel dimensions; defer non-critical JS; lazy-paint hygiene. | CrUX INP/CLS. |
4. Moderate Findings (schedule soon)
| # | Finding | Source | Fix | Metric |
|---|---|---|---|---|
| Mo1 | No wishlist anywhere (PDP, PLP cards, header) — repeat/gifting/"buy-the-family-set" shoppers can't shortlist | plp §4, pdp P3 | Add a visible wishlist heart (header + PDP + cross-sell cards) + "Your wishlist" page. | Wishlist saves; return-visit conversion. |
| Mo2 | No Quick View / Quick Add on PLP cards — PDP is the only add path; one extra navigation per intent | plp §3, pdp | Add hover Quick Add (desktop) and/or Quick View modal. | Add-to-cart rate; PLP→PDP→cart steps. |
| Mo3 | PDP: no delivery-date / PIN estimator in buy box (badges say "Free & Fast Shipping" but no ETA) | pdp P5 | Add PIN/zip delivery estimator. | Checkout conversion; RTO. |
| Mo4 | No cost transparency until address entry on native checkout (shipping/tax hidden behind address form) | cart-checkout §4 | Surface estimated shipping / "Free shipping over Rs.X" earlier; show tax once address in. | Checkout completion rate. |
| Mo5 | No trust badges at cart / checkout entry (COD/returns reassurance present on PDP, absent at cart+checkout) | cart-checkout §3 | Re-show "COD · Free Shipping · 15-day Return · Secure Payment" in cart drawer + checkout sidebar. | Checkout confidence/completion. |
| Mo6 | WhatsApp referenced as support channel but NOT clickable (no wa.me link; footer "Chat" button has no prefilled context) | support §1.2, F2 | Add clickable WhatsApp with prefilled text ("Hi, I have a query about…"). | WhatsApp-initiated chats; pre-sale queries deflected. |
| Mo7 | No sizing/fit FAQ or size-chart in nav — high fit-anxiety objection unaddressed pre-PDP | support §1.3, F3 | Add sizing FAQ + size-chart link from FAQ and PDP. | Return rate (fit); PDP→cart. |
| Mo8 | Store Locator: no one-tap Call / Get Directions on store cards (mobile) [inferred] | support §1.5, F5 | Add per-store "Call" + "Get Directions" buttons. | Store-visit assists; directions clicks. |
| Mo9 | Store Locator: no appointment/booking CTA — offline-led brand misses visit booking | support §1.5, F6 | Add "Book a visit" / consultation CTA where relevant. | Booked appointments. |
| Mo10 | Blog: no inline newsletter / lead capture — top-of-funnel sleep-science readers not captured | support §1.6, F8 | Add blog newsletter CTA / end-of-article module. | Subscriber growth. |
| Mo11 | Empty alt text on hero + mega-menu images (product images are fine) | homepage §13/#4 | Add descriptive alt to hero/menu/category images. | Alt-coverage %, a11y score. |
| Mo12 | PDP: no bundles / "Frequently Bought Together" — only "You may also like" rail | pdp P6 | Add "Complete the look" bundle (top+bottom, or sleep mask) with slight discount. | AOV, attach rate. |
5. Minor Findings (opportunistic hygiene)
| # | Finding | Source | Fix |
|---|---|---|---|
| Mi1 | Text-smash "ShopYour Perfect Sleepwear" (missing space) | support §1.1, C3 | Fix Liquid spacing. |
| Mi2 | FAQ domain rendered inline ("www.sweetdreams.in" instead of "our site") | support §1.3, C4 | Replace token with "our site"/"Sweet Dreams". |
| Mi3 | "Whataapp" typo in contact consent label | support §1.2, C5 | Fix typo. |
| Mi4 | Store dropdown casing inconsistency (GUJARAT/Gujrat, DEHRADUN/Dehradun) | support §1.5, C6 | Normalize state/city casing. |
| Mi5 | Header position:absolute (not sticky) — nav scrolls away | homepage §23, plp | Make header sticky/fixed. |
| Mi6 | Gender facet is a false affordance on pre-scoped collections (only the collection's own gender offered) | plp §5 | Hide/repurpose degenerate facet. |
| Mi7 | Filter-param namespace trap (filter.v.option.fabric doesn't work; correct key is material) | plp §5 | Document correct param for shared/ad links. |
| Mi8 | No image sale badge (sale only a strikethrough price) | plp §3 | Add "Sale"/"%-off" badge on discounted cards. |
| Mi9 | PDP breadcrumb missing category level (Home › <title> only) | pdp P4 | Add collection crumb (product.collections first). |
| Mi10 | Blog: no related-products card grid (only 3 inline text links) | support §1.6, F9 | Add end-of-article product carousel. |
| Mi11 | No loyalty/membership program surfaced in nav | homepage §9, support F13 | Add loyalty surface (repeat-purchase LTV). |
| Mi12 | No free-shipping progress bar in cart | cart-checkout §3 | Add "Spend Rs.X more for FREE shipping". |
| Mi13 | PDP color not switchable (other colours are separate products) | pdp P8 | Expose Color radio where multiple variants exist. |
| Mi14 | Meta Pixel currency warning + 6 empty JS exceptions (BugsNAG/Gokwik) | pdp P9 | Fix Pixel currency param; suppress swallowed exceptions. |
| Mi15 | No product video / 360° / verified zoom on PDP | pdp P7 | Add 15–30s try-on video; verify hover-zoom. |
6. Funnel-Stage Scorecard
| Stage | Page | Health | Headline issue |
|---|---|---|---|
| Awareness / first impression | Homepage | 🟡 Moderate | No hero headline/CTA (M5); no reviews/social proof (M4/M8); CLS/INP regression (M9) |
| Discovery | PLP | 🟡 Moderate | Zero reviews on cards (M4); no wishlist/quick-add (Mo1/Mo2); false Gender facet (Mi6) |
| Decision | PDP | 🟠 Major | Reviews uninstalled (M4); Gokwik add-intercept (C1/M1); no delivery ETA (Mo3); no bundles (Mo12) |
| Add to cart | PDP→Cart | 🔴 Critical | Add button broken (C1); qty+ wipes cart (C2); UI sync lag (M2) |
| Checkout | Cart→Pay | 🔴 Critical/Major | GoKwik phone gate (M1); empty-cart dead-end (M3); no cost/trust transparency (Mo4/Mo5) |
| Support / reassurance | Utility pages | 🟢 Solid (consistency gaps) | Conflicting hours (M6); WhatsApp not clickable (Mo6); no sizing FAQ (Mo7) |
Overall funnel verdict: The top of the funnel (discovery, content, trust fundamentals) is well-built. The bottom of the funnel is where revenue leaks: two reproducible Critical defects (C1, C2) plus a Major architectural gate (M1) sit exactly at add-to-cart and checkout — the moments that convert. These outrank every cosmetic gap.
7. Prioritized Roadmap (what to ship, in order)
Tier 1 — Stop the bleeding (this week, Critical):
- C2 Fix cart qty+ wipe (theme JS bug, low–medium effort, highest urgency).
- C1 Fix PDP add-to-cart reliability + add
/cart/add.jsfallback (medium effort). - M2 Fix client cart-state sync so the badge/drawer update on add.
Tier 2 — Unblock checkout (next sprint, Major):
- M1 Resolve the GoKwik gate — expose guest/email checkout or a clear express-confirm step.
- M3 Empty-cart recovery carousel (reuse existing "Customers also bought" rail).
- M4 Reinstall reviews + seed per-SKU reviews with photos (highest-leverage trust fix).
- M6 Reconcile support hours to one source of truth.
- M9 Reserve hero/carousel dimensions + defer non-critical JS (CLS/INP).
Tier 3 — Conversion lift (Major/Moderate):
- M5 Hero headline + primary CTA.
- Mo1 / Mo2 Wishlist + Quick Add/View on PLP.
- Mo3 / Mo4 / Mo5 Delivery ETA, early cost transparency, re-show trust badges at cart/checkout.
- Mo6 / Mo7 Clickable WhatsApp + sizing/fit FAQ.
- M7 / Mo8 / Mo9 Store Locator SSR/pagination + mobile Call/Directions + booking CTA.
- M8 Social icons in footer template.
Tier 4 — Hygiene (Minor, opportunistic):
- Text-smash/typo/casing fixes (Mi1–Mi5), false Gender facet (Mi6), sale badge (Mi8), breadcrumb (Mi9), loyalty surface (Mi11), free-shipping bar (Mi12).
8. What's Working (preserve these)
- Strong category/fabric/character-licensing discovery — mega-menus, fabric library, collab nav (homepage/PLP).
- Technically correct faceted filtering & sorting — verified mathematically across all 75 PLP cards; URL-stateful (PLP).
- Rich SEO/buying-guide content below PLP grids (PLP).
- PDP buy-box trust badges — COD + Free Shipping + Secure Payment + Easy Return (PDP).
- Tax-inclusive pricing, full size chart, 4 well-written accordions (PDP).
- "Customers also bought" cart upsell rail — genuinely well-implemented (cart-checkout).
- Clear, plain-language 15-day return policy + shoppable blog + robust 79-store locator (support).
- No broken links / 404s across the entire support-page graph (support).
- Listed-company credibility surfaced via Investor Relations (homepage/support).
- Native Shopify checkout is clean when reached — email guest, PayU + COD, no COD fee (cart-checkout). The Gokwik gate is an added friction layer, not a platform requirement.
9. Methodology & Confidence
- Source material:
pageaudit/homepage.md,pageaudit/plp.md,pageaudit/pdp.md,pageaudit/cart-checkout.md,pageaudit/support-and-utility.md,business-analysis.md— all produced 2026-08-27 via live HeadlessChrome (desktop 1280px) + DOM/console/static-HTML/Shopify-JSON cross-checks. - Reproducibility: C1 (add failure) and C2 (qty-wipe) were each reproduced across reloads with genuine UI clicks. M1 (GoKwik gate) was triggered by clicking the real CHECKOUT CTA.
- Confidence: Critical/Major functional findings = High (reproduced live). Inferred-mobile findings = Medium (responsive DOM only, no true phone viewport).
- Known limitation: No mobile viewport/screenshot on the toolset — all mobile-specific claims are inferred and flagged
[inferred]. A real-device verification pass is recommended before shipping mobile-only fixes. - No fabrication: Social/device-spend/quick-commerce gaps are reported as measured-or-absent, not estimated. Traffic and ad-spend were not reliably extractable and are excluded rather than guessed.
Master CRO audit saved to cro-audit.md. Companion page-level reports: pageaudit/homepage.md, pageaudit/plp.md, pageaudit/pdp.md, pageaudit/cart-checkout.md, pageaudit/support-and-utility.md. Business context: business-analysis.md.