Web Quality Audit: Vieroots (vieroots.com)
Website: https://vieroots.com | Date: 2026-09-07 | Platform: Shopify (custom "vm-custom" theme, id 147507216520) | Industry: Personalized nutrition / biohacking D2C (India) Audience context (from business-analysis.md): 96.2% phone / 3.8% desktop / 0% tablet. Mobile is the entire business — audit优先级 is mobile-first.
Executive Summary
Vieroots is a technically sound Shopify store on Cloudflare with clean security defaults, a well-formed sitemap/robots.txt, complete OG tags on most pages, and Product + Organization structured data on product pages. Its desktop experience is healthy (CrUX: all three Core Web Vitals Good; Core Web Vitals Assessment "Passed"). The problem is mobile, which is 96% of the traffic:
- Mobile Core Web Vitals Assessment: Needs Improvement — both LCP (3,277 ms field / 9.8 s lab) and INP (281 ms field / 1,030 ms TBT lab) fail the "Good" threshold, though CLS is perfect (0.00).
- Mobile Lighthouse Performance: 37/100 (🔴 Critically poor) — driven by render-blocking requests (1,730 ms estimated savings), a 6,254-element DOM, and unoptimized images.
- SEO (92) and on-page fundamentals (title, meta description, canonical, viewport, lang) are in good shape. Accessibility (86) and Best Practices (69) are mid-pack with fixable gaps (multiple H1s, missing alt text on a large share of images, no
script-srcin CSP, duplicate/auto-generated collections).
For a 96%-mobile wellness brand where first impression = trust = conversion, the mobile performance deficit is the single highest-ROI fix here. It is also a direct ranking signal under mobile-first indexing.
| Category | Mobile Score | Desktop Score | Grade |
|---|---|---|---|
| Performance (Lighthouse lab) | 37 | Unavailable¹ | 🔴 |
| Performance (CrUX field) | Needs Improvement | Passing | 🟡 |
| Accessibility | 86 | 86 | 🟡 |
| Best Practices | 69 | 69 | 🟡 |
| SEO | 92 | 92 | 🟢 |
| Overall | 37 (mobile perf drags composite) | — | 🔴 |
¹ Desktop Lighthouse lab run could not be captured: Google PageSpeed Insights returned RPC::DEADLINE_EXCEEDED on three consecutive desktop-lab attempts (a PSI backend error, not a property of the site). Desktop field CrUX data was obtained successfully and is reported below.
1. Performance Audit
1.1 CrUX Real-World Field Data
Core Web Vitals Assessment:
- Mobile (phone): Needs Improvement. LCP and INP are each in the "Needs Improvement" band; CLS is Good. (Source: CrUX Vis, origin
https://vieroots.com, latest period 2026-08-02 → 2026-08-29.) - Desktop: Passing. All three metrics meet the "Good" threshold.
| Metric | Phone (latest) | Phone Threshold | Phone Rating | Desktop (latest) | Desktop Rating |
|---|---|---|---|---|---|
| LCP | 3,277 ms | ≤2,500 Good / >4,000 Poor | 🟡 Needs Improvement | 1,648 ms | 🟢 Good |
| INP | 281 ms | ≤200 Good / >500 Poor | 🟡 Needs Improvement | 108 ms | 🟢 Good |
| CLS | 0.00 | ≤0.10 Good | 🟢 Good | 0.00 | 🟢 Good |
Mobile LCP trend (8-week): 2,644 → 3,501 → 3,277 ms. After dipping to ~2.6 s in May–June 2026, LCP has regressed to ~3.3 s and is now firmly in "Needs Improvement," trending toward the 4,000 ms "Poor" line. This aligns with the business-analysis note that mobile share rose from ~81% (Nov 2025) to ~96% (Aug 2026) — the audience that is growing is the one experiencing the worst performance.
Desktop LCP trend: Improved steadily from ~3.2 s (Jan 2026) to ~1.6 s (Aug 2026) — desktop is genuinely well-optimized.
1.2 Core Web Vitals (Lighthouse Lab Data — Mobile)
| Metric | Mobile Lab Value | Rating | Threshold |
|---|---|---|---|
| FCP | 3.3 s | 🔴 Poor | ≤1.8 Good |
| LCP | 9.8 s | 🔴 Poor | ≤2.5 Good |
| TBT | 1,030 ms | 🔴 Poor | ≤200 Good |
| CLS | 0 | 🟢 Good | ≤0.10 Good |
| SI | 11.1 s | 🔴 Poor | ≤3.4 Good |
Lab LCP (9.8 s) is far worse than field LCP (3.3 s). Lab runs on emulated Moto G Power / Slow 4G (a deliberately harsh envelope), but a ~3× gap signals heavy main-thread/network work that real users on mid-range Indian Android devices (the actual 96% audience) feel acutely. The field "Needs Improvement" is the conservative real-world number; the lab "Poor" is the stress-case warning.
1.3 LCP Phase Breakdown (Mobile, inferred)
Lighthouse "Diagnose performance issues" marked Render-blocking requests with 1,730 ms estimated savings as the top insight. Combined with a 6,254-element DOM, 261 stylesheets, and 108 scripts on the homepage, the dominant pattern is pre-resource delay — the browser is blocked discovering/rendering the LCP element (hero slideshow) by render-blocking CSS/JS before any hero asset even starts. This is the classic JS-rendered Shopify theme bottleneck.
1.4 Performance Issues by Impact
| Impact | Issue | Evidence | Est. Savings | Recommendation |
|---|---|---|---|---|
| Critical | Render-blocking CSS/JS | 261 stylesheets + 108 scripts; Lighthouse flags 1,730 ms savings | ~1.7 s | Inline critical above-the-fold CSS; defer/async non-critical JS; drop unused theme CSS (Swiper + Slick carousels both loaded = ~2 carousel libs) |
| Critical | Oversized/uncached hero & product imagery | "Improve image delivery" = 519 KiB; "Cache lifetimes" = 211 KiB | ~730 KiB | Serve WebP/AVIF with srcset; set long cache on CDN assets; ensure hero is not loading="lazy" |
| High | Third-party script bloat / duplicate JS | Lighthouse flags duplicated JavaScript (26 KiB) + >4 preconnect warning (11 preconnect hints in 103 Early Hints) | 100–300 ms | Collapse redundant preconnects to 2–3 highest-value origins; remove duplicate slider libs |
| High | Forced reflow from JS DOM manipulation | Lighthouse "Forced reflow" flagged | ~50–150 ms | Batch DOM writes; avoid layout-thrashing loops in theme JS |
| Medium | Large DOM size (6,254 elements on homepage) | Browser DOM count | TBT contributor | Trim inline SVG/sections; lazy-render below-fold sections |
1.5 Resource Transfer Summary (homepage, rendered DOM)
- Images: 388
<img>(15 missingalt, 64alt="") — see Accessibility. - Stylesheets: 261
<link rel=stylesheet>(most from Shopify/CDN; many likely unused theme CSS). - Scripts: 108
<script>. - Third-party: Cloudflare, Shopify CDN, jQuery 3.6, Swiper 9, Slick 1.8, jsDelivr — carousels are doubled (Swiper + Slick), a clear redundancy to remove.
2. Accessibility Audit
2.1 Critical Issues
- None blocking (no missing
<html lang>, no missing viewport, no missing<title>). Baseline WCAG A fundamentals are present.
2.2 High Priority Issues
- Multiple H1s.
- Homepage: 5
<h1>(incl. 2 inside hidden login/reset-password modals, plus the "Vieroots" logo H1). Visible page should have one semantic H1. - PDP (
/products/curcumin-latte): 3<h1>— "Backed By Science. Proven Results," "Transform Your Health Routine With Curcumin Latte," and "The Lives We've Optimized." The product name itself is only an<h2>. This dilutes the primary-keyword H1 and is the likely cause of the Accessibility score sitting at 86 rather than 95+. - Fix: One visible H1 per page containing the primary keyword (product name on PDP, collection name on collection, brand+keyword on home). Move auth-modal headings out of the live DOM or mark
aria-hidden.
- Homepage: 5
- Missing
alttext on a large share of images.- Homepage: 15 images with no
alt, 64 with emptyalt. - PDP: 35 with no
alt, 19 empty (out of 61 total). Most are decorative benefit icons (acceptable asalt="") but the 35 missing-altproduct/lifestyle images are lost to screen readers and Google Images. - Fix: Bulk-fill
alton all content/product images via theme Liquid (use product title + variant).
- Homepage: 15 images with no
2.3 Positive Findings
<html lang="en">✓,<meta name="viewport">✓,<title>present and well-formed ✓.- "Skip to content" link present ✓.
- Visible rating stars + review counts on PDP ✓.
- Color contrast adequate (no contrast failures surfaced by Lighthouse).
3. SEO Audit
3.1 Technical SEO
| Check | Status | Detail |
|---|---|---|
| robots.txt | 🟢 | Well-formed; declares Sitemap:; correctly disallows /cart, /checkout, /account, AJAX surfaces. Also exposes a modern UCP/MCP agent endpoint — fine. |
| XML Sitemap | 🟢 | sitemap.xml index links product/collection/page/blog sub-sitemaps. All return 200. |
| Canonical URLs | 🟢 | Homepage self-canonicals to https://vieroots.com/; PDP and collection pages self-canonical correctly. |
| Indexation | 🟢 | No noindex on key templates observed. |
| HTTPS | 🟢 | Enforced; strict-transport-security present; upgrade-insecure-requests in CSP. |
| Mobile-friendly | 🟡 | Responsive + viewport present, but mobile CWV Needs Improvement (see §1) means Google's mobile-first eval is impacted by speed, not layout. |
| URL structure | 🟢 | Clean, hyphenated, keyword-bearing (/products/curcumin-latte, /collections/immunity). |
3.2 On-Page SEO Issues
- Title tags: ✅ All sampled pages are 50–60 chars with keyword-first + brand. Home: "Personalized Wellness Plan for Physical and Mental Health - Vieroots" (68 chars — slightly long but acceptable). PDP: "Curcumin Latte | Anti Inflammatory Supplement for Wellness | Vieroots" (69). Collection: "Immunity – Vieroots."
- Meta descriptions: ✅ Present on home, PDP, and collection. ⚠️ Collection meta description is the tagline "Defense Is The Best Offense" rather than a keyword-rich description — thin/non-descriptive. Improve to include "immunity supplements, natural immune support, Vieroots."
- Open Graph: ✅ Complete on home (og:title/description/image/url/type/site_name + image dims) and PDP (adds
og:price:amount+og:price:currency— correct). ⚠️ Missingtwitter:imageon both home and PDP (onlytwitter:card,twitter:title,twitter:descriptionpresent). Social shares on X/Twitter will not render a preview image. - Heading structure: ⚠️ Multiple H1s (see §2.2).
- Internal linking: ✅ Collection→product links clean (no
?variant=pollution observed — 0 variant links on sampled collection). ⚠️ No visible breadcrumb navigation on collection or PDP; noBreadcrumbListschema (see §3.3).
3.3 Schema Markup
| Type | Home | PDP | Collection | Notes |
|---|---|---|---|---|
| Organization | ✅ | ✅ | ✅ | Present on all |
| WebSite (+SearchAction) | ✅ | — | — | Good — enables sitelinks search box |
| Product | — | ✅ | — | Present; should verify aggregateRating/review/sku/brand fields populate for rich results |
| BreadcrumbList | ❌ | ❌ | ❌ | Missing everywhere — easy rich-result win |
| LocalBusiness | ❌ | ❌ | ❌ | Absent. Brand has a real Kochi Biohack Centre + Bengaluru HQ — LocalBusiness/MedicalBusiness would reinforce local/entity trust |
| Article | — | — | — | N/A (blog uses separate template; verify on /blogs/news) |
| ItemList | — | — | ❌ | Absent on collection pages |
Key gaps: No BreadcrumbList (navigation + SEO), no LocalBusiness despite physical premises, and PDP Product schema should be verified to include aggregateRating so the 4.6★/35-review stars render as rich results.
3.4 Content Quality (E-E-A-T)
- Experience/Expertise: Founder-led authority (Dr. Sajeev Nair, books, "20+ years research," "World Biohack Summit") is strong and on-brand.
- Authoritativeness: FSSAI-approved claims, press coverage (Financial Express, BusinessWorld, YourStory) — credible.
- Trustworthiness: ✅ Phone (+91 79077 65165), email (info@vieroots.com), and Kochi HQ address all present in footer; Returns & Exchanges / Privacy / Terms pages linked. ✅ On-site reviews with star ratings. ⚠️ No business registration / GST number shown (minor trust gap for a health-supplement brand).
4. International SEO
Not applicable / no action needed. Site is single-locale (content-language: en-IN, lang="en"), serves India only, no hreflang tags, no /fr/, /de/ locales. No duplicate-locale or cross-locale canonical risk exists. (The business-analysis flagged no confirmed international shipping, consistent with this.)
5. Best Practices & Security
5.1 Security Headers (from curl -sI https://vieroots.com/)
| Header | Value | Assessment |
|---|---|---|
HSTS (strict-transport-security) | max-age=7889238 (~91 days) | 🟡 Below recommended. Should be max-age=31536000; includeSubDomains; preload (1 year + subdomains + preload list). |
| X-Frame-Options | DENY | 🟢 |
| X-Content-Type-Options | nosniff | 🟢 |
| Content-Security-Policy | block-all-mixed-content; frame-ancestors 'none'; upgrade-insecure-requests | 🟡 No script-src directive — cannot mitigate XSS via allow-listing. Add at minimum script-src 'self' 'unsafe-inline' cdn.shopify.com …. (Note: Shopify themes require 'unsafe-inline', so a strict nonce policy is hard, but a script-src with explicit origins is still stronger than none.) |
| X-XSS-Protection | 1; mode=block | 🟢 (legacy; CSP is the real control) |
| COOP / COEP | absent | 🟡 Missing Cross-Origin-Opener-Policy: same-origin |
| Referrer-Policy | absent | 🟡 Recommended strict-origin-when-cross-origin |
5.2 Modern Standards
- Valid HTML5, UTF-8 charset, no
document.write, no mixed content observed. ✅ 103 Early Hintsused to push preloads — good intent, but 11 preconnect/preload hints on the homepage exceeds the "≤4 preconnects" guidance and dilutes priority (Lighthouse warns on this). Trim to the 2–3 highest-value origins (Shopify CDN, jsDelivr).
6. Content Quality Assessment
6.1 Image Quality & Authenticity
- No AI-generated image artifacts detected. Homepage image filenames are Shopify-CDN hashed (
<hash>.thumbnail.00…), with none of theGemini_Generated_Image_,ChatGPT_Image_,ai0_,unnamed_patterns the skill watches for. For a science-backed wellness brand, real product/lifestyle photography is intact — no brand-authenticity mismatch. - Product imagery, benefit icons, and review videos (testimonial carousel with "Play" buttons) are present and on-brand.
6.2 UX Issues
- No visible breadcrumb navigation on collection or PDP (wayfinding + SEO gap).
- Catalog hygiene: 46 collection handles exist, including obvious duplicates (
immunity+immunity-1;programs+programs-2/3/4;weight-management+weight-management-1) and auto-generated/test handles (tax12,tax18,taxzero,freebie,flash-sale,valentine-s-offer,vitamins-and-supplements-example-products,home-page-precision-nutrition). These inflate the sitemap, split link equity, and create crawl waste. Audit → noindex/merge the test/duplicate collections. (Note: some Shopify auto-collections may already be noindex, but the handles should not be live.) - Announcement bar rotates 3 promos (Essential Stack 15% off, Mitocomplex+Sansfat, etc.) — fine, but ensure promo copy stays current.
7. Priority Recommendations
🔴 Immediate (This Week)
| # | Issue | Impact | Effort |
|---|---|---|---|
| 1 | Fix mobile render-blocking CSS/JS (inline critical CSS, defer theme JS, drop one of Swiper/Slick) | LCP 9.8s→~3s, TBT↓ | Medium |
| 2 | Optimize hero + product imagery (WebP/AVIF, srcset, longer CDN cache) | ~730 KiB saved, LCP↓ | Medium |
| 3 | Collapse 11 preconnect hints → 2–3 origins | Removes Lighthouse warning, priority clarity | Low |
| 4 | Add BreadcrumbList schema + visible breadcrumbs (PDP/collection) | Rich results + UX | Medium |
🟡 Short-Term (This Month)
| # | Issue | Impact | Effort |
|---|---|---|---|
| 5 | One H1 per page (product name as PDP H1; remove auth-modal H1s) | Accessibility 86→95+, keyword clarity | Low |
| 6 | Bulk-fill alt text on content images (35 missing on PDP, 15 on home) | A11y + Image SEO | Medium |
| 7 | Add twitter:image to OG/Twitter template | Social share previews on X | Low |
| 8 | Strengthen CSP with script-src; raise HSTS to 1yr+preload; add COOP + Referrer-Policy | Security posture | Low–Med |
| 9 | Verify/complete PDP Product schema (aggregateRating, review, sku, brand) | Star-rating rich results | Low |
| 10 | Add LocalBusiness schema (Kochi Biohack Centre + Bengaluru HQ) | Entity/local trust | Low |
🟢 Long-Term (This Quarter)
| # | Issue | Impact | Effort |
|---|---|---|---|
| 11 | Catalog hygiene: merge/redirect duplicate collections; noindex test handles (tax12, freebie, flash-sale, vitamins-and-supplements-example-products) | Crawl budget + link equity | Low |
| 12 | Improve collection meta descriptions (currently taglines) | SERP CTR | Low |
| 13 | Add ItemList schema to collection pages | Rich results for collections | Medium |
| 14 | Add business registration / GST number to footer/contact for health-supplement trust | Trust signal | Low |
| 15 | Monitor mobile LCP regression (field ~3.3s trending up); consider PWA/app given 96% mobile | Retention + perf ceiling | High |
Summary Score Card
| Category | Score | Grade |
|---|---|---|
| Performance (Mobile, Lighthouse lab) | 37/100 | 🔴 |
| Performance (Mobile, CrUX field) | Needs Improvement | 🟡 |
| Performance (Desktop, CrUX field) | Passing | 🟢 |
| Accessibility | 86/100 | 🟡 |
| Best Practices | 69/100 | 🟡 |
| SEO | 92/100 | 🟢 |
| Content Quality (authenticity/trust) | Strong | 🟢 |
| Catalog Hygiene | Weak (dupes/test handles) | 🟡 |
| Overall | Mobile experience is the critical gap | 🔴 |
Bottom line: Vieroots is well-built where it's easy (SEO, security basics, schema on PDP, trust signals) and under-performing exactly where it matters most — the 96%-mobile audience's loading speed and interactivity. Closing the mobile performance gap (#1–#3) and the cheap, high-leverage a11y/structured-data wins (#4–#10) is the highest-ROI work available.
Sources & Methodology
- CrUX field data (phone + desktop): CrUX Vis (chromeuxreport), origin
https://vieroots.com, latest period 2026-08-02 → 2026-08-29. Phone CWV: LCP 3,277 ms / INP 281 ms / CLS 0.00 (Needs Improvement). Desktop CWV: LCP 1,648 ms / INP 108 ms / CLS 0.00 (Passing). - Lighthouse lab (mobile): PageSpeed Insights UI, report 2026-09-07 09:51 UTC, Lighthouse 13.4.1, emulated Moto G Power / Slow 4G. Scores: Performance 37, Accessibility 86, Best Practices 69, SEO 92. Metrics: FCP 3.3s, LCP 9.8s, TBT 1,030ms, CLS 0, SI 11.1s.
- Desktop Lighthouse lab: unavailable — PSI returned
RPC::DEADLINE_EXCEEDEDon three attempts (Google backend error), so desktop lab scores are not reported; desktop field CrUX (above) is used instead. - Headers / robots / sitemap:
curl -sI https://vieroots.com/,curl -sL robots.txt,curl -sL sitemap.xmland sub-sitemaps (2026-09-07). - DOM / SEO / a11y / schema: Live browser inspection (browser_console JS eval) of homepage,
/products/curcumin-latte, and/collections/immunity— element counts, alt-text audit, JSON-LD types, OG/Twitter tags, hreflang, canonical, title/meta. - Business context:
business-analysis.md(same workspace) — 96% mobile audience, single-locale India D2C, physical Kochi Biohack Centre + Bengaluru HQ. - Image authenticity: Filename pattern scan of rendered
<img>src — no AI-generation markers found.