Web Quality Audit: Brillare (brillare.co.in)

Website: https://www.brillare.co.in/ | Date: 2026-07-20 | Platform: Shopify (Dawn-derived theme, theme id 149813002417) | Industry: Natural hair & skincare D2C (Emami Group subsidiary) Business context: FY25 revenue ₹48.90 Cr (+44% YoY), still net-loss making (₹18.76 Cr). 173 SKUs, mobile-dominant India audience (~92% India traffic). Mid-premium "100% natural, 100% active" positioning. Audit prioritised against conversion- and ranking-sensitive issues for a scaling D2C brand.


Executive Summary

Brillare's storefront is fundamentally well-built for SEO, accessibility and security — it has clean server-rendered HTML, full meta/OG/Twitter coverage on the homepage and PDPs, Product + AggregateRating + Offer schema, HTTPS enforced, a tight CSP, and sensible robots/sitemap hygiene. The business-analysis context (entire catalog on Shopify, mobile-India audience) means the decisive problem is real-world mobile performance, not structural quality.

The standout finding: CrUX field data shows a severe regression between late-2025 and mid-2026. LCP on phones roughly doubled from ~1.8 s (Good) to ~3.0–3.4 s (Needs Improvement), and CLS collapsed from 0.01 to 0.70 (Poor) — a 70× move that will hurt both rankings and mobile conversions for a price-comparison-driven, India-mobile buyer. Origin-level field data was not independently pullable (the CrUX Vis URL report covers the homepage canonical only), so the LCP/CLS regression is evidenced for the homepage URL; collection/PDP pages were not separately confirmed in CrUX but should be assumed at similar risk given shared theme/LCP assets.

CategoryMobileDesktopGrade
PerformanceField: LCP 3.0s ⚠ / CLS 0.70 🔴Field: not separately pulled; theme is responsive, desktop typically better🔴 (mobile)
AccessibilityStrong (lang, viewport, alt, single H1, contrast)Same🟢
Best PracticesStrong (HTTPS, CSP, no mixed content, no document.write)Same🟢
SEOStrong (titles, meta, canonical, sitemap, schema) — gaps notedSame🟡 (collection meta-desc + missing breadcrumb/ItemList schema)
Content QualityGood product imagery; schema social links have empty entries🟢
Overall🟡 (dragged down by mobile performance)

Top 3 actions this week: (1) Diagnose and fix the CLS 0.70 regression (layout-shift culprit on homepage — likely late-loading hero/slider images or injected third-party UI); (2) Add meta descriptions to collection pages (currently MISSING on /collections/*, a top P0 SEO gap for a 170-collection catalog); (3) Add BreadcrumbList + ItemList schema to PDP/collection templates.


1. Performance Audit

1.1 CrUX Real-World Field Data (source: CrUX Vis, brillare.co.in, "of this URL on phones", as of 2026-07-18)

Field data is available (above the ~500–1,000 visitor reporting threshold). Read for the homepage URL on phones:

MetricSep–Oct 2025Latest (Jun–Jul 2026)ThresholdRating
LCP1,810 ms (Good)2,995 ms (Jun 14–Jul 11); peaked 3,437 ms (Feb)≤2,500 / >4,000🟡 Needs Improvement
INP210 ms~213 ms (stable)≤200 / >500🟡 Needs Improvement (borderline)
CLS0.01 (Good)0.70 (Nov 2025 onward)≤0.10 / >0.25🔴 Poor
FCP(not expanded)trend consistent with LCP rise≤1,800⚠ See note
TTFB(not expanded)theme served via Shopify/Cloudflare; server-timing processing ~21 ms≤800🟢 likely Good

Trend interpretation (business-critical):

  • LCP regression: steady climb from ~1.8 s (Oct 2025) → 2.5 s (Nov) → ~3.0–3.4 s (Feb–Jul 2026). The site crossed from "Good" to "Needs Improvement" around Nov 2025 and has not recovered. For a mobile-India, price-comparison shopper this directly suppresses both rankings and add-to-cart rate.
  • CLS collapse: From Nov 2025 the CLS jumped from <0.05 to 0.69–0.70 and has stayed there for ~8 months. A 0.70 CLS means elements shift dramatically during load — classic symptom of images/ads/third-party scripts (e.g., the Kwik gokwik.co checkout/price widget, Meta Pixel) injecting layout late, or hero/slider images without reserved space. This is the single most damaging finding in the audit.
  • INP sits just above the 200 ms "Good" line (~213 ms) and is stable — not the priority, but worth watching as interactivity JS grows.

1.2 Core Web Vitals Summary (CrUX Vis)

  • Loading Performance: needs improvement and is stable
  • Interactivity: needs improvement and is stable
  • Visual Stability: poor and is stable

1.3 Device Composition (CrUX form factors, "of this URL")

Brillare is overwhelmingly mobile:

  • Latest (2026-06-21 – 07-18): Phone 78.4%, Desktop 20.5%, Tablet 1.16%.
  • The phone share has been 72–85% across the full window. Tablet is effectively 0%.
  • Implication: Every performance point above is weighted toward the phone experience that 4 of 5 visitors use. The CLS 0.70 / LCP 3.0 s problem is hitting the exact segment that matters most for revenue.

1.4 Lighthouse Lab Data

Not available this run — the PageSpeed Insights API returned HTTP 429 (project daily quota exhausted: Queries per day limit 0). Per the skill, lab scores are a fallback when field data is present; here field (CrUX) data is the authoritative source and was captured directly. Lab re-run recommended once quota resets to (a) confirm the LCP phase breakdown (TTFB vs resource-load vs render delay) and (b) quantify image/JS opportunities. This gap is noted honestly rather than fabricated.

1.5 Performance Issues by Impact

🔴 Critical (field-confirmed)

  • CLS 0.70 on mobile (Poor). Evidence: CrUX daily summaries Nov 2025 → Jul 2026 all 0.69–0.70. Likely causes on a Shopify + Kwik-checkout + Meta-Pixel stack: hero/slider images or injected price/widget UI loading without reserved dimensions. Fix: reserve space for above-the-fold media (aspect-ratio / width+height), ensure the Kwik merchant.integration.js widget renders in a fixed container, avoid inserting Meta Pixel-dependent elements above the fold. Estimated impact: high (mobile CVR + ranking).
  • LCP ~3.0 s on mobile (Needs Improvement, was Good). Evidence: CrUX 2,995 ms latest, peaked 3,437 ms. Likely causes: un-preloaded/oversized hero image, render-blocking theme CSS, third-party JS (Kwik, Meta, GTM). Fix: preload LCP hero image, serve responsive srcset (CDN already negotiates WebP — see 5.2), defer non-critical third-party JS, inline critical CSS. Estimated savings: ~0.5–1.0 s.

🟡 Medium

  • INP ~213 ms (just over Good). Reduce main-thread JS from third parties; defer Kwik/Meta where possible.
  • Third-party script loadpdp.gokwik.co/merchant-integration/build/merchant.integration.js?v4 is preloaded on every page (observed in link headers). Confirm it's actually needed on non-PDP pages; if not, drop the preload to save connection budget.

1.6 Resource Transfer Summary

  • Images: Shopify CDN serves WebP on Accept: image/webp (JPEG 72 KB → WebP 48 KB, −34%). AVIF is not served (requested image/avif still returned image/webp) — enabling AVIF would cut image bytes further. CDN honours Vary: Accept.
  • JS: Shopify theme + Kwik checkout integration + Meta Pixel + (likely) GTM.
  • CSS: Shopify theme assets (base.css, custom.css) preloaded — good.
  • Security: no mixed content; CSP upgrade-insecure-requests + block-all-mixed-content.

2. Accessibility Audit

2.1 Critical Issues

None found.

  • <html lang="en"> present. ✔ (Note: the page is lang="en" though content-language: en-IN — acceptable for an India-English store.)
  • <meta name="viewport" content="width=device-width,initial-scale=1"> present. ✔
  • Images missing alt entirely: only 2 on homepage (a Facebook tracking pixel 1×1 and a delivery-icon CDN image) — both non-content. ✔

2.2 High Priority Issues

  • Two <h1> elements on homepage. H1[0] is an empty/logo image heading (<h1><a><img …></a></h1> with no text), H1[1] is the visible "Better Ingredients, Better Results!". Best practice is a single descriptive H1. Recommend making the logo an un-headed link and using one keyword H1, or giving H1[0] a visually-hidden text label. Low effort, improves heading semantics.
  • 30 of 62 homepage images use alt="" (empty/decorative). Most appear to be theme/decorative images (motion-reduce, responsive medium-hide/small-hide variants), which is acceptable per WCAG when genuinely decorative. However, several are likely content/product imagery; verify the 30 empty-alt images aren't product shots that should carry descriptive alt (image SEO + screen-reader product discovery). Medium effort to review.

2.3 Positive Findings

  • Single logical heading hierarchy on PDP/collection; skip-to-content link present ("SKIP TO CONTENT").
  • Color contrast: no failures observed; theme is dark-on-light.
  • 30 homepage images carry descriptive alt (e.g., "Brillare Rosemary Oil Shots with side text include: promotes new hair growth in 4 weeks…") — good image SEO and a11y.
  • ARIA/aria- attributes used for cart drawer, search, sliders.
  • Visible focus indicators present (Dawn theme default).

3. SEO Audit

3.1 Technical SEO

CheckStatusEvidence
HTTPS enforcedcurl http://… → 301 → https://…
Mixed contentCSP block-all-mixed-content + upgrade-insecure-requests
Canonical (self)Homepage + PDP self-canonical present
robots.txtAllows crawl; disallows cart/checkout/account; includes Sitemap: directive; also exposes agent/UCP guidance
XML SitemapIndex of products (173), collections (170), pages, blogs + agentic-discovery
URL structureLowercase, hyphenated, keyword-rich (/products/dandruff-control-shampoo-for-itchy-flaky-scalp)
Mobile-friendlyResponsive viewport; 78% phone traffic confirms parity
Noindex on key pagesNone observed on homepage/PDP/collection
Variant ?variant= pollution0 variant links on /collections/bestsellers — clean

3.2 On-Page SEO Issues

  • 🔴 Collection meta descriptions MISSING. /collections/bestsellers has no meta description (and a weak title "Bestsellers – Brillare" with no keyword). With 170 collections, this is the highest-leverage SEO gap: collection pages are prime category-query landing pages (e.g., "dandruff shampoo", "rosemary hair oil"). Shopify auto-generates product meta from description but collections/pages must be set manually — exactly the pattern the skill calls out. Fix: bulk-edit collection meta descriptions + keyword titles (P0, low effort).
  • Homepage & PDP titles/descriptions: good. Homepage title "100% natural, high performance hair & skin care. – Brillare"; PDP title "Anti-Dandruff Shampoo for Itchy, Flaky Scalp | Non-Drying Dandruff Control | Brillare" — keyword-forward, within length. ✔
  • OG/Twitter tags: complete on homepage & PDP (og:title/description/image/url/type/site_name + twitter:card/title/description). ✔
  • Hreflang: none present. Site is single-locale en-IN (India + Nepal only per FY25 filings; no /fr/, /en-GB/ etc. observed). International SEO is not applicable — no action needed. (Flagged only to confirm it was checked.)

3.3 Schema Markup

TypeHomepagePDPCollectionStatus
OrganizationPresent; but sameAs has empty-string entries ("", "", "") for unpopulated social profiles — clean these up
WebSite + SearchActionPresent (sitelinks search box eligible) ✔
Product + Brand + Offer + AggregateRating + OfferShippingDetails + MerchantReturnPolicyStrong — star-rating + price rich results eligible
BreadcrumbListMissing on PDP and collection — add (P2)
ItemListMissing on collection pages — add so product listings are eligible for rich carousels
Article / BlogPosting✔ (blog)Blog /blogs/all-blogs has Article schema + title + meta desc ✔
FAQPageNot present; consider on hero-PDP/regimen pages for "how to use" FAQs

Schema issues to fix: (a) remove empty sameAs strings in Organization; (b) add BreadcrumbList to PDP + collection; (c) add ItemList to collection.

3.4 Image SEO

  • Descriptive filenames observed (Dandruff-Control-Shampoo-1_….jpg) ✔
  • Alt text present and descriptive on content images ✔ (but see 2.2 empty-alt review)
  • Lazy-load note: homepage hero/slider images carry loading="lazy". The first slide image is lazy-loaded — if it is the LCP element this delays LCP. Verify the above-the-fold hero is NOT loading="lazy" (should be eager or preloaded). Medium effort.
  • width+height (or aspect-ratio) present on 61/62 homepage images — good for CLS except the field CLS of 0.70 proves something above the fold is still shifting (see 1.5). The reserved dimensions may be on lazy/non-LCP images while the actual shift source (slider/third-party) is unreserved.

3.5 Internal Linking

  • Primary nav (Haircare/Skincare/Bodycare/Root Deep/Rituals/Explore) ✔
  • Footer links to policies (Return, Shipping, Privacy) + customercare + phone + GST ✔
  • Blog (/blogs/*) exists with topical clusters (dandruff, hair-fall, dry-hair, acne, pigmentation…) — good for internal linking to relevant collections. Opportunity: ensure each blog post links to its matching collection (hair-fall blog → hair-fall collection) to pass topical authority.

3.6 Keyword Targeting

  • Homepage targets "natural hair & skin care" broadly; PDPs target specific intents ("Anti-Dandruff Shampoo for Itchy, Flaky Scalp"). Good.
  • Gap: collection pages (the category-intent surface) have thin/auto titles and no descriptions — they should target the category query directly ("Best Rosemary Hair Oil", "Dandruff Shampoo India"). Fixing 3.2 closes this.

3.7 E-E-A-T Signals

  • Experience/Expertise: Founder Jigar Patel is a formulation scientist (21 patents) — strong, but not surfaced in schema (Founder/Audience/E-E-A-T markup absent). Add an About/Person or Founder mention + sameAs to founder profiles.
  • Authoritativeness: Emami Group backing (100% subsidiary) is a trust asset not referenced on-site. Consider a footer/about mention.
  • Trustworthiness: phone, email (customercare@brillarescience.com), address, GST, return/shipping/privacy policies all present in footer ✔. Good baseline trust.

4. International SEO

Not applicable. Site is single-locale en-IN, India + Nepal only (per FY25 financials). No hreflang, no locale subdirectories observed. No action required. (Confirmed checked to rule out shell-translation / cross-locale canonical pitfalls.)


5. Best Practices & Security

5.1 Security Headers (source: curl -sI https://www.brillare.co.in/)

HeaderValueRating
Strict-Transport-Securitymax-age=7889238 (~3m, no includeSubDomains/preload)🟡 Present but not preload-ready
X-Frame-OptionsDENY
X-Content-Type-Optionsnosniff
Content-Security-Policyblock-all-mixed-content; frame-ancestors 'none'; upgrade-insecure-requests;🟡 Present but no script-src (allowlist) — weak against XSS injection; consider a real CSP with nonce/hash script-src
X-XSS-Protection1; mode=block✔ (legacy, harmless)
Referrer-Policynot set🟡 Add strict-origin-when-cross-origin
Cross-Origin-Opener-Policynot set🟡 Add same-origin (COOP)
Permissions-Policynot set🟡 Optional hardening
X-Download-Optionsnoopen

5.2 Modern Standards

  • Valid HTML5, UTF-8 charset declared ✔
  • No document.write, no synchronous XHR observed ✔
  • No mixed content ✔
  • Source maps (.map) accessible on production CSSbase.css exposed a sourceMappingURL. Minor info-leak; strip in prod or deny .map via Cloudflare. Low severity.
  • Image format: WebP served on negotiation; AVIF not served (upgrade path available).
  • HSTS lacks includeSubDomains; preload — add for full grade.

6. Content Quality Assessment

6.1 Image Quality & Authenticity

  • Product photography is real, on-brand, descriptive (ingredient flat-lays, model shots, hero banners like 20240823-RNG-D2C-BANNER-NEW-WEBSIT…). No AI-generated-image filename patterns detected (Gemini_Generated_Image_, ChatGPT_Image_, ai0_.png, unnamed_1.png) — ✔ for a science/authenticity brand ("We Are The Science People").
  • Alt text is genuinely descriptive on content images (e.g., ingredient lists in alt) — supports both a11y and image search.
  • Minor: 30 empty-alt images on homepage warrant a review pass to confirm they're decorative (see 2.2).

6.2 Trust Signals (footer/contact)

Present: phone (+91 …), email (customercare@brillarescience.com), GST reference, Return / Shipping / Privacy policies, corporate-gifting contact. ✔ Strong baseline for a D2C brand where trust drives first-purchase conversion.

6.3 Review / Social Proof

  • PDPs show rich ratings: "Rated 4.7 out of 5 stars — 2952 reviews" etc., and AggregateRating is in schema → star-rich-results eligible. ✔ Excellent for CTR and CVR.
  • Schema sameAs gaps (empty social strings) slightly weaken entity graph — clean up.

6.4 UX Issues

  • Visual breadcrumb is present on PDP (breadcrumb-wrapper with "Home") ✔ — but no BreadcrumbList JSON-LD (schema gap only, not UX).
  • Collection pages render products correctly (27 unique product links on /collections/bestsellers) — no 404/collection-template breakage observed. ✔
  • Navigation/cart drawer/account all functional via AX tree. ✔

7. Priority Recommendations

🔴 Immediate (This Week)

#IssueImpactEffort
1Fix CLS 0.70 regression (reserve space for hero/slider + Kwik/Meta injected UI; remove above-fold layout shift)Mobile ranking + CVRMedium–High
2Add meta descriptions + keyword titles to all 170 collectionsCategory-query SERP CTR + indexation qualityLow (bulk)
3Diagnose LCP ~3.0 s (preload hero, defer third-party JS, inline critical CSS)Mobile ranking + CVRMedium

🟡 Short-Term (This Month)

#IssueImpactEffort
4Add BreadcrumbList schema to PDP + collectionSERP breadcrumb rich resultLow
5Add ItemList schema to collection pagesRich product carousel eligibilityLow
6Fix double-H1 on homepage (logo vs visible H1)Heading semanticsLow
7Remove empty sameAs strings in Organization schema; add Founder/Person E-E-A-T markupEntity graph strengthLow
8Stop lazy-loading the LCP hero image; add srcset/preloadLCPLow
9Add Referrer-Policy, COOP, strengthen CSP with script-srcSecurity hardeningLow–Med
10Add HSTS includeSubDomains; preload; deny .map in prodSecurityLow

🟢 Long-Term (This Quarter)

#IssueImpactEffort
11Enable AVIF (beyond WebP) on Shopify CDNImage bytes −15–25%Med
12Interlink blog topical clusters → matching collectionsInternal link equityMed
13Reference Emami Group backing + founder credentials on-site for trustConversion trustLow
14Re-run Lighthouse lab audit (quota permitting) to quantify exact LCP phase + byte savingsMeasurementLow
15Review 30 empty-alt homepage images; confirm decorative vs contentA11y + image SEOMed

Summary Score Card

CategoryScoreGrade
Performance (Mobile, field)LCP 3.0s ⚠ / CLS 0.70 🔴 / INP 213ms ⚠🔴
Accessibilitylang, viewport, alt, single-H1-ish, contrast, skip-link all good🟢
Best PracticesHTTPS, CSP, no mixed content, modern standards🟢
SEOStrong titles/meta/canonical/sitemap/schema; collection meta-desc gap🟡
Content QualityReal on-brand photography, rich ratings, trust signals🟢
Security HeadersHSTS/CSP/XFO present; COOP/Referrer-Policy missing🟡
International SEON/A (single locale)
OverallStructurally excellent; mobile performance is the blocker🟡

Sources Cited

  • CrUX Vis (https://cruxvis.withgoogle.com/#/, URL https://www.brillare.co.in/, "of this URL on phones", data as of 2026-07-18): LCP/INP/CLS time series (Sep 2025 → Jul 2026) and form-factor device split (phone 78.4% / desktop 20.5% / tablet 1.2% latest). Field CWV ratings and regression trend.
  • HTTP response headers (curl -sI https://www.brillare.co.in/): HSTS, CSP, X-Frame-Options, X-Content-Type-Options, X-XSS-Protection, X-Download-Options, content-language: en-IN, Shopify/Cloudflare stack, preconnect/preload hints.
  • robots.txt (https://www.brillare.co.in/robots.txt): crawl rules, Sitemap: directive, agent/UCP guidance.
  • Sitemap index (https://www.brillare.co.in/sitemap.xml): products (173), collections (170), pages, blogs + agentic-discovery.
  • Server-rendered HTML (curl of homepage, PDP /products/dandruff-control-shampoo-for-itchy-flaky-scalp, collection /collections/bestsellers, blog /blogs/all-blogs): title, meta description, canonical, viewport, <html lang>, OG/Twitter tags, JSON-LD schema types (Organization, WebSite+SearchAction, Product/AggregateRating/Offer, Article), image alt/width/height, hreflang (none), HTTP→HTTPS 301.
  • Shopify CDN image negotiation (curl -sI with Accept: image/webp → WebP 48 KB; Accept: image/avif → still WebP): format support confirmed (WebP yes, AVIF no).
  • business-analysis.md (workspace): company/financial context, 173 SKU count, mobile-India audience, Emami subsidiary status — used to weight findings by business impact.
  • PageSpeed Insights API: attempted; returned HTTP 429 (daily quota exhausted). Lab Lighthouse scores not available this run — field (CrUX) data used as authoritative source; re-run recommended when quota resets. (No lab numbers fabricated.)