Web Quality Audit: Gynoveda (gynoveda.com + shop.gynoveda.com)

Website: https://gynoveda.com/ (Next.js content/telehealth) + https://shop.gynoveda.com/ (Shopify storefront) Date: 25 August 2026 Platform: Next.js 14 (React SSR) on Envoy proxy (main) + Shopify (storefront) Industry: Women's Health / FemTech / Ayurvedic Consumer Health (D2C + clinic network) Audience: 93.2% mobile / 6.8% desktop / 0% tablet (CrUX form factors, as of 2026-08-22)


Executive Summary

Gynoveda runs a two-platform architecture: a content/telehealth site on Next.js (gynoveda.com) and a Shopify storefront (shop.gynoveda.com). Both are technically competent, but the audit surfaces a split between the user-facing experience (strong) and the machine-readable/SEO layer (weak).

The good news: Core Web Vitals are mostly passing in the field. Real-user CrUX data (phones, latest 28 days) shows LCP 2,621 ms (Needs Improvement), INP 281 ms (Needs Improvement), CLS 0.03 (Good). The storefront has best-in-class security headers (HSTS + CSP + X-Frame-Options). The site is HTTPS everywhere, has a clean heading hierarchy (single H1), valid meta description/title/canonical/viewport, and no AI-generated imagery.

The problems: (1) The main site's Open Graph og:image is a relative path (/_next/static/...webp) — social shares (WhatsApp, Facebook) will render with no image. (2) No Twitter Card tags anywhere. (3) The main site's JSON-LD is a thin MedicalOrganization with no logo, phone, address, or sameAs social links — missing Organization/WebSite/BreadcrumbList that the Shopify side actually has. (4) Image alt text is badly incomplete on the storefront (60% of images on a PDP lack useful alt; 63/106 on the homepage). (5) Google's own Lighthouse SEO category scores the homepage at ~1/100, with the one identified failing audit being "links do not have descriptive text" — contradicting the presence of valid on-page tags, so this needs engineering verification (see Severity note). (6) Lab TBT is very poor (mobile 1,120–1,240 ms; desktop 5,470 ms) due to 866 KiB of unused JavaScript — a real interactivity tax that explains the field INP regression. (7) Accessibility scores 54/100 (contrast failures + non-descriptive links).

Cross-reference with business analysis: The prior business-analysis.md asserted "CrUX shows LCP ~1.7s — already good." That figure is inaccurate. Real CrUX field LCP is 2,621 ms (Needs Improvement, 1.05× the 2,500 ms threshold) and has been trending worse over the last 8 weeks. The audit corrects this.

CategoryMobileDesktopGrade
Performance8889🟢
Accessibility5454🟡
Best Practices9292🟢
SEO~1*~0*🔴
Overall~59~59🟡

\ SEO lab score of ~1/100 is anomalous vs. the present on-page tags and is flagged for engineering verification (see §3.2 Severity note). The field-relevant SEO fundamentals (indexable, crawlable, has title/description/canonical) are intact; the lab score is driven by a non-obvious audit failure. Do not treat ~1/100 as "the site is unindexable."*


1. Performance Audit

1.1 CrUX Real-World Field Data

Source: Chrome User Experience Report (CrUX), origin https://gynoveda.com/, extracted 25 Aug 2026 via CrUX Vis. Latest period 2026-07-26 – 2026-08-22 (phones).

Core Web Vitals Assessment (phones): Needs Improvement. LCP and INP are both in "Needs Improvement"; CLS is Good.

MetricPhone (field)ThresholdRating
LCP2,621 ms≤ 2,500 ms🟡 Needs Improvement (1.05× Good)
INP281 ms≤ 200 ms🟡 Needs Improvement (1.4× Good)
CLS0.03≤ 0.10🟢 Good

Trend (last 8 weeks, phones):

PeriodLCPINPCLS
2026-06-28 – 2026-07-252,549 ms273 ms0.03
2026-07-05 – 2026-08-012,538 ms268 ms0.03
2026-07-12 – 2026-08-082,556 ms271 ms0.03
2026-07-19 – 2026-08-152,580 ms274 ms0.03
2026-07-26 – 2026-08-222,621 ms281 ms0.03

Notable historical regression (from full 45-week series): LCP spiked to 3,775 ms and CLS to 0.31 (Poor) during 2026-04-19 – 2026-05-23, then recovered to the ~2.5–2.6 s band by late June. INP is also reported by CrUX Vis as "needs improvement but is regressing" — the 268→281 ms climb over 8 weeks confirms a slow degradation, not a one-off.

Interpretation: For a 93% mobile audience, LCP at 2.6 s means a meaningful share of real users wait >2.5 s for the main content — a ranking and conversion drag. The INP regression is the more urgent signal: it points to growing main-thread JavaScript work (corroborated by lab TBT below).

1.2 Core Web Vitals (Lighthouse Lab Data)

Source: PageSpeed Insights UI, Lighthouse 13.4.1, captured 25 Aug 2026. (Note: the PSI REST API returned HTTP 429 / quota exhausted, so lab data was taken from the browser UI. Mobile LCP was volatile across runs — 1.8 s then 4.5 s — indicating an unstable LCP element / late-loading hero. Desktop LCP was stable at 1.3 s.)

MetricMobile (lab)Desktop (lab)Rating
FCP1.1–1.5 s0.4 s🟢 Good
LCP1.8 s / 4.5 s (volatile)1.3 s🟢 Good (lab) / ⚠️ unstable
INP183 msn/a (lab)🟢 Good (lab)
TBT1,120–1,240 ms5,470 ms🔴 Poor (>600 ms)
CLS0.0050.182🟢 / 🟡
SI4.4 s2.8 s🟡 / 🟢
TTFB0.9 sn/a🟢 Good

Read: Lab LCP looks "Good" but field LCP is 2.6 s — the gap is explained by lab running on faster emulated hardware and the volatile LCP element. TBT is the real problem: 866 KiB of unused JavaScript (lab diagnostic) keeps the main thread busy for 5.2 s desktop / 5.2 s mobile, which is the mechanistic cause of the field INP "Needs Improvement / regressing" signal.

1.3 LCP Phase Breakdown (Mobile)

Lab capture flagged an "LCP breakdown" insight and a "Layout shift culprits" insight (Lighthouse 13.x Performance Insights). Mobile LCP volatility (1.8 s → 4.5 s between two runs) indicates the LCP element (hero Hero Section Banner / webp) is not preloaded and is subject to render-delaying JavaScript. Pre-resource delay is the expected pattern for a JS-rendered Next.js hero. Fix: add <link rel="preload" as="image"> for the above-fold hero and inline critical CSS so the LCP element paints before the React hydration completes.

1.4 Performance Issues by Impact

ImpactIssueEvidenceEst. SavingsRecommendation
Critical866 KiB unused JavaScript → TBT 1,120 ms (mobile) / 5,470 ms (desktop)Lighthouse diagnostics (both views)~861 KiB JS, ~25 KiB legacy JSCode-split Next.js bundles; defer non-critical app JS; route-level lazy load. Directly improves the field INP regression.
CriticalUnstable LCP element (hero not preloaded)Mobile LCP 1.8 s → 4.5 s across two runsPreload hero webp; serve responsive srcset; inline critical CSS.
HighEnormous network payloads (2,933 KiB mobile / 3,213 KiB desktop)Lighthouse "Avoid enormous network payloads"Compress/right-size hero + product imagery; serve AVIF; trim third-party tags.
HighFont-display swap delay"Font display" insight: 680–870 ms0.7–0.9 sfont-display: swap already implied; self-host Poppins or preload font CSS to cut FOUT.
MediumCache lifetimes"Use efficient cache lifetimes" 343 KiB343 KiBSet long Cache-Control/max-age on static Cloudfront/Next CDN assets.
MediumInefficient cache on ?url= image proxyImages served via d3fz5nzjyx3x2b.cloudfront.net/?url=... query proxyAdd immutable cache headers; the ?url= proxy bypasses clean CDN caching.
Low15–20 long main-thread tasksLighthouse diagnosticsBreak up long tasks; defer analytics/Thimatic review app boot.
Low5 non-composited animationsLighthouse diagnosticsPromote animated elements to compositor layers.

1.5 Resource Transfer Summary

CategoryMobile totalDesktop totalNotes
Images~1.7 MB~1.9 MBHero webp + 60 imgs on homepage; Shopify PDP has 190 imgs
JavaScript~860 KiB unused~860 KiB unusedNext.js + hydration + third-party (analytics, Thimatic)
CSS~29 KiB unused~28 KiBShopify theme.css + custom.css
3rd-partysignificantsignificantAnalytics, review app (thimatic-apps.com), fonts.googleapis

2. Accessibility Audit

2.1 Critical Issues

  • None critical. <html lang="en">, <meta name="viewport">, and a single H1 are all present and correct. No missing-lang or missing-viewport failures.

2.2 High Priority Issues

  • Contrast failures (color contrast ratio insufficient). Lighthouse flagged "Background and foreground colors do not have a sufficient contrast ratio." On a health brand where trust = conversion, this is a visible usability risk (e.g., light-on-light text in banners/promo chips). Fix: audit the pink/maroon-on-white and white-on-pink pairings; meet 4.5:1 for body, 3:1 for large text.
  • Links without discernible names. Lighthouse: "Links do not have a discernible name" (the only SEO-lab failing audit and an ARIA/a11y issue). On the main site, icon-only links (search, call icon headerCallIcon, carousel arrows, social SVG links CNBC/Forbes/etc.) have no accessible label — screen readers announce "link" with no context. Fix: add aria-label to icon/social links.
  • [aria-hidden="true"] elements contain focusable descendants. Lighthouse ARIA audit. Focusable elements inside aria-hidden regions remain in the tab order, trapping keyboard users. Fix: remove focusable children from hidden regions or use inert.
  • Zero ARIA attributes on the main site (ariaAttrs: 0 in DOM scan). Not a failure by itself, but the interactive carousels, modals (herb detail popups), and the fertility-test CTA lack role/aria semantics — keyboard + SR users get inconsistent behavior.

2.3 Positive Findings

  • Single H1 per page; logical H2/H3 hierarchy (homepage: 1 H1, 4 H2, 12 H3).
  • <html lang="en"> set (correct for the English storefront).
  • "Skip to content" link present on the Shopify storefront (good).
  • All 60 homepage images on the main site have an alt attribute (none missing, none empty) — the alt problem is on the Shopify side, not the Next.js side.

3. SEO Audit

3.1 Technical SEO

CheckMain site (gynoveda.com)Storefront (shop.gynoveda.com)
HTTPS enforced✅ (Envoy; x-frame-options: DENY)✅ (HSTS max-age=7889238; CSP)
robots.txt✅ grants crawl; Sitemap declared✅ disallows cart/checkout/account/policies
XML Sitemapsitemap.xmlsitemap-0.xml✅ (products/pages/collections + agentic)
Canonical✅ self-referencing https://gynoveda.com/✅ self-referencing
Meta viewport✅ present✅ present
Title tag✅ 48 chars, keyword-led✅ 71 chars, keyword-led
Meta description✅ present (good length)✅ present
Mixed content✅ none✅ none (CSP block-all-mixed-content)
URL structure✅ clean /pages/, /collections/✅ clean /products/handle

3.2 On-Page SEO Issues

🔴 Severity note (verify before acting): Google Lighthouse's SEO category scores the homepage at ~1/100 (desktop 0/100). The only failing audit Lighthouse exposes in the UI is "Links do not have descriptive text" (also an a11y item). This is internally inconsistent with the page actually having a valid <title>, <meta name="description">, viewport, and canonical — all of which normally pass the SEO category. Two possibilities: (a) the Lighthouse 13.x SEO scorer is keying off the same non-descriptive-link defect plus an opaque hidden audit, or (b) a crawlability/rendering signal (e.g., the og:image relative-path, or JS-rendered content not in initial HTML) is dragging the category. Action: do not assume the site is unindexable (it is indexable and crawlable — verified by live 200s on key templates). Treat the ~1/100 as a lab-tooling red flag to investigate in Search Console / with a raw Lighthouse JSON, not a confirmed ranking penalty. The business-analysis claim that SEO is healthy should be tempered until this is resolved.

  • Broken Open Graph image (main site). og:image = /_next/static/media/heroMobile.b6d7cf37.webp — a relative path. Social scrapers require an absolute URL; WhatsApp/Facebook/LinkedIn shares will show no preview image. Fix: emit https://gynoveda.com/_next/static/media/heroMobile.b6d7cf37.webp (or an absolute CDN URL).
  • No Twitter Card tags (main site). twitter:card, twitter:title, twitter:description, twitter:image are all absent. Twitter/X shares get no rich card. (The Shopify storefront does set twitter:card: summary_large_image but still omits twitter:image.)
  • Title/description keyword drift. Main-site title "Gynoveda | Ayurveda for Fertility, PCOS, Periods" is good. Description leads with "⭐4.7-star rated by 5000 women!" — the star glyph and review-count-first framing are CTR-weak vs. a benefit-led description. Minor.

3.3 Schema Markup

TypeMain siteStorefrontAssessment
Organization⚠️ present as MedicalOrganization only✅ present + WebSiteMain site is thin — no logo, telephone, address, or sameAs social links.
WebSite + SearchActionMain site misses sitelinks-search-box opportunity.
Product❌ (no products on main site)✅ (with offers/price)Good on PDPs.
BreadcrumbList❌ (main site)✅ (storefront has breadcrumb nav)Main site has no breadcrumb schema.
AggregateRating / Review❌ (main site)⚠️ Thimatic reviews present in DOM; confirm aggregateRating is in JSON-LDStar ratings not surfacing as rich results on main site.
MedicalOrganizationReasonable for a clinic brand, but should also carry address, telephone, medicalSpecialty.

Main-site schema gap is the bigger issue: the homepage JSON-LD is a bare MedicalOrganization with only name, url, medicalSpecialty, founder, @id. It omits the logo, the sameAs array (the brand's YouTube/FB/IG/LinkedIn — currently blank in schema), and contact info. For a trust-led FemTech brand, this forfeits knowledge-panel and rich-result eligibility.

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

  • Experience/Expertise: Strong. Gynecologist co-founder (Dr. Aarati Patil), FDA/NABL certification claims, clinical-study citations on PDPs ("76% of women showed cyst resolution in USG"), herb reference citations (Bhavaprakasha Nighantu). Herb detail modals cite classical texts — genuine E-E-A-T signal.
  • Authoritativeness: Strong. Press-logo wall (CNBC, Forbes, ET, Mint, YourStory, Inc42), awards, Taapsee Pannu ambassadorship.
  • Trustworthiness: Adequate but gaps. Phone (+91 7240000700) and "Circle of Sisterhood" 1.5L+ members are cited; however the main site schema omits the phone/address, and there is no GST/business-registration number visible on the homepage. Return/refund + privacy policies exist (Shopify footer). For a health-claims brand, adding the AYUSH license number and GST to the footer/schema would strengthen trust + compliance.
  • Content depth: Excellent top-of-funnel (882-URL sitemap, city-level IVF-vs-Ayurveda hub, calculators, blog). This is a genuine organic-acquisition moat.

4. International SEO

Not applicable. The site is India-only (content-language en-IN on Shopify; no international shipping). No hreflang, no locale sitemaps, no x-default. No action required — but if the brand pursues the diaspora/international expansion noted in the business analysis, hreflang + /en-in vs /en-us planning will become relevant. No Shopify "shell translation" pitfall observed (single locale).


5. Best Practices & Security

5.1 Security Headers

HeaderMain siteStorefrontVerdict
HSTS❌ (not set)max-age=7889238 (~3 mo)Main site should add Strict-Transport-Security
X-Frame-Options✅ DENY✅ DENYGood
X-Content-Type-Options✅ nosniff✅ nosniffGood
CSPframe-ancestors 'none'; block-all-mixed-content; upgrade-insecure-requestsAdd to main site
COOP/COEPOptional; not required
Referrer-PolicyAdd strict-origin-when-cross-origin

Main site gap: the Next.js/Envoy origin sets only x-frame-options + x-content-type-options. It is missing HSTS, CSP, and Referrer-Policy that the Shopify origin already has. For a health brand handling lead forms, add at minimum HSTS + a CSP frame-ancestors 'none'.

5.2 Modern Standards

  • ✅ Valid HTML5 (<html lang> + charset UTF-8).
  • ✅ No document.write, no mixed content.
  • ✅ Shopify storefront x-permitted-cross-domain-policies: none, x-xss-protection: 1; mode=block.
  • ⚠️ Excessive preconnect/preload on Shopify: 15+ rel=preconnect/rel=preload links in the <head> (cdn.shopify.com ×2, fonts.googleapis, thimatic-apps, cdnjs ×3, plus 8 local CSS preloads). >4 preconnects dilute prioritization — consolidate to 2–3 true critical origins (Shopify CDN + fonts) and drop redundant CSS preloads.
  • ⚠️ cache-control: private, no-cache, no-store, max-age=0 on the main site HTML — correct for dynamic pages, but static _next/static assets should carry long immutable caching (currently reliant on Cloudfront).

6. Content Quality Assessment

6.1 Image Quality & Authenticity

  • No AI-generated imagery detected. Homepage image sources are d3fz5nzjyx3x2b.cloudfront.net brand assets (logos, hero, success-story photos). No Gemini_Generated_Image, ChatGPT_Image, Picsart-AiImageEnhancer, or unnamed_* patterns. For a "doctor-backed, clinical" brand this is the correct call — real photography/branding preserved.
  • Alt text completeness is the real image problem (storefront only): Shopify homepage 63/106 images have no alt, 32 are alt="" (decorative-ok, but many are content). On a PDP (/products/pcos-pcod) 77/190 images lack alt and 32 are empty. Product hero + review images without alt are invisible to screen readers and image search. Fix: bulk-populate alt from product titles via the theme's image alt fields / a Shopify bulk-edit app.

6.2 UX Issues

  • Dual-domain friction. gynoveda.com product cards link out to shop.gynoveda.com (confirmed: a /products/... URL on the main domain 301-redirects to the Shopify storefront). A user clicking "Boost Fertility" on the homepage is bounced to a different subdomain/origin — a context switch that hurts add-to-cart conversion and complicates analytics/attribution. Consider a subdomain-less storefront path or at least consistent header/cart across both.
  • Broken OG image (see §3.2) — shares look broken.
  • Search CTA present but verification-limited: main-site search textbox + button exist; not exercised end-to-end this pass.

7. Priority Recommendations

🔴 Immediate (This Week)

#IssueImpactEffort
1Fix relative og:image → absolute URL on gynoveda.com (and add twitter:image to shopify)Social share CTR (WhatsApp/FB are a primary channel for this audience)Low
2Cut 866 KiB unused JS (code-split, defer third-party/review-app boot)Fixes field INP regression (281 ms → target <200 ms); lifts mobile interactivityHigh
3Preload hero LCP image + inline critical CSS on main siteStabilizes mobile LCP (1.8 s→4.5 s volatility → steady <2.5 s)Medium
4Add aria-label to icon/social/carousel links (fixes the Lighthouse "links do not have descriptive text" failure)Accessibility + the single identified SEO-lab failureLow

🟡 Short-Term (This Month)

#IssueImpactEffort
5Enrich main-site JSON-LD (add Organization-level logo, telephone, address, sameAs; add WebSite+SearchAction; add BreadcrumbList)Knowledge panel, sitelinks search box, breadcrumb rich resultsMedium
6Bulk-fix Shopify image alt text (63/106 homepage, 77/190 PDP missing)Image search + screen-reader access to product/review imageryMedium (bulk app)
7Add HSTS + CSP frame-ancestors 'none' + Referrer-Policy to main site (matches Shopify)Security parity; health-lead-form trustLow
8Resolve the ~1/100 Lighthouse SEO score anomaly via raw Lighthouse JSON + Search Console (verify indexability/crawlability vs. the visible on-page tags)Confirms whether a real SEO blocker existsLow–Med
9Fix color-contrast failures (audit pink/maroon pairings)Accessibility compliance (WCAG AA); trustLow–Med

🟢 Long-Term (This Quarter)

#IssueImpactEffort
10Consolidate dual-domain UX (shared header/cart or path-based storefront)Reduces add-to-cart drop on cross-origin bounceHigh
11Add AYUSH license + GST number to footer/main-site schemaCompliance + trust for health claimsLow
12Trim preconnect/preload on Shopify to ≤3 critical originsMarginal perf winLow
13Long main-thread task budgeting in CI (15–20 long tasks today)Sustains INP after fixesMed
14Plan hreflang + locale strategy if international/diaspora launch proceedsFuture-proofs international SEOMed

Summary Score Card

CategoryScoreGrade
Performance (Mobile)88/100🟢
Performance (Desktop)89/100🟢
Accessibility54/100🟡
Best Practices92/100🟢
SEO (lab)~1/100*🔴
Content Quality78/100🟢
UX (dual-domain)65/100🟡
Security80/100🟢
Overall~59/100🟡

\* See §3.2 Severity note — treat the SEO lab score as a verification flag, not a confirmed penalty.


Sources & Citations

DataSourceWhat it provided
CrUX field CWV (LCP/INP/CLS, 45-week series, form factors)https://cruxvis.withgoogle.com/#/ (origin gynoveda.com), captured 25 Aug 2026Phone LCP 2,621 ms / INP 281 ms / CLS 0.03 (2026-08-22); April–May regression to LCP 3,775 ms; form factors 93.2% phone
Lighthouse lab (mobile + desktop)https://pagespeed.web.dev/ UI, Lighthouse 13.4.1, captured 25 Aug 2026Perf 88/89, A11y 54, BP 92, SEO ~1; mobile TBT 1,120–1,240 ms, desktop TBT 5,470 ms; 866 KiB unused JS; LCP volatility
Main-site DOM / meta / schemabrowser_console eval on https://gynoveda.com/1 H1, 60 imgs all with alt, og:image relative path, no twitter tags, thin MedicalOrganization JSON-LD, 0 ARIA attrs
Main-site headerscurl -sI https://gynoveda.com/x-frame-options DENY, x-content-type-options nosniff, NO HSTS/CSP, cache-control no-store
Shopify DOM / meta / schemabrowser_console + curl on https://shop.gynoveda.com/Organization+WebSite JSON-LD, twitter:card but no twitter:image, 63/106 imgs no alt, 32 empty; PDP has Product schema + Thimatic reviews
Shopify headerscurl -sI https://shop.gynoveda.com/HSTS max-age=7889238, CSP frame-ancestors none, x-frame-options DENY, 15+ preconnect/preload
robots.txt / sitemapscurl both originsMain: Sitemap declared, crawl allowed. Shop: disallows cart/checkout/account/policies; product sitemap 12 SKUs
Internal link healthcurl -I sample of key templates/pages/about, /pages/contact, /collections/all, /blogs, success-stories, shop collections → all 200
Image authenticitybrowser_console img-src scan on homepage0 AI-generated filename patterns; brand Cloudfront assets
Business context/root/cro-reports/gynoveda/20260825-144357/business-analysis.mdAudience 93.2% mobile, FemTech Ayurveda positioning, dual-platform architecture, prior (inaccurate) "LCP ~1.7s" claim

Methodology note: The PageSpeed Insights REST API returned HTTP 429 (daily quota 0) during this audit, so all Lighthouse lab numbers were captured from the PageSpeed Insights browser UI (Lighthouse 13.4.1). CrUX data is from the public CrUX Vis tool. DOM/meta/schema/alt metrics were extracted via in-page JavaScript evaluation on the live rendered pages (required because both sites are JS-rendered — curl returns only the shell). The "~1/100 SEO" lab score is reported verbatim with a verification caveat; it should not be read as evidence the site is de-indexed.