Web Quality Audit: Enchant Home

Website: https://enchanthome.in/ | Date: 17 August 2026 | Platform: Shopify (theme #146257543398, Cloudflare + Shopify CDN) | Industry: D2C Home Textiles / Bedding & Bath Linen (India)

Business context taken from business-analysis.md (sibling task): Vertically-integrated manufacturer in Ichalkaranji, Maharashtra; 387 SKUs / 34 collections; value-to-mid positioning (median variant ≈ ₹900); runs ~56 active Meta ads, 0 Google Ads; 100% of measurable traffic is phone (CrUX form factors, 2026-07-19→08-15); Judge.me reviews installed; Amazon.in store live. The audience is overwhelmingly mobile, so mobile quality is the primary surface for every optimization below.

Executive Summary

Enchant Home is a technically sound Shopify build with clean HTTPS/HSTS/CSP security, good on-page SEO foundations (keyword-rich titles, self-canonical, full OG/Twitter coverage, working sitemap/robots), and a passing real-user Core Web Vitals assessment (mobile field LCP 1.9s, CLS 0). The serious problems are threefold:

  1. Lab performance is Poor on both device classes — mobile Lighthouse Performance 47 (lab LCP a catastrophic 13.0s), desktop 43 (lab LCP 0.9s but CLS 0.679 and TBT 1140ms). The origin ships a ~10.8 MB page payload with heavy render-blocking CSS and unused JS/CSS. Real users are fine today (fast devices/cached assets, Shopify edge), but the lab cliff means any throttled or low-end-device visitor — exactly this brand's value-segment, mobile-only audience — gets a punishing experience.
  2. Structured data is almost entirely missing and partly broken. Homepage + collection pages have zero JSON-LD (no Organization, WebSite, BreadcrumbList, or ItemList). Product pages emit only Product schema, it has a malformed availability value ("http://schema.org/ outstock ") that schema validators reject, and there is no aggregateRating/review markup even though Judge.me is installed — so star ratings never appear in SERPs.
  3. Brand-consistency and accessibility gaps — the collection template renders the brand as "Enchant Homes" (plural+s) while everywhere else it is "Enchant Home"; the homepage contains 3 duplicate <h1> elements (hero slider) and 0 ARIA attributes; ~13–15% of homepage images ship without/empty alt text.
CategoryMobile ScoreDesktop ScoreGrade
Performance4743🔴
Accessibility8892🟢
Best Practices7373🟡
SEO9292🟢
Overall75*75*🟡

\Overall is a non-weighted blend of the four Lighthouse categories; it does not capture the structured-data and brand issues above, which are separately scored as High/Medium severity. Mobile vs desktop performance gap is 1.09× (47 vs 43) — not a divergence problem; both* are poor.


1. Performance Audit

1.1 CrUX Real-World Field Data

Core Web Vitals Assessment (field): Passing on mobile — LCP 1.9s (Good, ≤2.5s), CLS 0 (Good, ≤0.10), INP N/A (not reported for this origin).

Source: PageSpeed Insights "Discover what your real users are experiencing" panel (report captured 17 Aug 2026, 28-day CrUX window ending 2026-08-15). PSI labels the assessment "Passed."

Note on CrUX Vis discrepancy: The CrUX Vis tool (cruxvis.withgoogle.com) showed all three CWV metric values as "missing data" for the 2026-08-15 summary, with only one historical LCP reading of 2587 ms (period 2026-06-28→07-25, which is Needs Improvement, just over the 2.5s Good threshold). The origin is in CrUX (form-factor data is available, per the business analysis), but per-metric values sit near the inclusion threshold. Treat the field "Passed" verdict as directionally correct but low-confidence — the metric samples are sparse. The business takeaway stands either way: real users on good connections are fine; the risk is the lab cliff below.

1.2 Core Web Vitals (Lighthouse Lab Data)

MetricMobile (lab)Desktop (lab)GoodMobile RatingDesktop Rating
FCP4.4 s0.8 s≤1.8 s🔴 Poor🟢 Good
LCP13.0 s0.9 s≤2.5 s🔴 Poor (5.2×)🟢 Good
TBT550 ms1,140 ms≤200 ms🔴 Poor (2.75×)🔴 Poor (5.7×)
CLS00.679≤0.10🟢 Good🔴 Poor (6.8×)
SI6.6 s2.0 s≤3.4 s🔴 Poor🟢 Good

Source: pagepeed.web.dev, Lighthouse 13.4.1, captured 17 Aug 2026. Mobile emulated Moto G Power, Slow 4G; Desktop custom (Cable-equivalent) throttle.

The mobile LCP 13.0s is the single most alarming number in this audit. It is 5.2× the Good threshold and 3.25× the Poor threshold (4s). Because this store is 100% mobile, a 13-second largest-contentful-paint on emulated mid-tier hardware means a large share of real visitors — many on sub-Slow-4G Indian 4G — are waiting 10+ seconds for the hero to paint. The field LCP of 1.9s is dramatically better, which strongly implies the gap is driven by uncached first visits + render-blocking CSS/JS + a 10.8 MB payload rather than by server TTFB (field TTFB is 0.6s, which is excellent).

1.3 LCP Phase Breakdown (Mobile)

Not separately extractable from the PSI UI in this pass; the dominant LCP insight is the 10.8 MB total network payload and 1,210 ms of render-blocking-request savings flagged. With a 13.0s LCP against a 0.6s TTFB, the overwhelming majority of the delay is resource load + element render delay (large hero video/image + deferred CSS), not server response. Recommendation: preload the LCP hero and inline critical CSS (see 1.4).

1.4 Performance Issues by Impact

Critical (>1s estimated savings)

  • Render-blocking requests — est. 1,210 ms (mobile). The homepage <head> preloads nine separate stylesheets (critical.css, bootstrap-grid.css, utilities.css, vendor.css, base.css, animations.css, judgeme-reviews.css, etc.) and ships 35 stylesheets / 67 scripts total. Several are render-blocking. Fix: inline critical CSS, defer/async non-critical CSS, combine + minify. Effort: Medium.
  • LCP element not prioritized — lab LCP 13.0s. Hero is a <Video> with overlaid H1; the LCP resource is large and un-preloaded. Fix: add <link rel="preload" as="image"> (or video poster) for the hero, use a static poster image as the LCP candidate, lazy-defer the video. Effort: Medium.

High (200ms–1s)

  • Enormous network payload — 10,779 KiB total (mobile). The page pulls ~10.8 MB. Fix: serve AVIF/WebP <img srcset> (many product images are 1280px Amazon imports), lazy-load below-fold imagery, drop unused app JS. Effort: Medium–High.
  • Reduce unused JavaScript — est. 437 KiB (mobile). Theme + app bundle ships dead code. Fix: defer third-party app scripts (Judge.me, wishlist, customization), Tree-shake. Effort: Medium.
  • Legacy JavaScript — est. 22 KiB (both). Polyfills for dead browsers. Fix: drop with nomodule/modern build. Effort: Low.
  • Desktop CLS 0.679 / mobile TBT 550–1140 ms. Layout shift culprits flagged; 46 animated elements + forced reflow. Fix: set width/height on media, transform-based animation only, reserve space for lazy media and the announcement bar. Effort: Medium.

Medium / Low

  • Use efficient cache lifetimes — est. 324 KiB (both). Static assets lack long-lived Cache-Control. Fix: Cloudflare/Shopify CDN cache rules. Effort: Low.
  • Optimize DOM size — homepage ~1,258 elements; collection pages larger (193 results, 17 pagination pages). Fix: paginate/infinite-scroll product grids server-side. Effort: Medium.
  • More than 4 preconnect connections (warning). Fix: trim to cdn.shopify.com + fonts; the 9 preloaded stylesheets dilute priority. Effort: Low.
  • Font display — est. 60 ms; ensure font-display: swap. Effort: Low.

1.5 Resource Transfer Summary (mobile, lab)

CategoryApprox. WeightNotes
Imageslargest share of 10.8 MBAmazon-imported 1280px JPGs, no srcset
JS437 KiB unused + app bundlesJudge.me, customization, wishlist
CSS35 stylesheets, 17 KiB unused9 preloaded render-blockers
3rd-partyShopify + Judge.me + CloudflareCLS/reflow contributors

2. Accessibility Audit

2.1 Critical Issues

  • None critical. <html lang="en"> present, viewport present, HTTPS enforced.

2.2 High Priority Issues

  • Duplicate <h1> ×3 on homepage. The hero slider renders the same "Premium Bedding & Bath Linen" H1 three times (one per slide). Screen readers and Google both see three top-level headings. Fix: single visible H1; mark slide duplicates aria-hidden or use one H1 + aria-hidden decorative repeats. Effort: Low.
  • Homepage images missing/empty alt: 4 with no alt, 9 with alt="" (out of 52) — ~25% not carrying descriptive text. Product/collection pages are better (2–5 of 17–30). Fix: add descriptive alt to all content/hero images; reserve alt="" for purely decorative. Effort: Medium (bulk via theme + alt-fill app).
  • Zero ARIA attributes site-wide ([aria-] count = 0 on homepage). Interactive widgets (mega-menu, sliders, filters, quantity stepper) have no roles/labels. Fix: add aria-label/role to icon buttons (search, account, cart) and aria-expanded to menus. Effort: Medium.

2.3 Positive Findings

  • Single logical H1 on product/collection pages; breadcrumbs present and visible.
  • Color contrast passes (Lighthouse a11y 88 mobile / 92 desktop).
  • Form inputs (newsletter, search, quantity) are labeled.
  • Skip-to-content not explicitly observed but heading/landmark structure is present.

3. SEO Audit

3.1 Technical SEO

CheckStatusEvidence
robots.txtAllows crawl, disallows /cart /checkout /account, references sitemap
XML SitemapIndex → products (387), pages, collections (34), blogs; clean, 0 ?variant= URLs (no variant pollution)
CanonicalSelf-referencing on homepage, product, collection
IndexationNo noindex observed on key templates
HTTPSEnforced, HSTS max-age=7889238, CSP present
Mobile-friendlyResponsive; viewport configured
URL structureReadable, hyphenated, keyword-rich handles
Mixed contentCSP block-all-mixed-content; upgrade-insecure-requests

3.2 On-Page SEO Issues

  • Homepage title is brand-only-ish but acceptable: "Enchant Home | Premium Bedding & Bath Linen Online" — includes primary keyword. ✅
  • Collection titles are strong: "Cotton Bedsheets: Buy Single and Double Bedsheets Online | Enchant Homes" — keyword-targeted. ✅ (but see brand bug below)
  • Meta descriptions present and unique on homepage, product, collection pages. ✅
  • OG + Twitter tags complete on all sampled templates (og:title/description/image/url/type/site_name; twitter:card/title/description). ✅

Issue — Brand name inconsistency (Medium/High for E-E-A-T): The collection template appends "Enchant Homes" (plural + s) to titles/meta while the homepage, product pages, and Organization references use "Enchant Home". Confirmed in raw HTML (collections: 6× "Enchant Homes" vs 53× "Enchant Home"). This fractures brand-entity signals and looks unpolished. Fix: standardize on "Enchant Home" everywhere (theme locale / collection metafield). Effort: Low.

3.3 Schema Markup

Schema TypeHomepageProductCollectionNeeded?
OrganizationHigh
WebSite (+SearchAction)High
Product✅ (partial)
BreadcrumbList⚠️ (visual only)⚠️ (visual only)High
ItemList (collections)Medium
AggregateRating/ReviewHigh

Critical schema defects:

  1. Homepage & collections emit NO JSON-LD at all — no Organization (with sameAs to the verified FB/IG/LinkedIn/YouTube), no WebSite sitelinks-searchbox, no BreadcrumbList. This forfeits rich-result eligibility across the entire site except product pages.
  2. Product availability is malformed: "availability": "http://schema.org/ outstock " — contains a stray space and an invalid token. Valid is http://schema.org/OutOfStock (or InStock). Schema validators reject this, so availability rich results fail. (Also note: this specific product was actually sold out — "SOLD OUT" in UI — so the value intent was right, the format is broken.)
  3. No aggregateRating/review in Product schema despite Judge.me being installed site-wide. Product pages show review widgets but Google gets no structured rating → no star ratings in SERPs, a major CTR loss for a review-driven category (fit, softness, shrinkage are exactly what linen buyers search for).
  4. Product schema otherwise solid: correct @context, name, url, image, brand.name ("Enchant Home"), offers with sku/price/priceCurrency (INR). description is bloated with shipping/policy boilerplate — trim to the product copy for cleaner snippets.

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

  • Experience/Expertise: Manufacturing claim ("we manufacture at our facility in Ichalkaranji") is strong and repeated; material specs (250 TC, GSM, sizes) are detailed. ✅
  • Authoritativeness: No press, awards, or founder transparency (per business analysis). ⚠️
  • Trustworthiness: Contact phone (+91 91759 19598), email (support@enchanthome.in), physical HQ (Ichalkaranji), return/shipping/privacy/terms policies all linked in footer. ✅ Solid for a D2C brand.
  • Opportunity: Add Organization + LocalBusiness schema tying the phone/address to the entity; surface Judge.me ratings in SERPs.

4. International SEO

Not applicable. The site is India-only (content-language: en-IN, INR pricing, pan-India shipping, no localized subfolders or hreflang observed). No multilingual surface exists, so no hreflang/canonical-i18n work is required. (Confirmed: 0 hreflang attributes on homepage raw HTML.)


5. Best Practices & Security

5.1 Security Headers

HeaderValueVerdict
HSTSmax-age=7889238✅ (no includeSubDomains/preload, minor)
X-Frame-OptionsDENY
X-Content-Type-Optionsnosniff
CSPblock-all-mixed-content; frame-ancestors 'none'; upgrade-insecure-requests✅ (no script-src allowlist — permissive but safe default)
X-XSS-Protection1; mode=block✅ (legacy, harmless)
COOP/COEPabsent⚠️ Low (not needed for this site)

Overall Best Practices 73/100 — the deductions are almost entirely the performance-adjacent "best practices" audits (image delivery, legacy JS, browser errors logged). No security vulnerabilities found. Server is Cloudflare fronting Shopify; powered-by: Shopify header leaks but is harmless.

5.2 Modern Standards

  • Valid HTML5 doctype, UTF-8 charset, no document.write, no mixed content. ✅
  • 3 iframes on homepage (likely reviews/embed) — verify they're not leaking third-party trackers that hurt CLS/TBT.

6. Content Quality Assessment

6.1 Image Quality & Authenticity

  • No AI-generated imagery detected. Product filenames are real photography (e.g. 71hrq-RLmZL._SL1280.jpg Amazon-imported, product_image_01_<uuid>.jpg, Untitled_design.png banners). For a "factory-direct / we manufacture it" brand this is the correct, authentic choice — no brand-authenticity mismatch.
  • Image SEO gap: missing/empty alt on ~25% of homepage images; no srcset/AVIF → both an a11y and a performance issue.

6.2 UX Issues

  • Sold-out products still browsable & filterable (e.g. the audited bedsheet was SOLD OUT but fully rendered with "NOTIFY ME"). Acceptable pattern, but 60 of 135 in-stock-filtered bedsheets were out-of-stock — a large dead-SKU ratio that wastes crawl budget and shopper time. Consider auto-archiving or pushing sold-out items down.
  • Announcement bar ("Get 10% OFF") is dismissible; ensure it doesn't cause CLS (reserve space).
  • Mega-menu (Bed/Bath/Customize) works; verify keyboard focus order + aria-expanded.

7. Priority Recommendations

🔴 Immediate (This Week)

#IssueImpactEffort
1Fix Product availability value to valid http://schema.org/InStock/OutOfStock (remove stray space)Restores availability rich results on 387 productsLow
2Add aggregateRating + review to Product JSON-LD via Judge.me's schema outputStar ratings in SERPs → higher CTR on a review-driven categoryLow–Med
3Standardize brand name to "Enchant Home" everywhere (kill "Enchant Homes" in collection titles/meta)Consistent entity signal, polishLow
4De-duplicate homepage <h1> (single visible H1; hide slider repeats)Clean heading hierarchy for SEO + a11yLow

🟡 Short-Term (This Month)

#IssueImpactEffort
5Add Organization + WebSite(+SearchAction) + BreadcrumbList JSON-LD site-wideSitelinks, brand panel, breadcrumb SERPsMedium
6Fix mobile LCP: preload LCP hero, inline critical CSS, defer 9 render-blocking stylesheetsMobile LCP 13.0s → target <2.5sMedium–High
7Cut 10.8 MB payload: AVIF/WebP srcset, lazy-load below-fold, drop unused JS (437 KiB) + CSSFaster FCP/LCP, lower TBTMedium
8Add descriptive alt to all homepage/hero images; reserve alt="" for decorativeA11y + image searchMedium
9Add ARIA labels/roles to icon buttons + mega-menu (aria-expanded)Keyboard a11y (currently 0 ARIA)Medium

🟢 Long-Term (This Quarter)

#IssueImpactEffort
10Reserve space for media/announcement bar; fix desktop CLS 0.679 + TBT 1,140 msDesktop CWV to "Good"Medium
11Server-side pagination / lazy product grids on collection pages (193 results)Lower DOM size, faster loadsMedium
12Add ItemList schema to collection pagesCollection rich resultsLow
13Long-lived Cache-Control on static assets (324 KiB savings)Repeat-visit speedLow
14Trim preconnect to ≤3 origins; drop legacy JS polyfillsMinor perfLow
15Archive/deprioritize the large sold-out SKU backlog (60/135 in bedsheets)Crawl budget + UXLow–Med

Summary Score Card

CategoryScoreGrade
Performance (Mobile, lab)47/100🔴 Poor
Performance (Desktop, lab)43/100🔴 Poor
Core Web Vitals (field, mobile)Passing (LCP 1.9s, CLS 0)🟢 Good*
Accessibility (Mobile)88/100🟢 Good
Accessibility (Desktop)92/100🟢 Good
Best Practices73/100🟡 Needs Work
SEO92/100🟢 Good
Structured Data~30/100 (Product only, 1 broken field, no site-wide schema)🔴 Poor
Brand Consistency~70/100 ("Enchant Homes" leak)🟡 Needs Work
Content Authenticity~95/100 (real photos, no AI)🟢 Good
Overall~75/100 (blended Lighthouse) — drag from Poor performance + broken/missing schema🟡

\*Field CWV is "Passed" but low-confidence (CrUX Vis showed metric values as missing data; single historical LCP 2587ms was Needs Improvement).


Sources & Evidence

  • https://enchanthome.in/ — homepage DOM (title, H1×3, lang, viewport, meta/OG/canonical, 52 images / 4 no-alt / 9 empty-alt, 0 JSON-LD, 0 ARIA) via browser_console
  • https://enchanthome.in/products/enchant-home-satin-stripe-king-bedsheet-with-2-pillow-covers — product DOM + raw JSON-LD (Product only; availability:"http://schema.org/ outstock "; no aggregateRating; brand "Enchant Home"); breadcrumbs present; Judge.me widget present
  • https://enchanthome.in/collections/bedsheets — collection DOM + raw HTML (title "... | Enchant Homes"; 6× "Enchant Homes" vs 53× "Enchant Home"; 0 JSON-LD; 193 results / 17 pages; breadcrumbs + filters present)
  • https://pagespeed.web.dev/ — Lighthouse 13.4.1 lab: Mobile Perf 47 (FCP 4.4s, LCP 13.0s, TBT 550ms, CLS 0, SI 6.6s, payload 10,779 KiB, 1,210ms render-blocking, 437 KiB unused JS); Desktop Perf 43 (LCP 0.9s, TBT 1,140ms, CLS 0.679); field CWV "Passed" (LCP 1.9s, CLS 0, INP N/A). Report captured 2026-08-17.
  • https://cruxvis.withgoogle.com/#/ — CrUX Vis origin summary 2026-08-15: all three CWV values "missing data"; one historical LCP 2587 ms (2026-06-28→07-25). Form-factor data (100% phone) per sibling business-analysis.md.
  • https://enchanthome.in/robots.txt — crawl rules + Sitemap directive (verified)
  • https://enchanthome.in/sitemap.xml + sitemap_products_1.xml (387 URLs, 0 ?variant=) + sitemap_collections_1.xml (34 URLs) — verified clean, no variant pollution
  • HTTP response headers (curl -sI) — HSTS, CSP, X-Frame-Options DENY, nosniff, X-XSS-Protection, Cloudflare + Shopify CDN, content-language: en-IN, 0 hreflang
  • business-analysis.md (sibling task t_0a15fc49) — 100% phone traffic, 387 SKUs, Judge.me installed, 0 Google Ads, factory in Ichalkaranji, Amazon store live