Web Quality Audit: Adoria Threads

Website: https://adoriathreads.com/ | Date: 2026-08-22 | Platform: Shopify (theme 135006290073) | Industry: Slow-fashion / made-to-order women's linen dresses Business context: Canadian micro slow-fashion studio (founder Lynn, Okanagan BC). 37 live dress SKUs, CAD $230–$270, made-to-order custom sizing, 2–5 wk lead time. D2C + Etsy (855 sales, 4.8/5) + Shop.app. ~126 D2C visits/mo. See business-analysis.md.


Executive Summary

Adoria Threads is a clean, well-structured Shopify store with strong SEO fundamentals (100/100) and good accessibility (93/100), but it is dragged down by a severe mobile performance problem and a handful of brand-integrity and structured-data gaps that matter disproportionately for a trust-led artisan brand.

The headline issue is mobile LCP of 16.8s — 6.7× Google's "Poor" threshold — caused by a JS-heavy Shopify theme rendering the page on a throttled mobile device. Desktop LCP is fine (2.5s), so this is a mobile-rendering pathology, not a server problem. For a discovery-constrained brand (126 visits/mo), a 16.8s mobile load is effectively a wall: any organic or social mobile visitor bounces before the hero renders.

Two findings are brand-critical for an artisan positioning:

  1. No structured data on the homepage or site-wide (no Organization, WebSite, BreadcrumbList JSON-LD) — the brand forfeits rich results and entity signals.
  2. A leftover competitor email (hello@nangthelabel.com) appears in the product-page shipping/sizing copy — a copy-paste artifact from another store that undermines the handmade, personal brand promise.
CategoryMobile ScoreDesktop ScoreGrade
Performance4958🔴 Poor
Accessibility9393🟢 Good
Best Practices6262🟡 Needs work
SEO100100🟢 Good
Overall (avg)7678🟡 Mixed

Mobile-vs-desktop Performance gap: 16.8s vs 2.5s LCP = 6.7× — flag this ratio explicitly; mobile is the priority.


1. Performance Audit

1.1 CrUX Real-World Field Data

Core Web Vitals Assessment: Not assessed. The origin adoriathreads.com is not present in the Chrome UX Report — confirmed two ways: (a) cruxvis.withgoogle.com returned no data after searching the origin; (b) PageSpeed Insights shows "No Data / Discover what your real users are experiencing" for both mobile and desktop. This is expected: per the business analysis, D2C traffic is ≈126 monthly visits, well below the ~500–1,000 visit CrUX reporting threshold. All performance figures below are Lighthouse lab data (emulated), not field data.

1.2 Core Web Vitals (Lighthouse Lab Data)

MetricMobileRatingDesktopRatingThreshold (Good / Poor)
FCP3.8s🔴 Poor0.5s🟢 Good≤1.8s / >3.0s
LCP16.8s🔴 Poor2.5s🟢 Good*≤2.5s / >4.0s
TBT530ms🔴 Poor480ms🟡 Needs Improv≤200ms / >600ms
CLS0🟢 Good0.135🟡 Needs Improv≤0.10 / >0.25
SI6.0s🔴 Poor1.7s🟢 Good≤3.4s / >5.8s
Perf score49🔴58🔴

*Desktop LCP 2.5s sits exactly on the Good boundary — one regression pushes it to Needs Improvement.

1.3 LCP Phase Interpretation (Mobile)

Mobile LCP of 16.8s is dominated by the JS-render-blocking pattern typical of Shopify themes: 75 <script> tags, render-blocking CSS/JS (650ms estimated savings), and >4 preconnect connections (Lighthouse warns these should be used sparingly). The page's main-thread work is 2.8s and JS execution 1.6s — the browser cannot even discover the LCP element until the theme's JavaScript hydrates. This is a pre-resource-delay problem, not an image-size problem (image-delivery savings are only 87KiB).

1.4 Performance Issues by Impact

🔴 Critical

  • Mobile LCP 16.8s (6.7× Poor threshold). Root cause: JS-rendered Shopify theme blocks first paint on throttled mobile. Fix: defer/inline critical CSS, remove render-blocking apps, reduce preconnects to 2–3, lazy-load below-fold sections, consider a lighter theme or Dawn. Estimated savings: 650ms render-blocking + large JS reduction (704KiB unused JS).
  • Enormous network payload: 3,262 KiB total (mobile). Reduce unused JS (704KiB), unused CSS (38KiB), legacy JS (36KiB), and serve properly-sized/WebP images.

🟡 High

  • Desktop TBT 480ms / CLS 0.135 (both Needs Improvement). Cheap wins once JS is trimmed; CLS needs explicit width/height on images (Lighthouse flags layout-shift culprits).
  • Desktop Performance 58 still Poor despite good LCP — driven by the same JS bloat.

🟢 Low

  • Minify JS (3KiB savings) — negligible; bundle with the JS-reduction work.

1.5 Resource Transfer Summary (Mobile)

  • Total payload 3,262 KiB across JS (75 scripts), 3 stylesheets, 14 images (mostly lazy-loaded). 4 preconnects (warning). Cache lifetimes inefficient (321KiB could be cached longer).

2. Accessibility Audit

Score: 93/100 (Good). Strong baseline; issues are concentrated in image alt text and heading hierarchy.

2.1 Critical Issues

  • None.

2.2 High Priority Issues

  • Empty alt="" on content/product images. Homepage: 13 of 14 images have empty alt (only the logo has descriptive alt). Product gallery thumbnails and carousel slides similarly lack alt. For a visual product brand this hides dresses from screen readers and image search. The hero/LCP image and product photos should carry descriptive alt (e.g., "Penelope in Raisin linen maxi dress").
  • Heading hierarchy skip (h3 → h5) on homepage. Section headings run h2, h3, then jump to h5 (the "Adoria Threads is born from labour of love…" block is an h5). Insert an h4 or re-level to keep a logical order.

2.3 Positive Findings

  • Skip-to-content link present (first focusable element).
  • Single H1 per page (homepage H1 = brand/logo; product H1 = product name).
  • Viewport meta present, <html lang> present, meta description present.
  • No color-contrast failures (93 score implies passes).
  • Form inputs (newsletter email, quantity, personalization) have associated labels.
  • Logical landmark structure (header nav, main, footer nav).

3. SEO Audit

Score: 100/100 (Excellent). Technical SEO is the store's strongest dimension.

3.1 Technical SEO

CheckStatus
robots.txt✅ Well-formed; disallows cart/checkout/account; includes Sitemap: directive
XML Sitemap✅ Present (sitemap.xml index → products/pages/collections/blogs + agentic-discovery)
Canonical URLs✅ Self-referencing on homepage and product pages
HTTPS✅ Enforced site-wide (HSTS, no mixed content — CSP block-all-mixed-content)
Mobile-friendly✅ Viewport configured, responsive theme
URL structure✅ Clean, hyphenated, descriptive (/products/penelope-in-raisin)
Indexation✅ No stray noindex on key pages

3.2 On-Page SEO Issues

  • lang="en" instead of lang="en-CA". The HTTP content-language header is correctly en-CA, but the HTML lang attribute is bare en. Low impact, but fix for precise Canadian locale signaling.
  • twitter:image missing. Homepage and product pages emit twitter:card, twitter:title, twitter:description but no twitter:image — Twitter shares will show no preview image. Add twitter:image (mirror og:image).
  • Homepage title is keyword-light: "Adoria Threads - A Canadian Slow Fashion Brand Focused On Fiber Fabric" — acceptable (brand + descriptor), but a primary commercial keyword ("linen dresses", "made-to-order") would help non-branded discovery. Product titles are strong and keyword-rich.

3.3 Schema Markup

Schema TypeHomepageProduct PageNotes
Product❌ none✅ presentProduct JSON-LD has name, image, brand, offers (24 variants, InStock, CAD) — good
Organization❌ none❌ noneMissing site-wide — forfeits entity/rich-result signals
WebSite + SearchAction❌ none❌ noneMissing sitelinks search box opportunity
BreadcrumbList❌ none❌ noneMissing on collection/product pages
AggregateRating / Reviewn/a❌ noneProduct reviews show (0) on-site; no review schema markup

Critical SEO gap: the homepage (and entire site) emits zero JSON-LD. Only product pages carry Product schema. Adding Organization + WebSite + BreadcrumbList is a high-ROI, low-effort win (theme.liquid edit).

3.4 Image SEO

  • Filenames are descriptive and human (JINI0082_…jpg, Adoria_threads_logo_…png) — no IMG_1234 junk. ✅
  • Alt text absent on product/content images (see Accessibility 2.2) — this is also an image-SEO loss.

3.5 Internal Linking & 3.6 Keyword Targeting

  • Primary nav links resolve correctly (/collections/new-arrival-collection, /collections/all, /collections/dresses-collection). ⚠️ Note: the bare handle /collections/dresses returns a 404 — the real handle is dresses-collection. Verify no template/footer link uses the bare /collections/dresses pattern (the collection-context product URLs correctly use /collections/dresses-collection/products/…).
  • No keyword cannibalization observed; collection and product titles are distinct.

3.7 E-E-A-T Signals

  • Experience/Expertise: Strong — About page narrates founder Lynn, generational sewing, French-seam craft, BC home studio.
  • Authoritativeness: Off-site validation exists (Etsy 4.8/5, Trustpilot ~579) but is not surfaced on-site.
  • Trustworthiness: Contact emails present (hello@, return@, marketing@), policies linked (Returns, Privacy, Order & Delivery, Garment Care). ⚠️ No physical street address or business registration number published (common for home studios; low priority but noted).

4. International SEO

Not applicable — single locale (CAD / en-CA). No hreflang needed. No shell-translation risk. Only fix: set <html lang="en-CA"> to match the content-language header.


5. Best Practices & Security

Score: 62/100 (Needs work). Concrete header-level findings (from curl -sI):

HeaderValueAssessment
strict-transport-securitymax-age=7889238 (~91 days)⚠️ Missing includeSubDomains and preload
content-security-policyblock-all-mixed-content; frame-ancestors 'none'; upgrade-insecure-requests⚠️ No script-src/object-src; not a real CSP — PSI likely flags "CSP not implemented"
x-frame-optionsDENY
x-content-type-optionsnosniff
x-xss-protection1; mode=block✅ (legacy, harmless)
servercloudflare
Mixed contentnone

Findings:

  • HSTS without includeSubDomains/preload — subdomains not protected; add max-age=31536000; includeSubDomains; preload.
  • No effective CSP — the directive only blocks mixed content and frames; it does not constrain scripts. For a payment-handling store, implement a real CSP with script-src (Shopify requires unsafe-inline + nonce patterns) and object-src 'none'.
  • PSI Best Practices 62 on both platforms also likely reflects deprecated-API usage and/or missing image dimensions (CLS culprits) in the theme's third-party apps.

6. Content Quality Assessment

6.1 Image Quality & Authenticity

  • No AI-generated images detected. Filenames (JINI0082_…jpg, model-shot PNGs) and the Shopify CDN paths indicate real, professionally photographed garments on models. ✅ This is critical for an artisan "handmade/heirloom" positioning — the brand passes the authenticity test that would be a Critical failure for AI-generated product imagery.

6.2 Brand-Integrity Issue (High)

  • Product pages contain a leftover competitor email: hello@nangthelabel.com (in the sizing/shipping note: "…email us at hello@nangthelabel.com…"). This is a copy-paste artifact from another store's theme. For a brand whose entire promise is personal, handmade, founder-led service, a mismatched third-party email is a trust and brand-integrity failure — fix immediately (replace with hello@adoriathreads.com).

6.3 Trust Signals & Social Proof (High)

  • No on-site reviews. Product pages show "Customer Reviews (0)" / "Store reviews (0)" with a "Write a review" button, but the brand's real social proof lives off-site (Etsy 4.8/5 across ~855 sales; Trustpilot ~579 reviews). For a trust-led brand with discovery as the bottleneck, surfacing Etsy/Trustpilot ratings on the D2C site is the single highest-ROI conversion fix (Low effort, High impact per business-analysis.md gap #13).
  • Payment badges (Amex, Apple Pay, Visa, Mastercard, PayPal, Shop Pay, etc.) and policy links are present — adequate trust scaffolding.

6.4 UX Issues

  • No broken primary navigation discovered; collection handles resolve.
  • Newsletter capture, currency selector (CAD default, multi-region), and cart are functional.
  • The 2–5 week lead-time message is prominent and honest (good for expectation-setting), but it is the main conversion friction — mitigate with the off-site review surfacing above.

7. Priority Recommendations

🔴 Immediate (This Week)

#IssueImpactEffort
1Fix mobile LCP (16.8s): defer/inline critical CSS, cut render-blocking JS, reduce preconnects to 2–3, lazy-load below-foldCore Web Vitals + mobile bounceHigh
2Replace hello@nangthelabel.com with hello@adoriathreads.com in product templateBrand trust integrityLow
3Trim total payload (3,262 KiB): remove unused JS (704KiB) / CSS (38KiB), legacy JSPerf score + TBTMedium

🟡 Short-Term (This Month)

#IssueImpactEffort
4Add Organization + WebSite + BreadcrumbList JSON-LD site-wide (theme.liquid)Rich results, entity signalsLow
5Add twitter:image mirroring og:image on all templatesSocial share previewsLow
6Add descriptive alt to product/carousel images (not empty alt)A11y + image SEOMedium
7Surface Etsy/Trustpilot ratings on-site (widget/badge)Conversion (trust)Low
8Set <html lang="en-CA"> to match content-languageLocale precisionLow
9Implement real CSP (script-src + object-src 'none') and HSTS includeSubDomains; preloadSecurity best practicesMedium

🟢 Long-Term (This Quarter)

#IssueImpactEffort
10Fix heading hierarchy skip (h3→h5) on homepageA11y correctnessLow
11Add AggregateRating/Review schema once on-site reviews existStar ratings in SERPsMedium
12Explicit width/height on images to resolve desktop CLS 0.135Desktop CWVLow
13Add physical studio address / business number to About/Contact (optional)E-E-A-TLow

Summary Score Card

CategoryScoreGrade
Performance (Mobile)49/100🔴 Poor
Performance (Desktop)58/100🔴 Poor
Accessibility93/100🟢 Good
Best Practices62/100🟡 Needs work
SEO100/100🟢 Good
Content Quality~80/100🟢 Good (real photos; minus no on-site reviews + brand-email artifact)
Overall~74/100🟡 Mixed — fix mobile perf + 2 brand gaps

Sources & Citations

  • https://cruxvis.withgoogle.com/ — CrUX lookup for adoriathreads.com: no data (origin not in dataset)
  • https://pagespeed.web.dev/ — Lighthouse 13.4.1 lab report, Aug 22 2026 (Mobile 49/93/62/100; Desktop 58/93/62/100; Mobile LCP 16.8s, FCP 3.8s, TBT 530ms, CLS 0, SI 6.0s; Desktop LCP 2.5s, TBT 480ms, CLS 0.135)
  • curl -sI https://adoriathreads.com/ — security headers (HSTS, CSP, X-Frame-Options, etc.)
  • curl -sL https://adoriathreads.com/robots.txt — robots directives + Sitemap reference
  • curl -sL https://adoriathreads.com/sitemap.xml — sitemap index (products/pages/collections/blogs + agentic)
  • Live browser DOM inspection (homepage, product penelope-in-raisin, collection dresses-collection): meta tags, JSON-LD schema types, alt-text counts, heading levels, nangthelabel.com email artifact, image filenames
  • business-analysis.md — brand context, traffic (~126/mo), channels, review counts (Etsy 4.8/5, Trustpilot ~579)