Web Quality Audit: Rynox Gear
Website: https://rynoxgear.com | Date: 2026-08-27 | Platform: Shopify (theme id 143951331395, "REBUY" variant) | Industry: Motorcycle protective gear, luggage & accessories (D2C + retail + dealer)
Business context: rynoxgear.com is a Mumbai-based, bootstrapped manufacturer (founded 2012) serving a strongly mobile-first Indian audience — 85.3% phone / 13.5% desktop / 1.1% tablet per CrUX. 103 SKUs / 818 variants, median variant ₹5,200. Shopify storefront fronted by Cloudflare. See business-analysis.md for the full company baseline. Audit priorities below are weighted for a mobile-dominant, safety-credibility-driven commerce brand.
Executive Summary
Rynox Gear has a solid real-world performance foundation (CrUX Core Web Vitals all "Good and stable" on phone) and strong baseline SEO hygiene (self-canonical, keyword-rich titles/meta, full Open Graph, healthy sitemaps, active review schema). However, Lighthouse lab scores are poor on mobile — Performance 30/100 — driven by heavy render-blocking CSS/JS (the homepage ships 158 scripts and 27 stylesheets) and unoptimized hero imagery. The gap between field ("Good") and lab (LCP 63.5s mobile) means repeat, warm-cache visitors are fine, but cold first-touch visitors on mid-range Android (the overwhelming majority of this audience) get a slow, janky first paint.
Structured data is present but incomplete: Product JSON-LD is missing offers/price/availability (no price rich-result eligibility) and the brand name is inconsistent ("rynoxgears" vs Organization "Rynox Gear"). Collection pages still carry the Shopify default meta description ("Quality and Practical Solutions"), the single most common, highest-ROI fix. Content recency is a brand risk — the blog froze in March 2022.
| Category | Mobile Score | Desktop Score | Grade |
| Performance | 30 | ~30 (lab LCP 10.1s = Poor) | 🔴 |
| Accessibility | 82 | 82 | 🟡 |
| Best Practices | 50 | 50 | 🟡 |
| SEO | 85 | 85 | 🟢 |
| Overall (avg) | 62 | 62 | 🟡 |
Note: PageSpeed Insights rendered identical category-score values for the mobile and desktop panels (30/82/50/85). Desktop lab metrics were captured separately and are materially better than mobile on some measures (FCP 1.0s vs 3.7s) but still Poor on LCP (10.1s) — so Desktop Performance is also graded 🔴. The mobile-first audience (85%) makes the mobile grade the operative one.
1. Performance Audit
1.1 CrUX Real-World Field Data
Core Web Vitals Assessment: Passing on phone (and, per the identical desktop panel, passing widely). All three metrics meet the "Good" threshold and are rated "good and stable" by CrUX Vis.
Source: CrUX Vis, origin https://rynoxgear.com, latest period 2026-07-26 → 2026-08-22 (40 weekly snapshots extracted; first 2025-10-26 → 2025-11-22, last 2026-07-26 → 2026-08-22).
| Metric | Latest (phone) | Threshold Good | Rating | 12-mo trend |
| LCP | 2,081 ms | ≤ 2,500 ms | 🟢 Good | Improving: 2,195 ms → 2,081 ms |
| INP | 164 ms | ≤ 200 ms | 🟢 Good | Rising but safe: 143 ms → 164 ms |
| CLS | 0.01 | ≤ 0.10 | 🟢 Good | Rock-steady at 0.01 |
| FCP | (field FCP not extracted; lab 3.7s mobile) | ≤ 1,800 ms | — | — |
| TTFB | (lab ~392 ms server processing per server-timing) | ≤ 800 ms | 🟢 | — |
Interpretation: Real users experience a fast, stable site. INP has crept up ~21 ms over the year (143→164 ms) but remains comfortably Good. The foundation is sound — optimisation effort should target first-touch cold-cache lab performance and conversion UX, not fixing a broken CWV baseline.
1.2 Core Web Vitals (Lighthouse Lab Data)
Source: PageSpeed Insights, 2026-08-27. "Passed" CWV Assessment (field) vs poor lab metrics.
| Metric | Mobile | Threshold | Rating | Desktop | Threshold | Rating |
| FCP | 3.7 s | ≤ 1.8 s | 🔴 Poor | 1.0 s | ≤ 1.8 s | 🟢 Good |
| LCP | 63.5 s | ≤ 2.5 s | 🔴 Poor (25×) | 10.1 s | ≤ 2.5 s | 🔴 Poor (4×) |
| TBT | 2,200 ms | ≤ 200 ms | 🔴 Poor (11×) | 1,710 ms | ≤ 200 ms | 🔴 Poor (8.5×) |
| CLS | 0.00 | ≤ 0.10 | 🟢 Good | 0.00 | ≤ 0.10 | 🟢 Good |
| SI | 42.0 s | ≤ 3.4 s | 🔴 Poor (12×) | 14.1 s | ≤ 3.4 s | 🔴 Poor (4×) |
The 63.5 s mobile LCP is partly a Lighthouse cold-cache/throttle artifact on an extremely script-heavy Shopify theme, but the directional signal is valid: the homepage loads 158 <script> tags and 27 stylesheets before meaningful paint. Desktop LCP of 10.1 s is independently Poor and not an artifact.
1.3 LCP Phase Breakdown (Mobile)
The PSI "LCP breakdown" panel was not cleanly extractable from the DOM. Proxy evidence from the opportunity audit: Render-blocking requests = 1,980 ms estimated savings is the dominant phase — i.e., the browser cannot even discover the LCP element until CSS/JS finish. This is the classic JS-rendered Shopify pattern (pre-resource delay), confirming the fix is inline critical CSS + defer non-critical JS, not just image compression.
1.4 Performance Issues by Impact
| Impact | Issue | Evidence | Est. Savings | Recommendation |
| 🔴 Critical | Render-blocking CSS/JS | 27 stylesheets + 158 scripts on homepage; "Render-blocking requests" opp = 1,980 ms | ~2.0 s LCP | Inline critical above-fold CSS; defer/async non-critical scripts; load theme + vendor JS lazily |
| 🔴 Critical | Unoptimized hero/feature imagery | "Improve image delivery" opp = 326 KiB; 211 images on homepage | ~0.3 s + bytes | Serve WebP/AVIF srcset; right-size hero (currently 1200×1200 OG asset used as banner); loading="lazy" below fold |
| 🔴 High | Forced reflow / layout thrash | "Forced reflow" diagnostic present; TBT 2,200 ms mobile | — | Audit theme JS (slick-carousel, jQuery UI, custom.js) for DOM writes in loops |
| 🟡 Medium | Legacy JavaScript | "Legacy JavaScript" opp = 58 KiB | ~58 KiB + TBT | Add babel/polyfill modern targets; drop IE11-era shims |
| 🟡 Medium | Font display swap | "Font display" opp = 220 ms; Google Fonts (Arvo) loaded without &display=swap enforced | ~0.2 s | Self-host or add &display=swap; font-display: swap in @font-face |
| 🟡 Medium | Excessive preconnect (8+) | Headers show 8+ rel=preconnect (Shopify CDN, Google APIs, jsdelivr, code.jquery.com) | minor | Trim to 2–3 high-value hosts; the rest dilute priority |
1.5 Resource Transfer Summary
| Category | Signal | Note |
| Images | 211 <img> on homepage; 184 on PDP | Heavy imagery is core to a gear brand — optimize, don't cut |
| JS | 158 <script> tags, jQuery 3.5.1 + jQuery UI + slick + vendor.js + custom.js | Primary performance tax |
| CSS | 27 stylesheets (theme.scss + slick + jquery-ui + app CSS) | Consolidate/critical-inline |
| 3rd-party | Meta Pixel, Google Ads, Klaviyo, Judge.me, REBUY, Pandectes, YouTube iframes (5 on HP) | 3 of 5 YouTube iframes errored during automated checks (playback-ID failures) — verify embeds |
2. Accessibility Audit
2.1 Critical Issues
- Multiple H1s on the homepage (4):
["", "AIR GT 4 JACKET – CE CERTIFIED CLASS A", "H2GO PRO RAIN PANTS", "HELIUM GT GLOVES"]. One is the empty logo H1; the product-slider captions are also marked H1. Screen readers and Google expect a single page-level H1. Product-slider titles should be h2 (they already are elsewhere) — fix the template so only the logo/hero is h1.
- PDP has 2 H1s ("ADVENTO PRO PANTS" appears twice — visible + a duplicate). Collapse to one.
2.2 High Priority Issues
- Images missing
alt (93 of 211 = 44% on homepage; 122 of 184 = 66% on PDP). The no-alt set includes nav icons (NavIcon-Jackets.png, etc.) and the hero banner (Mobile_Banner_1080_X_1920_Option_A_400x.jpg). Nav icons and the banner are content-bearing for low-vision users and image search — they need descriptive alt, not omission. (31 homepage images have alt="" — acceptable only if genuinely decorative, e.g. the base64 spacer GIFs.)
- No ARIA attributes used anywhere on the homepage (
ariaAttrs: 0). Interactive widgets (sliders, mega-menu, variant selectors) rely on native semantics only; verify keyboard operability of the product carousel and mega-nav.
2.3 Positive Findings
<html lang="en"> present (minor: could be en-IN to match content-language: en-IN).
<meta name="viewport"> present — mobile-friendly.
- Single visible H1 hierarchy on inner pages is mostly logical.
aria-label on YouTube iframes present.
- Accessibility score 82/100 — above average for a Shopify theme.
3. SEO Audit
3.1 Technical SEO
| Check | Status | Evidence |
| robots.txt | 🟢 Good | References Sitemap:, disallows /admin, /cart/, /checkout, /account, variant/filter crawl traps; allows agents via UCP/MCP |
| XML Sitemap | 🟢 Good | 104 products, 123 collections, 151 pages, 9 blog posts — all indexed; sitemap.xml index present |
| Canonical URLs | 🟢 Good | Self-referencing on homepage, PDP, collection, page (verified) |
| Indexation | 🟢 Good | No noindex on important templates; crawlable |
| URL structure | 🟢 Good | Clean hyphenated slugs (/products/rynox-advento-pants-black) |
| HTTPS | 🟢 Good | HSTS enforced; upgrade-insecure-requests; no mixed content |
| Mobile-friendly | 🟢 Good | Responsive, viewport set, 85% mobile audience |
| Variant param pollution | 🟢 Good | 0 ?variant= links on homepage product grid (clean) |
| Hreflang | ⚪ N/A | Single locale (en-IN), India-only D2C — correctly no hreflang needed |
3.2 On-Page SEO Issues
| Issue | Severity | Evidence | Fix |
| Collection pages use Shopify default meta description ("Quality and Practical Solutions") | 🔴 High | /collections/jackets meta = "Quality and Practical Solutions" (verified via curl) | Set unique, keyword-rich collection meta descriptions in admin (P0 — bulk edit) |
| Homepage title 64 chars, keyword-rich | 🟢 Good | "Motorcycle Protective Gear, Luggage and Accessories – Rynox Gear" | Keep |
| Homepage meta description 159 chars, keyword-rich | 🟢 Good | "Premium Motorcycle Protective Gear- Riding Jackets… free shipping across India." | Keep |
| Open Graph + Twitter Card complete | 🟢 Good | og:title/description/image/type/url + twitter:card=summary_large_image | Keep; verify og:image is 1200×630 (current asset is 1200×1200) |
| Multiple H1s | 🔴 High | See §2.1 | Single H1 per page |
| Keyword targeting on collection titles | 🟡 Medium | Collection title not keyword-optimized (could not extract; verify) | Add "Motorcycle Jackets Online – Rynox Gear" style titles |
3.3 Schema Markup
| Type | Present | Status |
| Organization (homepage) | ✅ name, logo, url, sameAs (IG/FB/X/YT) | ⚠️ Missing telephone, email, address, foundingDate |
| WebSite (homepage) | ✅ | OK |
| Product (homepage ×3, PDP ×2 split blocks) | ✅ | ⚠️ Missing offers/price/availability in both blocks → no price rich result |
| AggregateRating (PDP) | ✅ 4.67 / 3 reviews | OK — star rich result eligible |
| BreadcrumbList | ❌ | Visual breadcrumbs exist on PDP but no structured data |
| LocalBusiness | ❌ | Recommended (Mumbai HQ + 5 Exclusive Stores) |
| FAQPage / Article | ❌ | Blog frozen since 2022; add Article schema if revived |
Product schema detail (PDP): Two JSON-LD blocks — block A has brand: "rynoxgears" + sku: "RX-PT-ADVNTPRO-BK/BK-DB-2XL" but no offers; block B has aggregateRating but no brand/offers/price. Net result: no price or availability in Product structured data, and a brand-name inconsistency ("rynoxgears" lowercase vs Organization "Rynox Gear") that fragments entity signals. Add a single consolidated Product block with brand.name: "Rynox Gear", offers (price/priceCurrency/availability), sku, image, aggregateRating.
3.4 Content Quality (E-E-A-T)
| Signal | Status | Note |
| Experience | 🟢 | Rider-founded narrative (About Us), #ProjectRAID, Dakar association |
| Expertise | 🟢 | CE Class AA/A, D3O, in-house R&D claims; Crash Replacement Program |
| Authoritativeness | 🟡 | Strong social (151K IG) but no press/awards schema; blog stale |
| Trustworthiness | 🟡 | Phone + address published; email not published (support form only); policies in footer |
| Content recency | 🔴 | Blog last updated March 2022 — 4+ years stale; kills Discover eligibility & community SEO |
4. International SEO
Not applicable — the store is a single-locale (en-IN) India-only D2C operation with no localized subdirectories or hreflang. This is the correct configuration for the current business; do not add hreflang. If international D2C shipping launches (a noted business-analysis opportunity), then stand up /en-in/, /en-us/, etc. with proper hreflang + self-canonical.
5. Best Practices & Security
5.1 Security Headers
| Header | Value | Assessment |
| HSTS | max-age=7889238 (~91 days) | 🟡 Missing includeSubDomains + preload |
| X-Frame-Options | DENY | 🟢 |
| X-Content-Type-Options | nosniff | 🟢 |
| CSP | block-all-mixed-content; frame-ancestors 'none'; upgrade-insecure-requests | 🔴 No script-src directive — cannot mitigate XSS; no object-src 'none' |
| X-XSS-Protection | 1; mode=block | 🟢 (legacy, harmless) |
| COOP/COEP | absent | 🟡 Not set |
Recommendation: Add a real CSP with script-src (nonce/hash-based, allowing cdn.shopify.com, jsdelivr, code.jquery.com, ajax.googleapis.com, Meta/Google pixels) and object-src 'none'. Upgrade HSTS to max-age=31536000; includeSubDomains; preload.
5.2 Modern Standards
- No
document.write / synchronous XHR observed; valid HTML5 doctype; UTF-8 declared. ✅
- 27 stylesheets / 158 scripts — excessive (best-practices tax; contributes to TBT). 🟡
- Source maps (
.map) not confirmed leaked — verify in production. 🟡
- 5 YouTube iframes on homepage; 3 returned playback-ID errors during automated checks (may be region/embed-restriction, not a code defect) — spot-check on real devices. 🟡
6. Content Quality Assessment
6.1 Image Quality & Authenticity
- No AI-generated image signatures detected (no
Gemini_Generated_Image_, ChatGPT_Image_, ai0_.png, unnamed_1.png patterns in sampled filenames). Product/lifestyle imagery appears to be real photography on cdn.shopify.com — appropriate for a manufacturer brand where authenticity is a differentiator. ✅
- Hero/banner and nav-icon alt text is missing (see §2.2) — a real accessibility + image-search gap on an imagery-led catalog.
6.2 UX Issues
- Mobile-first but heavy: 85% phone audience served a 158-script homepage — first-touch LCP is Poor in lab. Prioritize mobile render-path.
- Blog frozen 2022: dead content engine for a community brand.
- No visible size/fit tool, loyalty programme, or checkout EMI (from business analysis) — conversion, not quality, gaps; noted for context.
7. Priority Recommendations
🔴 Immediate (This Week)
| # | Issue | Impact | Effort |
| 1 | Unique meta descriptions on all 123 collections (replace "Quality and Practical Solutions" default) | SERP CTR on category pages | Low — bulk edit |
| 2 | Consolidate Product JSON-LD: add offers/price/availability + fix brand to "Rynox Gear" | Price + star rich results | Medium — theme edit |
| 3 | Inline critical CSS + defer non-critical JS (27 stylesheets / 158 scripts) | Mobile LCP/TBT (1,980 ms saving) | High — theme refactor |
| 4 | Single H1 per page (homepage 4→1, PDP 2→1) | Heading/SEO clarity | Low — template |
🟡 Short-Term (This Month)
| # | Issue | Impact | Effort |
| 5 | Add descriptive alt to nav icons + hero banners (44–66% currently missing) | A11y + image search | Medium — bulk |
| 6 | Add BreadcrumbList schema to PDP/collection (visual crumbs exist) | SERP breadcrumbs | Medium |
| 7 | Real CSP with script-src; HSTS preload | XSS mitigation | Medium |
| 8 | Self-host/:swap fonts (220 ms saving); drop legacy JS (58 KiB) | Performance | Low |
| 9 | Complete Organization schema (phone, email, address, foundingDate) + add LocalBusiness | Entity/rich results | Low |
| 10 | og:image to 1200×630; trim preconnect to 2–3 | Social + perf | Low |
🟢 Long-Term (This Quarter)
| # | Issue | Impact | Effort |
| 11 | Revive blog/content engine (frozen Mar 2022) + Article schema | Discover/community SEO | Medium |
| 12 | Optimize hero imagery (WebP/AVIF srcset, lazy below-fold) | LCP bytes | Medium |
| 13 | Add FAQPage schema to key pages | FAQ rich results | Low |
| 14 | Add <html lang="en-IN"> | Language precision | Trivial |
Summary Score Card
| Category | Score | Grade |
| Performance (Mobile, Lighthouse) | 30/100 | 🔴 Poor (field CWV Passing) |
| Performance (Desktop, Lighthouse) | ~30/100 | 🔴 Poor (LCP 10.1s) |
| Accessibility | 82/100 | 🟡 Good |
| Best Practices | 50/100 | 🟡 Fair |
| SEO | 85/100 | 🟢 Good |
| Content Quality | ~70/100 | 🟡 (stale blog, alt gaps) |
| UX (mobile-first fit) | ~65/100 | 🟡 (heavy first-touch) |
| Overall | ~62/100 | 🟡 Fair |
Bottom line: Rynox Gear's real users have a fast, stable experience (CrUX all-Good) and the site has clean technical SEO bones. The urgent work is lab performance on mobile (render-blocking JS/CSS, image delivery) and structured-data completeness (price/availability, brand consistency, breadcrumbs) — both directly tied to the 85% mobile, conversion-sensitive audience. The single highest-ROI, lowest-effort win is fixing the collection-page meta descriptions.
Citations
- https://cruxvis.withgoogle.com/#/ — CrUX field CWV (phone): LCP 2,081 ms, INP 164 ms, CLS 0.01, "good and stable", 40 weekly snapshots 2025-10-26 → 2026-08-22; device split Phone 85.3% / Desktop 13.5% / Tablet 1.1%
- https://pagespeed.web.dev/ — Lighthouse lab (2026-08-27): Mobile scores Perf 30 / A11y 82 / BP 50 / SEO 85; Mobile FCP 3.7s, LCP 63.5s, TBT 2,200ms, CLS 0, SI 42.0s; Desktop FCP 1.0s, LCP 10.1s, TBT 1,710ms, CLS 0, SI 14.1s; opportunities Render-blocking 1,980ms, Image delivery 326 KiB, Font-display 220ms, Legacy JS 58 KiB
curl -sI https://rynoxgear.com/ — Security headers (HSTS, XFO DENY, CSP block-all-mixed-content, X-CTO nosniff, X-XSS 1;mode=block), 8× preconnect, content-language: en-IN, Shopify/Cloudflare
curl -sL https://rynoxgear.com/robots.txt — crawl rules + Sitemap: directive
https://rynoxgear.com/sitemap.xml + sub-sitemaps — 104 products, 123 collections, 151 pages, 9 blogs
- Browser DOM (homepage + PDP) — 158 scripts / 27 stylesheets; homepage 4 H1s, 93/211 imgs no-alt; PDP 2 H1s, 122/184 no-alt, AggregateRating 4.67/3, breadcrumbs present (no schema), Judge.me active; JSON-LD Organization/WebSite/Product; Organization missing contact fields; Product missing offers/price + brand "rynoxgears" inconsistency
curl -sL https://rynoxgear.com/collections/jackets — meta description "Quality and Practical Solutions" (Shopify default)
- business-analysis.md (same workspace) — company baseline, 85% mobile audience, 103 SKUs, blog frozen Mar 2022, trust signals