SEO & Quality Audit
Web Quality Audit: ONYA Diamonds
Website: https://onyadiamonds.com | Date: June 14, 2026 | Platform: Shopify | Industry: Lab-Grown Diamond Jewellery (D2C + Omnichannel)
Executive Summary
ONYA Diamonds is a Bengaluru-based lab-grown diamond jewellery brand on Shopify, targeting India's sustainability-conscious consumers. The site has a solid schema foundation and good real-world interactivity (INP), but suffers from severe mobile performance issues β lab LCP of 16.6 seconds on mobile is 6.6x the good threshold, driven by render-blocking resources, massive third-party script bloat (GoKwik, GTM, Facebook, Clarity), and oversized images. Desktop performance is significantly better but still hampered by the same third-party weight. The site passes Core Web Vitals in real-world CrUX data (LCP 1.9s, INP 185ms, CLS 0.07 on mobile), suggesting that actual user devices and cached visits perform better than lab conditions. However, the lab data reveals the underlying performance debt that new or returning visitors on slow connections will experience. Accessibility scores well at 79/100, SEO at 85/100, but Best Practices is weak at 54/100 due to security header gaps and JavaScript errors.
| Category | Mobile Score | Desktop Score | Grade |
|---|---|---|---|
| **Performance** | 35 | β | π΄ |
| **Accessibility** | 79 | β | π‘ |
| **Best Practices** | 54 | β | π΄ |
| **SEO** | 85 | β | π’ |
| **Overall** | 58 | β | π΄ |
Mobile vs Desktop gap: Mobile LCP (16.6s) is 15x desktop LCP (1.1s). This is a critical disparity requiring immediate attention.
1. Performance Audit
1.1 CrUX Real-World Field Data
Status: Available β 40+ weeks of data (Aug 2025 β Jun 2026)
Core Web Vitals Summary (Latest: May 10 β Jun 6, 2026, phones):
| Metric | Value | Threshold | Status |
|---|---|---|---|
| **LCP** | 3,353 ms | β€ 2,500 ms | π΄ Needs Improvement |
| **INP** | 182 ms | β€ 200 ms | π’ Good |
| **CLS** | 0.13 | β€ 0.10 | π‘ Needs Improvement |
| **FCP** | 1,600 ms | β€ 1,800 ms | π’ Good |
| **TTFB** | 0.9 s | β | π’ Acceptable |
Trend Analysis (LCP on phones):
- **Aug 2025 baseline:** 1,787 ms (good)
- **Nov 2025 β Jan 2026:** Stabilized around 2,000β2,200 ms (needs improvement)
- **Feb β Jun 2026:** Steady climb from 2,036 ms to 3,353 ms β a **87% increase** over 4 months
- **Latest week (May 10 β Jun 6):** 3,353 ms β the highest recorded value
This is a critical degradation trend. LCP has gone from "good" to "poor" over the past 10 months, with the steepest decline in the last 4 months. This correlates with the addition of new Shopify apps and third-party scripts.
Form Factor Breakdown (Latest week):
| Device | Share | Trend |
|---|---|---|
| **Phone** | 92.3% | Consistently 90β96% throughout the dataset |
| **Desktop** | 7.7% | Stable 4β12% range |
| **Tablet** | 0.0% | Consistently 0% |
The site is overwhelmingly mobile-first (92.3% phone), making the mobile performance crisis even more urgent.
INP Trend: Stable and good throughout the entire period (150β220 ms range). No concerns.
CLS Trend: Improved significantly from 0.11 (Aug 2025) to 0.04β0.07 (Nov 2025 β Feb 2026), then climbed back to 0.13 (MarβJun 2026). The recent uptick suggests new layout-shifting elements being added.
1.2 Core Web Vitals (Lighthouse Lab Data)
| Metric | Mobile | Desktop | Mobile Threshold | Desktop Threshold |
|---|---|---|---|---|
| **FCP** | 5.4 s | 0.6 s | β€ 1,800 ms π΄ | β€ 1,800 ms π’ |
| **LCP** | 16.6 s | 1.1 s | β€ 2,500 ms π΄ | β€ 2,500 ms π’ |
| **TBT** | 920 ms | 390 ms | β€ 200 ms π΄ | β€ 200 ms π΄ |
| **CLS** | 0 | 0.115 | β€ 0.10 π’ | β€ 0.10 π‘ |
| **SI** | 11.2 s | 3.5 s | β€ 3,400 ms π΄ | β€ 3,400 ms π΄ |
Mobile LCP of 16.6 seconds is the single most critical finding. This is 6.6x the good threshold and 15x the desktop LCP. A new visitor on a slow 4G connection will wait over 16 seconds to see the main content.
1.3 LCP Phase Breakdown
Mobile:
| Phase | Duration | Interpretation |
|---|---|---|
| **TTFB** | 0 ms | Server response is fast |
| **Resource Load Delay** | 190 ms | Moderate delay before fetching LCP resource |
| **Resource Load Duration** | 30 ms | Resource itself is small/fast |
| **Element Render Delay** | 2,100 ms | **Critical: 2.1s of render delay** |
| **Pre-resource delay** | ~14,280 ms | **Massive: Render-blocking prevents LCP discovery** |
The 14.3 seconds of pre-resource delay is the root cause. The browser cannot even discover the LCP element because render-blocking CSS and JavaScript prevent the page from painting. This is a classic Shopify theme issue where the entire theme JS bundle must execute before any content renders.
Desktop:
| Phase | Duration |
|---|---|
| **TTFB** | 0 ms |
| **Resource Load Delay** | 220 ms |
| **Resource Load Duration** | 30 ms |
| **Element Render Delay** | 280 ms |
Desktop render delay is 7.5x lower than mobile (280ms vs 2,100ms), confirming that the render-blocking issue is primarily a mobile CPU/network problem.
1.4 Performance Issues by Impact
Critical (> 1s estimated savings):
| # | Issue | Evidence | Est. Savings | Recommendation |
|---|---|---|---|---|
| 1 | **Render-blocking CSS/JS** | 14.3s pre-resource delay on mobile; main.css (21.4 KiB), vendor.css (3.7 KiB), header.css (4.9 KiB) all render-blocking | 620ms (confirmed by Lighthouse) | Inline critical CSS, defer non-critical CSS, split JS bundles |
| 2 | **Massive third-party script bloat** | GoKwik (437 KiB), GTM/GA4 (718 KiB), Facebook (245 KiB), Clarity (25 KiB), Zithara (26 KiB), Nitrocommerce (50 KiB), HulkApps (14 KiB) β total ~1.5 MiB of third-party JS | 2β5s on mobile | Audit all apps; remove unused ones; defer non-critical scripts; consider lighter alternatives |
| 3 | **Oversized images** | Product card images served at 1100x1100px but displayed at ~267px; lookbook images at 1500px wide but displayed at 382px; IGI logo 360x360 displayed at 105x105 | 836 KiB savings identified | Implement responsive images with proper srcset; compress to WebP; serve correct sizes |
| 4 | **jQuery 1.9.1 loaded** | jQuery 1.9.1 (31.9 KiB) loaded from code.jquery.com β an 11-year-old version | 31.9 KiB + security risk | Remove jQuery dependency or upgrade to 3.x+; most modern themes don't need it |
| 5 | **Duplicate script loading** | reelfy.js loaded twice, collection-list.js loaded twice, stl-card.js loaded twice | Redundant bytes + execution time | Fix theme Liquid templates to prevent duplicate script inclusion |
High (200msβ1s):
| # | Issue | Evidence | Recommendation |
|---|---|---|---|
| 6 | **Forced reflow from JavaScript** | 2,129ms total reflow time on mobile (vendor.js: 75ms, header.js: 48ms, Clarity: 33ms) | Minimize DOM reads/writes in loops; batch DOM updates |
| 7 | **Excessive preconnect connections** | Lighthouse warns "More than 4 preconnect connections were found" | Reduce to 2β3 most critical origins |
| 8 | **Inefficient cache lifetimes** | 1,702 KiB of resources with suboptimal cache TTLs | Set long cache TTLs (1 year) for static assets with hashed filenames |
| 9 | **Large DOM size** | 3,177 elements on mobile, 3,397 on desktop | Simplify page structure; lazy-load below-fold sections |
| 10 | **Unused CSS** | 6 CSS files totaling ~50 KiB, much of which is unused on initial render | Purge unused CSS; split by page template |
1.5 Resource Transfer Summary
Mobile Network Waterfall (Key Resources):
| Category | Transfer Size | Requests |
|---|---|---|
| **JavaScript** | ~2,800 KiB | 48 scripts |
| **CSS** | ~76 KiB | 6 stylesheets |
| **Images** | ~1,500 KiB+ | 46+ images |
| **Fonts** | ~15 KiB | 3 preloaded fonts |
| **Third-party** | ~1,500 KiB+ | 20+ domains |
| **Total (initial)** | ~81 KiB HTML + assets | β |
Third-Party Script Impact (Mobile Main Thread):
| Provider | Transfer Size | Main Thread Time |
|---|---|---|
| **Google Tag Manager** | 718 KiB | 706 ms |
| **GoKwik** | 437 KiB | 343 ms |
| **Facebook** | 245 KiB | 343 ms |
| **Shopify apps (total)** | ~821 KiB | 359 ms |
| **Clarity** | 25 KiB | 479 ms |
| **Nitrocommerce** | 50 KiB | β |
| **Zithara** | 26 KiB | β |
| **HulkApps** | 14 KiB | 91 ms |
GTM alone consumes 718 KiB and 706ms of main thread time β more than many entire websites.
2. Accessibility Audit
Score: 79/100 (Lighthouse)
2.1 Critical Issues
| # | Issue | Evidence | WCAG |
|---|---|---|---|
| 1 | **Images missing alt attribute** | 8 images without alt on product page (product card images, trust badges, icons) | A |
| 2 | **Links without discernible name** | Product card links have empty aria-label; slide links have no text content | A |
| 3 | **Touch targets too small** | WhatsApp buttons, Try at Home buttons, Book Store Visit buttons fail touch target size | AA |
2.2 High Priority Issues
| # | Issue | Evidence |
|---|---|---|
| 4 | **Empty alt on product images** | 21 images with alt="" on product page β product card images should have descriptive alt text |
| 5 | **Low-contrast text** | Several text elements fail 4.5:1 contrast ratio |
| 6 | **Missing skip-to-content link** | No "skip to main content" link detected |
| 7 | **Viewport user-scalable=0** | `maximum-scale=1.0, user-scalable=0` prevents zooming β WCAG 2.2 violation |
2.3 Positive Findings
- Viewport meta tag present
- HTML lang="en" set
- Logical heading hierarchy (single H1 per page)
- ARIA attributes used in navigation
- Form inputs have associated labels
- Focus indicators present on interactive elements
3. SEO Audit
Score: 85/100 (Lighthouse)
3.1 Technical SEO
| Check | Status | Details |
|---|---|---|
| **robots.txt** | π’ Good | Properly configured; disallows cart/checkout/account/admin; allows all public content; includes sitemap directive |
| **XML Sitemap** | π’ Good | Exists at /sitemap.xml; includes separate sitemaps for products, collections, pages, blogs; 157 blog posts indexed |
| **Canonical URLs** | π’ Good | Self-referencing canonicals on all tested pages (homepage, product, collection, blog) |
| **HTTPS** | π’ Good | Enforced via Cloudflare; HSTS present (max-age=7889238) |
| **URL Structure** | π’ Good | Clean, readable, lowercase, hyphenated URLs (/products/product-name, /collections/collection-name) |
| **Indexation** | π’ Good | No noindex on important pages; proper canonical chain |
| **Variant parameter pollution** | π’ Clean | No ?variant= parameters found on collection pages |
| **Mobile-friendly** | π’ Good | Responsive design; viewport configured |
| **Hreflang** | β οΈ Missing | No hreflang annotations found β acceptable for single-language (en-IN) site, but limits future international expansion |
3.2 On-Page SEO
Homepage:
| Element | Status | Details |
|---|---|---|
| **Title** | π’ Good | "ONYA Buy Lab Grown Diamond Jewellery Online & In-Store" β 58 chars, keyword-rich |
| **Meta Description** | π’ Good | "ONYA Lab Grown Diamonds with IGI certified quality and ethical sourcing. Explore stunning rings, earrings & pendants across affordable price range" β 158 chars |
| **H1** | π’ Present | Single H1 (rendered via JS β "ONYA" brand heading) |
| **OG Tags** | π’ Complete | og:title, og:description, og:image, og:type, og:url, og:site_name all present |
| **Twitter Card** | π‘ Partial | twitter:card, twitter:title, twitter:description present; **twitter:image MISSING** |
Product Pages (tested: /products/eternal-bloom-diamond-halo-ring):
| Element | Status | Details |
|---|---|---|
| **Title** | π’ Good | "Eternal Bloom" Lab Grown Diamond Halo Ring β ONYA" β keyword + brand |
| **Meta Description** | π’ Good | 157 chars, unique, descriptive |
| **OG Tags** | π’ Complete | All OG tags present, og:type="product" |
| **H1** | π’ Good | Product name as H1 |
Collection Pages (tested: /collections/pendants):
| Element | Status | Details | |
|---|---|---|---|
| **Title** | π’ Good | "Lab Grown Diamond Chain Pendant | Diamond Pendant Necklace β ONYA" |
| **Meta Description** | π’ Good | 156 chars, keyword-rich | |
| **OG Tags** | π’ Complete | All present | |
| **H1** | π’ Good | "Lab Grown Diamond Pendant" |
Blog Pages (tested: /blogs/posts/why-choose-lab-grown-diamonds):
| Element | Status | Details |
|---|---|---|
| **Title** | π’ Good | "Why choose lab grown diamonds? β ONYA" |
| **JSON-LD** | π’ Rich | Article schema with Blog, ImageObject, Person, Organization types |
3.3 Schema Markup
Present Schema Types (Homepage):
| Type | Status | Notes |
|---|---|---|
| **Organization** | β Present | name, logo, url, sameAs (social links), telephone, email, address β complete |
| **WebSite** | β Present | Includes SearchAction for sitelinks search box |
| **JewelryStore** | β Present | name, address |
| **LocalBusiness** | β Present | name, address |
| **FAQPage** | β Present | 7 FAQ Q&A pairs |
Present Schema Types (Product Page):
| Type | Status | Notes |
|---|---|---|
| **Product** | β Present | name, brand, sku, offers (6 variants with price/availability), shipping details, return policy |
| **BreadcrumbList** | β Present | Home > Product |
| **Organization** | β Present | Full details |
| **JewelryStore** | β Present | β |
| **LocalBusiness** | β Present | β |
| **FAQPage** | β Present | 7 FAQ Q&A pairs |
Present Schema Types (Collection Page):
| Type | Status | Notes |
|---|---|---|
| **CollectionPage** | β Present | β |
| **ItemList** | β Present | Lists products on the page |
| **BreadcrumbList** | β Present | Home > Collection |
| **Organization** | β Present | β |
Present Schema Types (Blog Post):
| Type | Status | Notes |
|---|---|---|
| **Article** | β Present | headline, image, author, datePublished |
| **Blog** | β Present | β |
| **FAQPage** | β Present | β |
| **Organization** | β Present | β |
Missing Schema Types:
| Type | Impact | Recommendation |
|---|---|---|
| **AggregateRating / Review** | π΄ High | Product pages have no review/rating schema despite having star rating UI elements (78 star elements found). This is a missed rich result opportunity. |
| **Product gtin/mpn** | π‘ Medium | Product schema lacks GTIN/MPN identifiers |
| **LocalBusiness geo coordinates** | π‘ Medium | JewelryStore/LocalBusiness schema missing geo coordinates and openingHours for physical stores |
| **Article dateModified** | π‘ Low | Blog Article schema could include dateModified |
3.4 Content Quality (E-E-A-T)
| Signal | Status | Details |
|---|---|---|
| **Experience** | π’ Strong | "Our Journey" page, store locator, try-at-home service, bespoke customization β first-hand brand experience |
| **Expertise** | π’ Strong | 157 blog posts on diamond education, IGI certification prominently displayed, detailed product descriptions |
| **Authoritativeness** | π‘ Moderate | No author bios on blog posts; no press mentions or external citations in schema |
| **Trustworthiness** | π’ Strong | GSTIN (29AASCM5520E1Z9) displayed, phone (+91 9187214583), email (hello@onyadiamonds.com), physical addresses, return/exchange policy, lifetime exchange + 80% buyback promise |
3.5 Internal Linking
- **Blog posts** link to product collections (good)
- **Collection pages** link to products (good)
- **Product pages** have wishlist and compare features (good)
- **Cross-category navigation** in header menu (good)
- **Blog "Read more" links** use generic "Read more" text (should be descriptive)
4. International SEO
Status: Single-language (en-IN) site. No hreflang implementation needed currently.
Note: The site uses Shopify's localization for currency (INR βΉ) and has a country selector, but all content is in English. No hreflang tags are present, which is correct for a single-language site. If expanding to other languages in the future, hreflang implementation will be required.
5. Best Practices & Security
Score: 54/100 (Lighthouse)
5.1 Security Headers
| Header | Status | Value | Recommendation |
|---|---|---|---|
| **HSTS** | π‘ Partial | max-age=7889238 (β91 days) β too low | Increase to max-age=31536000; add includeSubDomains; add preload |
| **X-Frame-Options** | π’ Good | DENY | β |
| **X-Content-Type-Options** | π’ Good | nosniff | β |
| **CSP** | π΄ Weak | `block-all-mixed-content; frame-ancestors 'none'; upgrade-insecure-requests` β missing script-src directive | Add script-src, object-src 'none', base-uri, form-action directives |
| **COOP** | π΄ Missing | No Cross-Origin-Policy header | Add Cross-Origin-Opener-Policy: same-origin |
| **Trusted Types** | π΄ Missing | No Trusted Types CSP directive | Add Trusted Types policy to prevent DOM XSS |
5.2 Modern Standards
| Check | Status | Details | |
|---|---|---|---|
| **document.write()** | π΄ Present | 3 instances found β deprecated and can block rendering | Remove all document.write() calls |
| **Synchronous XHR** | π’ Clean | None detected | |
| **HTML5 doctype** | π’ Good | Present | |
| **Charset** | π’ Good | UTF-8 declared | |
| **Mixed content** | β οΈ Potential | 147 http:// references found in HTML (mostly in inline scripts) β should be protocol-relative or https | |
| **Source maps** | π΄ Exposed | Multiple .map files accessible in production (loader.init-shop-user-recognition.en.esm.js.map, etc.) | Block .map file access in production |
| **JavaScript errors** | π΄ Present | "Identifier 'MStlCard' has already been declared", "Identifier 'origFetch' has already been declared", "Cannot read properties of null" | Fix duplicate script loading; add null checks |
| **jQuery version** | π΄ Outdated | jQuery 1.9.1 (released 2013) β 11 years old with known security vulnerabilities | Upgrade to jQuery 3.7+ or remove entirely |
5.3 Detected Shopify Apps (Performance Impact)
| App | Purpose | Performance Impact |
|---|---|---|
| **GoKwik** | Checkout/payment | 437 KiB, 343ms main thread β **HIGH** |
| **Judge.me** | Reviews | Minimal (loader.js only) |
| **Reelfy** | Shoppable videos | 48 KiB + CSS, loaded twice β **MEDIUM** |
| **SEOAnt (SEO Will)** | SEO optimization | Minimal |
| **Quinn** | Shoppable videos | Multiple bundles β **MEDIUM** |
| **HulkApps Form Builder** | Forms | 14 KiB + 968 KiB image β **HIGH** |
| **Dondy** | WhatsApp chat | 64 KiB β **LOW** |
| **Ecomsend** | Email/popup | 320 KiB β **HIGH** |
| **Nitrocommerce** | Popup/reviews | 50 KiB β **MEDIUM** |
| **Zithara** | Analytics | 26 KiB β **LOW** |
| **Clarity** | Analytics (Microsoft) | 25 KiB, 479ms main thread β **HIGH** |
| **Google Tag Manager** | Tag management | 718 KiB, 706ms main thread β **CRITICAL** |
| **Facebook Pixel** | Advertising | 245 KiB, 343ms main thread β **HIGH** |
| **Swiper** | Carousel/slider | 44 KiB β **LOW** |
| **Shopify Forms** | Forms | Minimal |
| **AEO/GEO (AI SEO)** | SEO | Minimal |
| **Bold** | Apps platform | Minimal |
| **Makehook** | Analytics | 1 KiB β **LOW** |
6. Content Quality Assessment
6.1 Image Quality & Authenticity
- **No AI-generated images detected** in filenames (no Gemini_Generated, ChatGPT_Image, etc.)
- **OG image** uses `Gemini_Generated_Image_4.jpg` β this is an AI-generated brand image used as the site's social sharing default. This should be replaced with a real brand photograph.
- **Product images** appear to be real product photography (filenames like LR14080-7-png.png, IMG_4218.png)
- **Lookbook images** are real lifestyle photography (IMG_0916.jpg, IMG_9109_1.jpg)
- **Trust badge images** (IGI logo, BIS hallmark) present
6.2 Trust Signals
| Signal | Present | Details |
|---|---|---|
| **Phone number** | β | +91 9187214583 (11amβ9pm, 7 days) |
| **Email** | β | hello@onyadiamonds.com |
| **Physical address** | β | Bengaluru stores listed |
| **GSTIN** | β | 29AASCM5520E1Z9 |
| **Return policy** | β | Lifetime exchange (100%), buyback (80%) |
| **Certifications** | β | IGI certified diamonds, hallmarked gold |
| **Customer reviews** | β | Judge.me reviews present; testimonials section on homepage |
| **Trust badges** | β | IGI logo, BIS hallmark displayed |
| **WhatsApp chat** | β | Floating WhatsApp button |
| **Store locator** | β | Physical store locations |
6.3 UX Issues
| Issue | Severity | Details |
|---|---|---|
| **No visual breadcrumbs** | π‘ Medium | BreadcrumbList schema exists but no visual breadcrumb navigation on product/collection pages |
| **Generic "Read more" links** | π‘ Low | Blog listing uses "Read more" instead of descriptive link text |
| **Product card links have empty aria-label** | π‘ Medium | Accessibility issue for screen reader users |
| **WhatsApp buttons lack accessible names** | π‘ Medium | Multiple "Chat on WhatsApp" buttons with no distinguishing labels |
7. Priority Recommendations
π΄ Immediate (This Week)
| # | Issue | Impact | Effort |
|---|---|---|---|
| 1 | **Reduce mobile LCP from 16.6s to < 4s** | Direct ranking signal; 92.3% of users are on mobile; current LCP is 6.6x the good threshold | High β requires theme-level changes |
| 2 | **Defer non-critical JavaScript** | GTM (706ms), GoKwik (343ms), Facebook (343ms), Clarity (479ms) all block the main thread | Medium β add defer/async to non-critical scripts |
| 3 | **Inline critical CSS / defer non-critical CSS** | 620ms estimated savings from render-blocking CSS alone | Medium β use Shopify's critical CSS feature or manual inlining |
| 4 | **Remove or upgrade jQuery 1.9.1** | Security vulnerability; 31.9 KiB wasted; likely not needed for modern theme | Low-Medium |
| 5 | **Fix duplicate script loading** | reelfy.js, collection-list.js, stl-card.js all loaded twice | Low β fix Liquid template conditions |
| 6 | **Add review/rating schema to products** | Missed rich result opportunity (star ratings in SERPs) | Low β enable in Judge.me settings |
| 7 | **Replace AI-generated OG image** | `Gemini_Generated_Image_4.jpg` used as default social sharing image β brand authenticity issue for a luxury jewellery brand | Low β replace with real brand photography |
π‘ Short-Term (This Month)
| # | Issue | Impact | Effort |
|---|---|---|---|
| 8 | **Optimize image delivery** | 836 KiB+ savings possible; serve WebP, proper sizes, responsive srcset | Medium β bulk image optimization |
| 9 | **Audit and remove unused Shopify apps** | Each app adds JS/CSS bloat; GoKwik alone is 437 KiB | Medium β review app necessity |
| 10 | **Strengthen security headers** | Missing script-src CSP, COOP, Trusted Types; HSTS too low | Low β Cloudflare page rules or Shopify app |
| 11 | **Fix accessibility issues** | 8 images without alt, touch targets too small, user-scalable=0 | Low-Medium |
| 12 | **Add LocalBusiness geo coordinates + openingHours** | Enhanced local SEO for Bengaluru stores | Low |
| 13 | **Add twitter:image meta tag** | Social sharing previews on Twitter/X | Low |
| 14 | **Block .map file access in production** | Source code exposure; unnecessary bandwidth | Low β robots.txt or Cloudflare rule |
| 15 | **Fix JavaScript errors** | "MStlCard already declared", "origFetch already declared", null reference errors | Low-Medium |
π’ Long-Term (This Quarter)
| # | Issue | Impact | Effort |
|---|---|---|---|
| 16 | **Rebuild theme for performance** | Current theme loads 48 scripts and 814 KiB of HTML; a lean theme could cut this by 70% | High β consider Dawn-based custom theme |
| 17 | **Implement predictive prefetching** | Shopify's built-in predictive search could be enhanced with route prefetching | Medium |
| 18 | **Add hreflang for future international expansion** | Enable multi-language/multi-region targeting | Medium |
| 19 | **Implement breadcrumb navigation UI** | Visual breadcrumbs for UX and SEO | Low |
| 20 | **Add author bios to blog posts** | E-E-A-T signals for content quality | Low |
Summary Score Card
| Category | Score | Grade | Key Issue |
|---|---|---|---|
| **Performance (Mobile)** | 35/100 | π΄ | LCP 16.6s (6.6x threshold); 48 scripts; 1.5 MiB third-party JS |
| **Performance (Desktop)** | β | π‘ | LCP 1.1s acceptable; TBT 390ms still high |
| **Accessibility** | 79/100 | π‘ | Missing alt text; touch targets; user-scalable=0 |
| **Best Practices** | 54/100 | π΄ | Weak CSP; missing COOP; jQuery 1.9.1; JS errors |
| **SEO** | 85/100 | π’ | Strong schema foundation; missing review schema |
| **Content Quality** | 80/100 | π’ | Good E-E-A-T; AI OG image concern |
| **Security** | 60/100 | π΄ | HSTS too low; missing CSP directives; exposed source maps |
| **Overall** | 58/100 | π΄ | Performance crisis on mobile; security gaps |
Methodology
- **CrUX Data:** cruxvis.withgoogle.com β 40+ weeks of real-world field data (Aug 2025 β Jun 2026)
- **Lighthouse:** PageSpeed Insights (Lighthouse 13.3.0) β Mobile (Moto G Power, Slow 4G) and Desktop
- **Security Headers:** curl -sI analysis
- **Technical SEO:** curl -sL analysis of homepage, product page, collection page, blog post
- **Schema Detection:** curl + regex parsing of JSON-LD blocks (server-rendered pages)
- **Sitemap Analysis:** Direct fetch of all sitemap files
- **Browser DOM:** Limited β browser daemon instability prevented full JS-rendered DOM inspection. Product and collection pages are server-rendered, so curl analysis is reliable for those templates. Homepage meta tags confirmed via curl.