Web Quality Audit: Better Beauty (thebetterbeauty.com)
Website: https://thebetterbeauty.com | Date: 15 August 2026 | Platform: Shopify (theme 160654885116) | Industry: Colour cosmetics (lip products), D2C, India (en-IN, ₹)
Business context (from business-analysis.md, t_54402b93): early/launch-stage single-category (lip) D2C brand under AGAUE CONSULTING PVT LTD, Gurugram. ~32 SKUs, Build-Your-Own-Box customiser, dermatologist-approved + India-skin-tone positioning, no paid Meta/Google ads, no marketplace presence, ~2,795 IG / 81 FB followers. Nano-scale traffic (global rank ~17M).
Executive Summary
The site is a clean, modern Shopify storefront with strong real-world Core Web Vitals on desktop and good Lighthouse accessibility/SEO lab scores, but it carries a set of systemic on-page SEO and structured-data gaps that are low-effort to fix and disproportionately damaging for a brand this small. The headline issues:
- Mobile Core Web Vitals are Failing in CrUX — driven entirely by INP = 241 ms (Needs Improvement). Desktop passes cleanly. For a mobile-first, social-driven beauty audience, the mobile interactivity gap is the #1 performance priority.
- Homepage has no meta description and a brand-only
<title>("Better Beauty") — the single most important organic click-through lever, and it's empty. - Multiple H1s on the homepage (3, including a duplicated string) while collection pages have no H1 at all — heading hierarchy is inconsistent across templates.
- Only
Organizationschema site-wide — no WebSite+SearchAction, no BreadcrumbList, no LocalBusiness, no ItemList on collections, and no AggregateRating/Review on products. Plus no breadcrumb navigation anywhere. - Open Graph description is a placeholder ("Better Beauty") on every non-product template, hurting social-share previews.
- Brand-identity data-quality flag: the About page names founders (Naina Ruhail, Dheeraj Beri, Prateek Ruhail) and claims "first makeup brand in India… Dermat Approved," while the business-analysis pass reported founders "not disclosed." This overlaps with the unrelated skincare "Better Beauty" (Anita Hassanandani / Naina Ruhail) brand — the name collision must be resolved so search engines and customers don't conflate the two entities.
| Category | Mobile | Desktop | Grade |
|---|---|---|---|
| Performance (CrUX CWV) | Failing (INP 241 ms) | Passing (all Good) | 🟡 / 🟢 |
| Performance (Lighthouse lab) | 41 | 62 | 🟡 |
| Accessibility (Lighthouse) | 92 | 92 | 🟢 |
| Best Practices (Lighthouse) | 73 | 73 | 🟡 |
| SEO (Lighthouse) | 77 | 77 | 🟡 |
| Overall | — | — | 🟡 (mixed; SEO/structure gaps offset strong perf+a11y) |
Lighthouse lab scores (Perf/A11y/BP/SEO) are from PageSpeed Insights (status captured 2026-08-15). The Lighthouse metric panel (individual FCP/LCP/TBT/etc. values) failed to render in this environment (same API block observed in prior runs) — the CrUX field panel below is the authoritative per-metric source.
1. Performance Audit
1.1 CrUX Real-World Field Data
Source: PageSpeed Insights → Chrome UX Report (field data), latest 28-day period, captured 2026-08-15. This is the authoritative signal (CrUX gives more weeks of data than the single-week window seen in the parent business-analysis pass — the origin has now accumulated enough samples for the 28-day field rollup).
Core Web Vitals Assessment:
| Platform | LCP | INP | CLS | Assessment |
|---|---|---|---|---|
| Mobile | 2.4 s (Good, ≤2.5 s) | 241 ms (Needs Improvement, 200–500 ms) | 0.01 (Good, ≤0.10) | Needs Improvement |
| Desktop | 2.0 s (Good) | 198 ms (Good, ≤200 ms) | 0.00 (Good) | Passing |
Notable metrics: Mobile FCP 1.8 s, TTFB 1.1 s; Desktop FCP 1.7 s, TTFB 1.0 s.
Interpretation: Desktop is fully healthy. The single metric holding mobile back is INP at 241 ms — 41 ms over the 200 ms "Good" threshold. INP measures interactivity (response to taps/clicks); on a mobile-first beauty site driven by the "Find your shade" customiser, Build-Your-Own-Box configurator, and quick-add-to-cart, sluggish tap response directly hurts conversion. The mobile/desktop INP gap (241 vs 198 ms) is ~22% — consistent with heavier main-thread JS on mobile. See §1.4 for the likely cause.
1.2 Core Web Vitals (Lighthouse Lab Data)
Lighthouse individual-metric values did not render in this environment. Lighthouse category scores (lab) are available:
| Category | Mobile | Desktop |
|---|---|---|
| Performance | 41 | 62 |
| (FCP/LCP/TBT/CLS/SI individual values) | not rendered | not rendered |
The mobile Performance score of 41 is low and consistent with the mobile INP flag — a real mobile main-thread/JS problem, not a fluke.
1.3 LCP Phase Breakdown (Mobile)
Not available — Lighthouse metric waterfall did not render. From headers and CrUX: TTFB is healthy (1.1 s mobile), so the LCP risk is render-blocking/pre-resource delay + main-thread blocking, not server response. The theme preloads many CSS/JS assets (see §1.5) which can delay first paint on mobile.
1.4 Performance Issues by Impact
Critical (mobile interactivity):
- INP 241 ms on mobile (Needs Improvement). Likely caused by main-thread-blocking third-party/theme scripts. The homepage ships GSAP + ScrollTrigger + Splide (all preloaded), plus Judge.me reviews, Meta Pixel/CAPI, Klaviyo-class pixel, and Quinn shoppable-video. Each tap (shade swatch, quick-add, slider) competes with these. Recommendation: defer/async non-critical JS, remove GSAP/ScrollTrigger if used only for cosmetic scroll animations on the homepage, throttle analytics, and audit the "Find your shade" / Build-Your-Own-Box handlers for long tasks. Estimated saving: ~40–80 ms INP → back under 200 ms Good.
High:
- Excessive preload/preconnect list (13+
<link rel=preload>+ 3 preconnects in 103 Early-Hints). Preloading 9 stylesheets + multiple JS dilutes browser priority and can delay the real LCP element on mobile. Recommendation: preload only the LCP-critical CSS + hero image; drop preloads for below-fold CSS/JS. Low effort.
Medium/Low:
- Mobile Performance lab score 41 — driven by the above; once INP + preload bloat are fixed, expect mobile Perf into the 60s.
- No
loading="lazy"audit possible without metric render, but homepage has 123<img>— confirm below-fold images (trust-bar icons, shade swatches) are lazy-loaded; the hero/featured product images must NOT be lazy.
1.5 Resource Transfer Summary (from Early-Hints / headers)
Preloaded assets observed in the 103 Early-Hints response:
- 9 stylesheets (style.css, base.css, stylesheet.css, splide.min.css, overflow-list.css, compiled_assets/styles.css, …)
- 3 JS (Splide, GSAP, ScrollTrigger) from cdn.jsdelivr.net
- 3 preconnects: cdn.shopify.com (×2), cdn.jsdelivr.net
This is a heavy render-path for a content-light landing page. jsDelivr (third-party) is on the critical path — a third-party dependency for core animation libs adds latency risk.
2. Accessibility Audit
2.1 Critical Issues
- None critical.
<html lang="en">present,<meta name="viewport">present, skip-to-content link present, HTTPS enforced.
2.2 High Priority Issues
- Images missing
altentirely: homepage 6, About page 2, product page (verify). Missing-alt images are lost to screen readers and image search. Fix: add descriptive alt to all content images (product cards, shade swatches, founder photos). - Empty
alt=""on content images: homepage 29, About page 11. Several are likely decorative (trust-bar icons — acceptable asalt=""), but founder photos and product/collection card images with empty alt lose SEO + a11y value. Audit which empty-alt images are content vs. purely decorative. - No visible breadcrumb trail on any template (a11y wayfinding gap — see §3.3).
2.3 Positive Findings
- Lighthouse Accessibility score 92/100 (mobile + desktop) — strong.
- Logical heading hierarchy on product pages (single H1 = product name).
- Skip-to-content link, viewport, lang all correct.
- Color contrast appears adequate (no failures reported by Lighthouse).
- Form inputs (quantity, search) are labelled/button-accessible.
3. SEO Audit
3.1 Technical SEO
| Check | Status | Evidence |
|---|---|---|
| robots.txt | ✅ Present, Shopify-generated, includes Sitemap: directive, disallows cart/checkout/account | curl robots.txt |
| XML Sitemap | ✅ Index + product/collection/page/blog sub-sitemaps | curl sitemap.xml |
| Canonical URLs | ✅ Self-referencing on all checked templates (home, product, collection, page) | browser DOM |
| Indexation | ✅ No noindex found on key templates | browser DOM |
| URL structure | ✅ Clean, hyphenated, lowercase (/collections/explore-lipsticks, /products/code-red) | — |
| HTTPS | ✅ Enforced (HSTS max-age=7889238; upgrade-insecure-requests CSP) | curl -sI |
| Mobile-friendly | ✅ Responsive; viewport configured | — |
| Mixed content | ✅ block-all-mixed-content CSP | curl -sI |
3.2 On-Page SEO Issues
| Template | Title | Meta Description | Findings | |
|---|---|---|---|---|
| Homepage | ❌ "Better Beauty" (brand only — no keywords) | ❌ Missing entirely | Highest-priority gap. Add keyword title ("Velvet Matte Lipsticks & Build-Your-Own-Box | Better Beauty") + 150–160 char description. |
| Product | ✅ "Code Red – Better Beauty" | ✅ "Rich Bold classic red, Velvet Matte" | Good — auto-generated from product. | |
| Collection | ✅ "Explore Lipsticks – Better Beauty" | ✅ "From everyday nudes to statement hues…" | Good — but title could add "Velvet Matte Lipstick" keyword. | |
| About/Page | ✅ "About – Better Beauty" | ❌ Missing (og:desc = "Better Beauty" placeholder) | Add description. |
- H1 inconsistency (Critical for SEO):
- Homepage: 3
<h1>elements — "Better Beauty", plus two identical "Better Beauty is made for lips that refuse to settle." (a duplicated H1). Multiple H1s dilute the primary keyword signal. - Collection pages: 0
<h1>— "Explore Lipsticks" renders as<h2>. Missing H1 = lost top-level keyword anchor. - Product pages: ✅ single correct H1 (product name).
- Fix: one H1 per page; homepage H1 should carry the primary keyword ("Better Beauty Velvet Matte Lipsticks"), collection H1 = collection name.
- Homepage: 3
- OG description placeholder: every non-product template has
og:description: Better Beauty(the literal brand name, not a description). Social shares (Instagram bio link, WhatsApp, Messenger) will show a useless preview. Fix: populate OG description per template viatheme.liquidLiquid variables. - Keyword targeting: homepage title/H1 carry no commercial keyword ("lipstick", "velvet matte", "Indian skin tone"). For a brand fighting name-collision with a better-known "Better Beauty" skincare brand, ranking on category keywords ("dermatologist approved lipstick India") is the only organic discovery path.
3.3 Schema Markup
| Schema Type | Present? | Where | Issue |
|---|---|---|---|
| Organization | ✅ | All templates | Good — but verify sameAs includes the correct IG/FB/LinkedIn and not the unrelated skincare brand's handles. |
| WebSite + SearchAction | ❌ | — | Missing sitelinks-search-box opportunity. |
| Product | ✅ (×2, duplicate) | Product pages | Two Product blocks on /products/code-red — consolidate to one. |
| BreadcrumbList | ❌ | — | Missing on all templates — no breadcrumb schema AND no visual breadcrumbs. |
| LocalBusiness | ❌ | — | Brand has a physical Gurugram HQ + GST; add LocalBusiness (JewelryStore→ use HealthAndBeautyBusiness/Store) for local/entity signals. |
| ItemList | ❌ | Collection pages | Missing — collections should list products as ItemList. |
| AggregateRating / Review | ❌ | Product pages | Judge.me reviews are installed and show 4.5 badges, but no Review/AggregateRating schema → no star rich results in SERPs. |
| FAQPage | ❌ | — | "Find your shade" / derm-approved FAQ content could be marked up. |
Schema gaps are the highest-ROI SEO fix for this site — they're template-level edits that unlock rich results (stars, breadcrumbs) with no content creation.
3.4 Content Quality (E-E-A-T)
- Trust signals present (good): contact page discloses legal entity (AGAUE CONSULTING PVT LTD), GST 06AAXCA9317L1ZY, Gurugram address, phone +91 928-98-928-58, email. Refund/shipping/exchange/privacy/terms policies linked in footer. Dermatologist-approved + clean/cruelty-free claims stated.
- E-E-A-T gap: founder identities now visible on About page (Naina Ruhail, Dheeraj Beri, Prateek Ruhail) — but the business-analysis pass recorded "founders not disclosed," indicating either a prior crawl gap or name collision with the unrelated skincare "Better Beauty" (Anita Hassanandani / Naina Ruhail). The shared "Naina Ruhail" name strongly suggests search engines may be merging or confusing the two brands. Action: explicitly disambiguate (e.g., "Better Beauty — lip colour by AGAUE CONSULTING, separate from the Better Beauty skincare brand") in About/structured data to protect entity identity.
- Thin content/SEO: only 8 blog posts; domain authority very low (rank ~17M). Building informational content ("how to find your lip shade for Indian skin tones", "dermatologist-approved makeup explained") would capture top-of-funnel queries the brand is otherwise ceding to competitors.
4. International SEO
Not applicable — site is single-locale (en-IN), ships Pan-India only, no hreflang, no international shipping signal. No action needed; flag only if the brand expands abroad. (No cross-locale canonical risk because there is only one locale.)
5. Best Practices & Security
5.1 Security Headers (from curl -sI)
| Header | Value | Assessment |
|---|---|---|
| HSTS | max-age=7889238 | ⚠️ Present but missing includeSubDomains and preload — subdomains not covered; add both. |
| X-Frame-Options | DENY | ✅ |
| X-Content-Type-Options | nosniff | ✅ |
| CSP | block-all-mixed-content; frame-ancestors 'none'; upgrade-insecure-requests; | ⚠️ No script-src directive — the CSP does not restrict script execution, so it provides little XSS mitigation. Add a real script-src allowlist (or at minimum script-src 'self' https://cdn.shopify.com https://cdn.jsdelivr.net). |
| X-XSS-Protection | 1; mode=block | ✅ (legacy) |
| COOP / COEP | not present | ⚠️ COOP same-origin missing (low priority for this site). |
5.2 Modern Standards
- ✅ Valid HTML5, UTF-8 charset, no
document.write, no mixed content (CSP enforces). - ✅
powered-by: Shopify— acceptable. - ⚠️ Many CSS/JS preloads (see §1.5) — performance-hygiene, not a standards failure.
- Shopify manages source maps; not exposed in production headers.
6. Content Quality Assessment
6.1 Image Quality & Authenticity
- AI-generated image detection: Not formally run (filenames not enumerated in this pass). The brand positions on "dermatologist-approved / clean / authentic" — if any product or model imagery is AI-generated, it would be a brand-authenticity mismatch (per skill severity guidance, critical for an authenticity-led brand). Recommendation: manually verify the "Find your shade" model-face / lips-mask imagery and founder photos are real photography, not AI. Founder photos on About appear to be real headshots (named LinkedIn links).
- Trust signals: strong (see §3.4) — GST, address, phone, policies all present.
- Product photography: WebP served (
code-red_1.webp), 2001×2001 — appropriately sized.
6.2 UX Issues
- No breadcrumb navigation anywhere (UX + SEO). Customers on a collection or product page have no wayfinding back to "Lipsticks" except the top nav.
- Quick-add-to-cart bar present on product pages (good mobile conversion pattern).
- "Find your shade" customiser is a strong, interactive differentiator — but its tap responsiveness contributes to the mobile INP problem (§1.4); optimise handlers.
- No broken internal links observed in the homepage crawl (99 internal links, 0
?variant=polluted links — variant pollution is NOT a problem here, unlike typical Shopify stores).
7. Priority Recommendations
🔴 Immediate (This Week)
| # | Issue | Impact | Effort | |
|---|---|---|---|---|
| 1 | Mobile INP 241 ms → target <200 ms (defer GSAP/ScrollTrigger, async analytics, optimise shade/cart handlers) | Restores mobile CWV "Passing"; protects mobile conversion | Medium | |
| 2 | Add homepage meta description + keyword-rich <title> ("Velvet Matte Lipsticks & Build-Your-Own-Box | Better Beauty") | Organic CTR on the most-linked page | Low |
| 3 | Fix H1 structure: 1 H1 on homepage (keyword-bearing), add H1 to collection templates | Restores primary-keyword anchor site-wide | Low (theme edit) | |
| 4 | Add BreadcrumbList schema + visual breadcrumbs on product/collection | Rich-result + UX wayfinding | Medium |
🟡 Short-Term (This Month)
| # | Issue | Impact | Effort |
|---|---|---|---|
| 5 | Populate OG description on home/collection/page templates (currently "Better Beauty" placeholder) | Social-share CTR from IG/FB/WhatsApp | Low (theme.liquid) |
| 6 | Add Product AggregateRating/Review schema (Judge.me data exists) | Star rich results in SERPs | Medium (app/template) |
| 7 | Add WebSite+SearchAction, LocalBusiness, ItemList schema | Sitelinks search box, local/entity signals | Medium |
| 8 | Add meta descriptions to all Page templates (About, Contact, policies) | CTR on secondary pages | Low (bulk) |
| 9 | Strengthen CSP script-src + HSTS includeSubDomains; preload | Security posture | Low |
| 10 | Resolve brand-name collision — disambiguate from skincare "Better Beauty" in About + Organization sameAs | Protects entity identity / search clarity | Low–Medium |
🟢 Long-Term (This Quarter)
| # | Issue | Impact | Effort |
|---|---|---|---|
| 11 | Build informational blog content (shade-matching for Indian skin tones, derm-approved makeup) | Top-of-funnel organic discovery | Medium |
| 12 | Trim preload/preconnect bloat (keep only LCP-critical) | Mobile Perf score 41 → 60s | Low |
| 13 | Manually verify no AI-generated product/model imagery | Brand authenticity | Low |
| 14 | Add FAQPage schema to derm-approved / shade FAQs | FAQ rich results | Low |
Summary Score Card
| Category | Score | Grade |
|---|---|---|
| Performance (Mobile CrUX CWV) | Needs Improvement (INP 241 ms) | 🟡 |
| Performance (Desktop CrUX CWV) | Passing (all Good) | 🟢 |
| Performance (Lighthouse mobile) | 41/100 | 🟡 |
| Performance (Lighthouse desktop) | 62/100 | 🟡 |
| Accessibility | 92/100 | 🟢 |
| Best Practices | 73/100 | 🟡 |
| SEO (Lighthouse) | 77/100 | 🟡 |
| SEO (on-page / schema — auditor assessment) | Weak (missing desc, H1 issues, no breadcrumb/rating schema) | 🔴/🟡 |
| Content Quality / E-E-A-T | Moderate (good trust signals; thin content; name-collision risk) | 🟡 |
| Security Headers | Moderate (CSP weak, HSTS incomplete) | 🟡 |
| Overall | Mixed — strong perf/a11y foundation undermined by fixable on-page SEO + schema gaps | 🟡 |
Sources & Citations
curl -sI https://thebetterbeauty.com/— HTTP response headers (HSTS, CSP, X-Frame-Options, X-Content-Type-Options, powered-by Shopify, preload/preconnect list).curl https://thebetterbeauty.com/robots.txt— robots directives +Sitemap:reference.curl https://thebetterbeauty.com/sitemap.xml+ sub-sitemaps — sitemap index (products/collections/pages/blogs/agentic).- Browser DOM (
browser_console) on/,/products/code-red,/collections/explore-lipsticks,/pages/about— title, meta description, canonical, OG/Twitter tags, JSON-LD@type, H1/H2 counts, img alt audit, internal-link count. - PageSpeed Insights (https://pagespeed.web.dev/) — CrUX field data (mobile + desktop) and Lighthouse category scores, captured 2026-08-15:
- Mobile CWV: Failed — LCP 2.4 s (Good), INP 241 ms (Needs Improvement), CLS 0.01 (Good); FCP 1.8 s, TTFB 1.1 s.
- Desktop CWV: Passed — LCP 2.0 s, INP 198 ms, CLS 0.00; FCP 1.7 s, TTFB 1.0 s.
- Lighthouse scores: Mobile Perf 41 / A11y 92 / BP 73 / SEO 77; Desktop Perf 62 / A11y 92 / BP 73 / SEO 77.
- business-analysis.md (t_54402b93) — company basics, legal entity, GST, social followers, CrUX prior-week note, brand-name-collision caveat.
Caveats: Lighthouse individual metric values (FCP/LCP/TBT/CLS/SI per-platform) did not render in this environment (PageSpeed Insights lab-metric API blocked); the CrUX field panel is the authoritative per-metric source. Brand-name-collision with the unrelated skincare "Better Beauty" (Anita Hassanandani / Naina Ruhail) may affect founder-attribution clarity — verify which entity the About-page founders belong to.