MILEDEVS · SEO Audit Report

Rinfit

rinfit.com · September 2026 · Shopify (Prestige 10.11.1)

Overview of Issues

Rinfit sells silicone rings direct-to-consumer on Shopify — 129 products, 38 collections, 20 content pages and 40 blog articles, all submitted in the sitemap. The technical foundation is genuinely good, and that is worth stating plainly before the problems: every page is server-rendered (H1, prices, Product schema and add-to-cart all present in the raw Googlebot HTML), canonicalisation is correct across parameters and pagination, redirects resolve cleanly to the www host, product pages carry complete Product schema including aggregateRating, and the homepage carries four schema types — more than any of the three competitors measured. This is not a broken site. It is a well-built site with one very expensive problem sitting on top of it.

That problem is mobile. Desktop scores 82 with an LCP of 1.8s; the same page on mobile scores 35 with an LCP of 29.9s — a 16× gap on the metric Google actually ranks on. The cause is not the server (the root document responds in 10ms) and not the images (Shopify's CDN correctly negotiates AVIF — the hero returns content-type: image/avif at 12KB when asked for it). It is third-party JavaScript: 164 third-party requests totalling 4,814 KB, which is 52% of the 9,274 KB page. A single app — Privy — accounts for 27 requests and 2,111 KB. On top of that, Google's own tags are loaded multiple times: gtag/js?id=G-TWY8KMWR3Q is fetched three times at 190KB each and AW-826433674 three times at 160KB, roughly 700KB of pure duplicate analytics payload. Total blocking time is 5,630ms and JavaScript bootup alone is 24.0s.

Compounding that, the hero image that is the LCP element is lazy-loaded. Across the homepage's raw HTML there are 371 images with loading="lazy", zero with loading="eager", and zero preload image hints. The browser is explicitly instructed to defer the one image it is being graded on. That single attribute is a large share of the 29.9s figure and is a same-day fix.

The second constraint is that Rinfit has a content asset it is not using. There are 40 blog articles in the sitemap, organised under 20+ topic tags, covering exactly the queries this category is searched with — ring sizing, ring avulsion safety, proposal ideas. The blog is completely orphaned: counting links to /blogs/* from the homepage, /collections/all and /pages/about-us returns zero on all three. It is absent from the main navigation. The hub page itself is titled "News" — four characters — with an empty meta description. Forty articles of genuine topical authority receive no internal link equity and describe themselves to Google as "News".

The third constraint is authority, and it explains ranking position more than anything else here. Rinfit's Open PageRank is 1.95 (global rank 47,713,068). Groove Life is 4.22 (rank 278,209), QALO 4.09 (557,590), Enso Rings 3.80 (1,508,069). Rinfit sits roughly two full points below every direct competitor on a logarithmic scale — that gap is the single largest structural handicap in this audit, and unlike everything else here it cannot be fixed in the theme. Finally the cheap wins: 43 homepage images have no alt (the only failing Lighthouse SEO audit, and the reason SEO scores 92 rather than 100), collection titles run far under length — /collections/best-sellers is 19 characters — and no page anywhere carries FAQPage schema despite the site having obvious FAQ content.

Top 3 quick wins

  1. Add loading="eager" + fetchpriority="high" + a preload hint to the hero image and remove it from the lazy-load loop — the largest single lever on a 29.9s mobile LCP.
  2. Delete the duplicate GA4 and Google Ads tag injections (three copies each) — recovers roughly 700KB and a meaningful slice of the 5,630ms blocking time, with zero change to tracking behaviour.
  3. Retitle the blog hub from News to a keyword-bearing title, write its missing meta description, and link the blog from the main nav and footer — unlocks 40 already-written articles.

Score Dashboard

7
Critical
13
Warnings
14
Good
35
Performance Mobile
LCP 29.9s · CLS 0.029
82
Performance Desktop
LCP 1.8s · CLS 0.037
92
Lighthouse SEO
only failure: image-alt
1.95
Domain Authority
Open PageRank · rank 47.7M
227
URLs in Sitemap
129 products · 40 blog

Site Information

www.rinfit.com
Canonical Host
Shopify
Platform
Prestige 10.11.1
Ecommerce
Site Type
DTC silicone rings
12
Pages Audited
home, collections, products, blog
Grade A
SSL (Qualys)
A+ achievable
Server-rendered
Rendering
no SPA framework
Domain, Indexation & Crawl
0. Domain Authority & Index Status
Source: Open PageRank, Qualys SSL Labs, sitemap · Data only
Critical
Issues to Fix
🔴 Domain authority is two points below every direct competitor

Open PageRank for rinfit.com is 1.95, global rank 47,713,068. Measured the same day: groovelife.com 4.22 (rank 278,209), qalo.com 4.09 (557,590), ensorings.com 3.80 (1,508,069). Open PageRank is logarithmic, so a 1.95 → 4.09 gap is not incremental — it is the dominant reason competitors outrank Rinfit on shared head terms regardless of on-page quality. This is a link-acquisition problem, not a theme problem, and it is the one item in this audit that cannot be fixed in code.

PRIORITY: CRITICAL · LONG-TERM

⚠️ SSL grade A, not A+

Qualys SSL Labs returns grade A (trust-ignored also A). The gap to A+ is the HSTS policy: the response sends strict-transport-security: max-age=7889238 — about 91 days. A+ requires max-age of at least one year (31536000). Platform-level setting, low effort.

PRIORITY: MEDIUM

What's Done Right
✅ Sitemap coverage is complete and segmented

227 URLs across four child sitemaps: 129 products, 38 collections, 20 pages, 40 blog articles. The product sitemap carries image:title on 128 of 129 entries — image metadata Google can use for Image Search.

✅ Agentic-commerce discovery is live

/agents.md returns 200 and robots.txt advertises a UCP/MCP endpoint. Rinfit is already discoverable by AI shopping agents — ahead of most DTC stores on a surface that is starting to matter.

Note on indexed-page count: Google, Bing and DuckDuckGo all served bot-verification challenges to this audit's IP, so a site: count could not be measured reliably and none is claimed here. The 227 figure above is the submitted sitemap count, which is verified. Confirm the true indexed number in Google Search Console → Pages. Google Safe Browsing could not be queried either (the API key is not authorised for that service); no malware or phishing signal was observed on any page loaded during this audit.

1. Crawlability & Indexation
robots.txt, sitemap.xml, canonical, hreflang · Data only
Good
Issues to Fix
⚠️ No hreflang, and no localisation declared

Zero rel="alternate" hreflang tags on any page, while robots.txt is full of /*/collections/-style rules that exist to handle Shopify Markets locale prefixes. If Rinfit sells outside the US today this is a real gap; if it does not, the current state is correct and this only becomes a task when international selling starts.

PRIORITY: LOW · CONDITIONAL

What's Done Right
✅ robots.txt is correct and crawl-trap-aware

Explicitly blocks /cart/, /checkout, /account, /services, and — importantly — faceted crawl traps: /collections/*sort_by*, /collections/*filter*&*filter*, and +/%2B tag-combination URLs. The sitemap is declared at the bottom.

✅ Canonical and language declared on every page checked

All 12 pages audited return a self-referencing canonical and <html lang="en">. No stray noindex was found on any commercial page.

14. Redirects & Canonicalisation
Host, protocol, trailing slash, parameters, pagination · Data only
Good
Issues to Fix
⚠️ http://rinfit.com resolves through a two-hop redirect chain

Measured with curl -L: http://rinfit.com/ → 2 redirects → https://www.rinfit.com/. Every other entry point is a single hop (https://rinfit.com/ → 1, http://www.rinfit.com/ → 1). Chains leak a little crawl budget and add latency for anyone typing the bare domain. Collapsing to a single 301 is an edge-rule change.

PRIORITY: MEDIUM · QUICK WIN

What's Done Right
✅ Parameter handling is textbook

?sort_by=price-ascending canonicalises to the clean collection URL. ?variant=12345 canonicalises to the clean URL. Neither creates an indexable duplicate.

✅ Pagination follows current best practice

/collections/shop-all?page=2 self-canonicalises and emits rel="prev" / rel="next". This is the correct modern pattern — page 2 stays indexable in its own right rather than being canonicalised away.

✅ Trailing slash and 404 both handled

/pages/about-us/ returns 200 but canonicalises to the non-slash URL, so no duplicate is created. A non-existent collection returns a genuine 404, not a soft-200.

15. JavaScript SEO & Rendering
Raw Googlebot HTML vs rendered DOM · Data only
Warning
Issues to Fix
🔴 The LCP image is lazy-loaded and never preloaded

In the homepage's raw HTML: 371 loading="lazy", 0 loading="eager", 0 preload image hints, and only 2 fetchpriority="high". The hero banner that Lighthouse measures as the Largest Contentful Paint sits inside that lazy set, so the browser defers the single resource it is being graded on. Fix: mark the first hero slide loading="eager" fetchpriority="high", add a matching preload, and exclude it from the theme's lazy loop.

PRIORITY: CRITICAL · QUICK WIN

What's Done Right
✅ Fully server-rendered — nothing hidden behind JS

Fetched /products/silicone-ring-for-men-black with a Googlebot user-agent: 1 <h1>, prices present as "price":1999, 4 JSON-LD blocks, and add-to-cart markup — all in the raw response. No __NEXT_DATA__, no __NUXT__, no data-reactroot. Google does not need to execute JavaScript to read this store.

✅ Standard, maintainable theme base

Shopify.theme reports Prestige 10.11.1. A supported Theme-Store base means the performance fixes below are template edits, not a rebuild.

On-Page & Structured Data
2. Meta Tags — Homepage
Page: / · Viewport: desktop 1440×900
Warning
Rinfit homepage — current state, desktop
Issues to Fix
⚠️ Title uses 47 of ~60 available characters

Current (47): Rinfit™ Silicone Rings | Designed for Real Life. It is brand-first and leaves ~13 characters of SERP real estate unused — space that could carry a qualifier the category is actually searched with. Competitors use 55–70. Suggested (59): Silicone Wedding Rings for Men & Women | Rinfit™.

PRIORITY: MEDIUM · QUICK WIN

⚠️ Meta description is 133 characters with no call to action

Current (133): Discover Rinfit™ silicone rings: patented styles, flexible comfort, and modern designs. Perfect for work, fitness, and everyday wear.. It describes but never asks. 27 characters spare — enough for the trust proof the brand already owns ("1M+ rings sold", "lifetime warranty") plus a CTA.

PRIORITY: MEDIUM · QUICK WIN

⚠️ Flat heading structure — 17 H2s, zero H3s

The homepage emits H1 then 17 consecutive H2s and no H3 at any point. Section headers and individual product-card titles all sit at the same level, so nothing signals which blocks are sections and which are items within them.

PRIORITY: LOW

What's Done Right
✅ Exactly one H1, keyword-bearing

Silicone Wedding Rings - Designed for Real Life — single H1, present in raw HTML, and it carries the commercial term ("silicone wedding rings") that the title tag itself omits.

✅ Social and icon metadata complete

og:title, og:description, og:image (2048px), og:type, twitter:card=summary_large_image and a favicon are all present. Shared links render correctly.

✅ Viewport allows user zoom

maximum-scale=5.0 rather than the accessibility-hostile 1.0 — pinch-zoom works.

3. Meta Tags — Collections, Products & Blog
11 inner pages fetched with a Googlebot user-agent
Critical
Rinfit Best Sellers collection page — current state
PageTitleTitle lenMeta desc lenH1 countRaw words
/blogs/newsNews401707
/collections/best-sellersRinfit Best Sellers1914011,349
/collections/silicone-ringsRinfit Quality Silicone Rings2914411,463
/collections/men-ringsSilicone Rings For Men | Rinfit311551628
/pages/about-usABOUT US | Rinfit Quality Silicone Rings401451778
/products/womens-surprise-ringWomen's Surprise Silicone Ring | Rinfit391221949
/products/silicone-ring-for-men-blackSilicone Ring for Men- Black - LIFETIME WARRANTY! | Rinfit Design6515512,773
/products/new-heart-frameNEW! Heart Frame Collection - Women's Silicone Rings with Metal Heart7315511,574
/blogs/news/measure-silicone-ring-sizeHow to Measure Your Silicone Ring Size | Rinfit Silicone Rings621401895
Issues to Fix
🔴 The blog hub is titled "News" with no meta description

/blogs/news — title is 4 characters, meta description is 0 characters. This page is the entry point to 40 articles and 20+ topic tags. As written it competes for the word "news" and tells Google nothing about the site. Suggested title (51): Silicone Ring Guides: Sizing, Care & Safety | Rinfit, plus a 150–160 character description built from the existing tag taxonomy.

PRIORITY: CRITICAL · QUICK WIN

🔴 Collection titles are 19–31 characters and brand-led

/collections/best-sellers is 19 characters ("Rinfit Best Sellers") — a commercial landing page using a third of the available SERP width and containing no product noun at all. /collections/silicone-rings is 29 ("Rinfit Quality Silicone Rings"), leading with the brand rather than the term being searched. Rewrite all 38 collection titles keyword-first, brand-last: e.g. Best Selling Silicone Rings for Men & Women | Rinfit (52).

PRIORITY: CRITICAL

⚠️ Two product-page outliers in opposite directions

/products/new-heart-frame runs 73 characters — Google truncates around 60, so "with Metal Heart" is cut. /products/womens-surprise-ring is 39 chars with a 122-char description — both short. The other two products sampled sit correctly at 65/155 and 70/155, so this is catalogue inconsistency rather than a template fault.

PRIORITY: MEDIUM

⚠️ /collections/men-rings is thin at 628 raw words

Less than half the content of the sibling collections (1,349–1,463 words) despite targeting "silicone rings for men" — one of the highest-volume commercial terms in this category. The H1 is also just MEN RINGS, which is not a phrase anyone searches.

PRIORITY: MEDIUM

What's Done Right
✅ Every page has exactly one H1 and a correct canonical

All 11 inner pages return exactly one <h1> and a self-referencing canonical matching the fetched URL. No duplicate-H1 or cross-canonical errors anywhere in the sample.

✅ Product meta descriptions are consistently well-sized

Three of four products sampled hit 155 characters — effectively the ideal length. The product template is doing its job; the gaps are at collection and blog level.

✅ Blog articles themselves are properly optimised

/blogs/news/measure-silicone-ring-size: 62-char title, 140-char description, 895 words, Article schema. The articles are well-built — which is exactly what makes the orphaning in Block 5 so costly.

✅ All titles unique across the sample

No duplicate title tags found across homepage, four collections, four products, blog hub and blog article.

4. Structured Data
JSON-LD parsed from raw HTML across page types
Warning
Issues to Fix
⚠️ No FAQPage schema anywhere on the site

Zero FAQPage blocks across all 12 pages audited. Rinfit has the source material — sizing, warranty, material safety, ring avulsion — and this category's SERPs are full of question-shaped queries. FAQPage markup is one of the few remaining ways to occupy extra vertical space in a result.

PRIORITY: MEDIUM

⚠️ Store schema declares hours and a phone the site never shows

The homepage emits a Store entity with address, telephone, priceRange and openingHours. But no phone number, address or tel: link is visible anywhere on the homepage (Block 12). Structured data asserting a walk-in storefront that a national DTC brand does not operate is a mismatch risk — either surface the NAP on-site or switch the entity to OnlineStore.

PRIORITY: MEDIUM

⚠️ Collection pages carry no ItemList

Collections emit CollectionPage + BreadcrumbList only. Adding ItemList with the product set lets Google associate the individual products with the category page explicitly rather than inferring it.

PRIORITY: LOW

⚠️ Product schema has aggregateRating but no review nodes

All four products sampled include aggregateRating — good — but none embed individual review objects, while Loox is installed and actively collecting them. Passing a handful of reviews into the markup strengthens the rating's credibility.

PRIORITY: LOW

What's Done Right
✅ Product schema is complete on every product checked

4 of 4 products: name, image, description, sku, brand, offers and aggregateRating — the full set required for rich product results with stars and price.

✅ Richer homepage markup than all three competitors

Rinfit emits four entities (Organization, WebSite, Store, BreadcrumbList). QALO emits one (WebPage), Enso Rings two, Groove Life three. WebSite carries potentialAction, enabling a sitelinks search box.

✅ Article schema on blog posts, BreadcrumbList everywhere

Article present on blog posts; BreadcrumbList on every single page type audited. No JSON-LD parse errors on any page.

7. URL Structure
All audited URLs and the product sitemap · Data only
Good
Issues to Fix
⚠️ A few legacy product slugs carry build artefacts

The product sitemap contains slugs such as /products/copy-of-couture-collection-by-rinfit-3-rings-set-silicone-rings-for-women-size-4-10 — a copy-of- prefix left over from a duplicated product, at 88 characters. Cosmetic rather than damaging, but copy-of- in a public URL reads as unfinished. Change with a 301 only if the page has meaningful traffic.

PRIORITY: LOW

What's Done Right
✅ Clean, lowercase, hyphenated, readable

No uppercase characters, no underscores, no query-string IDs in any canonical path. Shopify's /collections/ and /products/ structure keeps crawl depth at 2–3 clicks from the homepage.

✅ HTTPS enforced and canonical host consistent

Every entry point terminates at https://www.rinfit.com. Shopify reports the reason explicitly in the response header: x-redirect-reason: canonical_host_redirection.

16. Duplicate Content & Keyword Cannibalisation
Homepage, 3 collections, 4 products, blog · Data only
Warning
Issues to Fix
⚠️ Three URLs compete for "silicone rings"

The homepage (H1: Silicone Wedding Rings), /collections/silicone-rings (H1: SILICONE RINGS) and /collections/shop-all all target the same head term with no differentiation in title or H1. Google will pick one, and it may not be the one Rinfit wants ranking. Assign each a distinct intent — homepage = brand, /collections/silicone-rings = the category term, /collections/shop-all = full catalogue with a clearly distinct title or a noindex.

PRIORITY: MEDIUM

What's Done Right
✅ No parameter-generated duplicates in the index path

Sort and variant parameters canonicalise to the clean URL, and robots.txt blocks filter-combination crawl traps. The classic Shopify faceted-duplication problem does not exist here.

✅ No duplicate titles across the audited set

All nine titles in the Block 3 table are distinct, and every page self-canonicalises correctly.

Architecture, Images & Mobile
5. Internal Linking & Architecture
Pages: / and /blogs/news · Link graph counted in raw HTML
Critical
Current — blog hub, titled "News", absent from nav Rinfit blog hub — current state
Optimized — current vs rewritten snippet in search SERP preview: current bare 'News' snippet versus an optimized blog hub snippet
Issues to Fix
🔴 The entire blog is orphaned — 40 articles, zero inbound internal links

Counting href values matching /blogs/ in the raw HTML of three key pages: homepage 0, /collections/all 0, /pages/about-us 0. The hub itself contains 64 internal blog links, so the cluster is well-connected internally — but nothing on the commercial site links into it. The main navigation (Shop · Best Sellers · Reviews · Size Guide · Company · Contact Us) has no Blog entry, visible in the screenshots. Forty articles carrying topical authority for exactly this category receive no link equity and are reachable only via the sitemap.

PRIORITY: CRITICAL · HIGH IMPACT

⚠️ No visible breadcrumbs, despite BreadcrumbList schema on every page

BreadcrumbList JSON-LD is emitted site-wide, but no breadcrumb element renders in the DOM on the homepage or collection pages. The markup asserts a navigational path that users cannot see and that Google cannot corroborate on-page.

PRIORITY: MEDIUM

⚠️ 4 internal links have no anchor text

Four <a> elements on the homepage contain neither text nor an alt-bearing image, passing no relevance signal to their destination.

PRIORITY: LOW

What's Done Right
✅ Strong commercial internal-link surface

252 links on the homepage — 246 internal, 81 unique destinations, including 22 distinct collection URLs. Every collection is reachable in one click from the homepage.

✅ The blog's own taxonomy is well-built

The hub organises 40 articles under 20+ topic tags — Care for your silicone ring, Engagement Rings, Ring Chart, Silicone Ring Size. This is a ready-made topic-cluster structure; it only needs linking from the commercial pages to start working.

6. Image Optimization
Page: / · 495 images in the rendered DOM
Warning
Issues to Fix
🔴 43 images have no alt text — the only failing Lighthouse SEO audit

43 of 495 rendered images have a missing or empty alt (42 of 493 in raw HTML). This is the single reason the Lighthouse SEO category scores 92 instead of 100 on both mobile and desktop — image-alt is the only failure in the category. The fix is mechanical and also closes an accessibility gap.

PRIORITY: CRITICAL · QUICK WIN

⚠️ A 777KB animated GIF is being used as the mobile banner

Banner_29_Mobile_1.gif weighs 777KB — the largest single image on the page and heavier than any of the videos. GIF cannot be AVIF-converted by the CDN, so it bypasses the otherwise-working image pipeline entirely. Re-encoding as a muted autoplay MP4/WebM typically lands under 100KB for the same animation.

PRIORITY: MEDIUM · QUICK WIN

⚠️ 495 images on one page — 4.4× the nearest competitor

Rinfit's homepage carries 493 <img> tags in raw HTML. Groove Life: 111. Enso Rings: 89. QALO: 51. Even fully lazy-loaded, every one costs HTML bytes, DOM nodes and layout work — a direct contributor to the 36.5s of main-thread time in Block 9. Audit which merchandising sections actually earn their place.

PRIORITY: MEDIUM

⚠️ 10 images render without explicit dimensions

10 of 495 declare neither width nor height. CLS is currently healthy (0.029 mobile), so this is preventative rather than urgent.

PRIORITY: LOW

What's Done Right
✅ Modern formats are already being served — verified directly

File extensions read .jpg, which looks like a problem but is not. Requesting the hero with Accept: image/webp,image/avif returns content-type: image/avif at 12,356 bytes, versus image/jpeg at 14,548 bytes without the header. Shopify's CDN is negotiating AVIF correctly — no image-format conversion work is needed.

✅ Lazy loading is implemented at scale

363 of 495 rendered images use native loading="lazy". The mechanism is right — the flaw is that it is applied to the LCP hero as well (Block 15).

✅ Image metadata present in the sitemap

128 of 129 product sitemap entries carry image:title, giving Google captions for Image Search.

8. Mobile SEO
Page: / · Viewport: 390×844
Warning
Rinfit homepage — current state, mobile 390×844
Issues to Fix
⚠️ 154 of 359 tap targets are under 44×44px

43% of interactive elements measured at 390px width fall below the 44px minimum recommended for touch, concentrated in product-card links, colour swatches and footer navigation. Not an indexing issue, but it is a mobile-usability signal on a site where mobile is already the weak surface.

PRIORITY: MEDIUM

What's Done Right
✅ No horizontal overflow

At 390px, document.body.scrollWidth = 390 and window.innerWidth = 390 — an exact match. Nothing breaks the viewport.

✅ Viewport meta correct and responsive layout holds

width=device-width declared; hero, navigation and product grid all reflow correctly, as the screenshot shows.

Speed, Security & Content
9. Page Speed & Core Web Vitals
Lighthouse 13.4.0 lab run against https://www.rinfit.com/
Critical
MetricMobileDesktopTarget
Performance score358270+ / 90+
Largest Contentful Paint29.9 s1.8 s< 2.5 s
Total Blocking Time5,630 ms110 ms< 200 ms
Cumulative Layout Shift0.0290.037< 0.1
Speed Index36.1 s4.7 s< 3.4 s
Time to Interactive45.7 s6.6 s< 3.8 s
JavaScript bootup time24.0 s2.7 s< 2 s
Main-thread work36.5 s6.0 s< 4 s
Total page weight9,274 KB7,770 KB< 2,000 KB
Server response (TTFB)10 ms10 ms< 600 ms
Lighthouse SEO score9292100
Best Practices score545490+
Issues to Fix
🔴 Mobile LCP is 29.9s against a 2.5s threshold

Mobile scores 35; the identical page scores 82 on desktop with a 1.8s LCP. The delta is entirely CPU and JavaScript under mobile throttling: 24.0s of script bootup and 36.5s of main-thread work. Time to Interactive is 45.7s — on a real phone the page is visually present but unresponsive for most of a minute.

PRIORITY: CRITICAL

🔴 Third-party JavaScript is 52% of the page — Privy alone is 2.1MB

Breakdown: 164 third-party requests, 4,814 KB of a 9,274 KB page. Scripts overall: 90 requests, 4,465 KB. The largest single contributor is Privy — 27 requests totalling 2,111 KB, including one widget.js at 850KB plus bundles at 460KB and 315KB. A popup app is consuming roughly a quarter of the entire page budget. Either defer it until after first interaction or replace it with a lighter capture tool.

PRIORITY: CRITICAL

🔴 Google tags are loaded three times each — ~700KB of duplication

The network log shows googletagmanager.com/gtag/js?id=G-TWY8KMWR3Q fetched at 190KB, AW-826433674 at 160KB, plus GT-57S4SVG at 149KB — about 1,049 KB of Google tag payload where roughly 350KB would do. This is the classic Shopify symptom of the same GA4/Ads IDs installed via the native Shopify channel, GTM, and a hardcoded theme snippet simultaneously. recaptcha__en.js (347KB) is also requested . Removing the duplicates changes no tracking behaviour.

PRIORITY: CRITICAL · QUICK WIN

⚠️ 1.5MB of video autoloading on the homepage

Eight video files totalling 1,573 KB load as part of the initial homepage payload (largest 288KB). Combined with the 777KB GIF, media alone accounts for ~2.3MB before a single product image is counted.

PRIORITY: MEDIUM

⚠️ Analytics beacons firing in tight loops

Shopify's monorail/produce_batch endpoint is called 19× in a single page load, otlp…/v1/metrics , clarity.ms/collect , otlp…/v1/logs . Individually small, but roughly 42 extra round-trips competing with content for the mobile network and main thread.

PRIORITY: LOW

What's Done Right
✅ Server response is excellent — the backend is not the problem

Root document TTFB is 10ms on both runs. Shopify's infrastructure and the Cloudflare edge are doing their job; every second of delay measured here is added client-side by the theme and its apps. That is what makes all of this fixable without a platform change.

✅ Layout stability is genuinely good

CLS is 0.029 mobile / 0.037 desktop against a 0.1 threshold — comfortably passing, and unusual for a page this heavy. First Contentful Paint is 1.1s mobile / 0.6s desktop, so initial render is fast; it is interactivity that collapses.

✅ Desktop Core Web Vitals pass

Desktop LCP 1.8s, TBT 110ms, CLS 0.037 — all three within threshold. Desktop visitors get a fast experience today.

Measured with Lighthouse 13.4.0 in local headless Chrome (mobile preset with standard throttling; desktop preset). The Google PageSpeed Insights API returned quota and authorisation errors for this project on the audit date, so lab data was generated directly rather than via the API. CrUX field data (real-user Core Web Vitals) is not included for the same reason — verify it in Google Search Console → Core Web Vitals, where it may differ from these lab figures.

10. Security & Technical
Response headers, TLS, third-party surface
Warning
Issues to Fix
⚠️ 16 distinct third-party script hosts

Counted on the homepage: googletagmanager, connect.facebook.net, analytics.tiktok.com, clarity.ms, s.adroll.com, assets1.adroll.com, d.adroll.com, shopify.privy.com, loox.io, api.socialsnowball.io, cdn.codeblackbelt.com, gstatic.com, shop.app, cdn.jsdelivr.net and more. Well past the 10-host threshold where third-party cost becomes the dominant performance factor. AdRoll alone spans three hostnames.

PRIORITY: MEDIUM

⚠️ Best Practices score 54

Lighthouse flags third-party cookies, deprecated API usage, image aspect-ratio mismatches and logged console issues. Not a direct ranking factor, but third-party cookie deprecation will degrade the retargeting stack this site leans on heavily.

PRIORITY: MEDIUM

⚠️ HSTS max-age is 91 days

strict-transport-security: max-age=7889238. Raising it to 31536000 (one year) is what moves the Qualys grade from A to A+ (see Block 0).

PRIORITY: MEDIUM · QUICK WIN

What's Done Right
✅ Security headers are comprehensive

content-security-policy: block-all-mixed-content; frame-ancestors 'none'; upgrade-insecure-requests, plus x-frame-options: DENY, x-content-type-options: nosniff, x-xss-protection, x-permitted-cross-domain-policies: none and HSTS. A stronger header set than most Shopify stores ship with.

✅ Zero mixed content

No http:// images, scripts or stylesheets anywhere in the rendered DOM. HTTPS is clean end to end.

✅ Analytics coverage is complete

GTM, GA4, Google Ads, Meta Pixel, TikTok Pixel and Microsoft Clarity are all installed and firing. Measurement is not a gap here — consolidation is (Block 9).

11. Content Quality & E-E-A-T
Homepage, About page, blog · Trust signal inventory
Warning
Issues to Fix
🔴 Real expertise signals exist but are invisible to search

The About page states Rinfit is a female-founded brand started in 2015, and the homepage carries an "Over 1M Rings Sold" section. Neither fact appears in the homepage title, the meta description, or any structured data. Meanwhile 40 articles on ring sizing, ring avulsion and ring care — the substance behind the expertise claim — sit orphaned (Block 5). E-E-A-T here is a packaging problem, not a substance problem.

PRIORITY: CRITICAL

⚠️ No author attribution on blog articles

Articles carry Article schema but no visible author byline or credentials. For safety-adjacent topics like ring avulsion, an attributed author materially strengthens the trust signal.

PRIORITY: MEDIUM

⚠️ About page is 778 words for a ten-year-old brand

Thin for the page carrying the brand's entire credibility story — patents, materials, warranty and founder narrative are all available and mostly unused.

PRIORITY: LOW

What's Done Right
✅ Full trust-page set present

About, Contact, Privacy and social profiles are all linked from the homepage; sameAs in Organization schema connects the brand to its social identities.

✅ Review infrastructure live and feeding schema

Loox is installed, a Reviews link sits in the main navigation, and aggregateRating flows into Product schema on every product checked.

✅ Deepest homepage content among competitors

3,315 raw words versus Groove Life 1,873, Enso Rings 1,040, QALO 587. Rinfit has the most substantive homepage in its competitive set.

12. Local SEO
NAP, map, LocalBusiness signals · Largely N/A for national DTC
Good
Issues to Fix
⚠️ Structured data claims a physical storefront the site does not show

The Store entity declares address, telephone and openingHours, but the homepage renders no address element, no tel: link and no map embed. For a national DTC brand with no walk-in retail this markup should be OnlineStore or plain Organization; if there is a real location, surface the NAP on-site so the claim is corroborated.

PRIORITY: MEDIUM

What's Done Right
✅ Contactability is covered for the business model

A Contact Us page is linked from the main navigation, and Organization schema includes a contactPoint. For a nationally-shipping DTC store, local-pack optimisation is not a relevant channel — no work is needed here beyond the schema correction opposite.

Competitors & SERP
13. Competitor Snapshot
Homepages fetched and parsed the same day · Authority via Open PageRank
Critical
SiteAuthorityTitle (chars)Meta desc (chars)Raw wordsSchema typesImages
rinfit.com1.95471333,3154493
groovelife.com4.22551411,8733111
qalo.com4.0970166587151
ensorings.com3.80571321,040289
Issues to Fix
🔴 The authority gap is the binding constraint on rankings

Rinfit 1.95 versus Groove Life 4.22, QALO 4.09, Enso Rings 3.80. In global rank terms that is 47,713,068 against 278,209 / 557,590 / 1,508,069. No amount of on-page work closes a gap this size — it requires sustained digital PR and link acquisition. The 40 orphaned blog articles are the most obvious existing asset to build that programme around.

PRIORITY: CRITICAL · LONG-TERM

⚠️ Shortest title and meta description in the set

Rinfit's 47-character title is the shortest of the four; its 133-character description is tied shortest. QALO uses 70 and 166. Rinfit is voluntarily surrendering SERP width to competitors who already outrank it.

PRIORITY: MEDIUM

⚠️ 4.4× more homepage images than the nearest competitor

493 versus 111 / 89 / 51. Rinfit's homepage HTML is 1,402 KB — comparable to Enso Rings' 1,887 KB, but Enso achieves it with 89 images. The image count is a structural outlier and feeds directly into the Block 9 main-thread problem.

PRIORITY: MEDIUM

What's Done Right
✅ Best structured data in the competitive set

4 schema entities versus 3 / 2 / 1. Rinfit is the only site of the four emitting both Organization and WebSite with potentialAction.

✅ Most content-rich homepage in the set

3,315 raw words — 1.8× Groove Life, 3.2× Enso Rings, 5.6× QALO. Combined with 129 products and 40 articles, Rinfit has more indexable substance than its competitors; the constraint is authority and internal linking, not content volume.

Live SERP-position data could not be captured: Google, Bing and DuckDuckGo all returned bot-verification challenges to this audit's IP, and no ranking positions are claimed here. The comparison above is built from directly-fetched competitor homepages and Open PageRank (dataset last updated 28 Mar 2026), both of which are verifiable. For ranking positions by keyword, pull Google Search Console → Performance.

Priority Action Plan

Quick wins — this week

  1. Set hero image to eager + fetchpriority high + preloadBlock 15 · critical
  2. Remove duplicate GA4 / Google Ads tag injections (3× each)Block 9 · critical
  3. Add alt text to the 43 images missing itBlock 6 · critical
  4. Retitle /blogs/news and write its meta descriptionBlock 3 · critical
  5. Raise HSTS max-age to 31536000Block 10 · medium

Short-term — 2–4 weeks

  1. Defer or replace Privy (2,111 KB across 27 requests)Block 9 · critical
  2. Add Blog to main nav and footer; link articles from collectionsBlock 5 · critical
  3. Rewrite all 38 collection titles keyword-firstBlock 3 · critical
  4. Replace the 777KB GIF banner with muted MP4/WebMBlock 6 · medium
  5. Flatten the http://rinfit.com two-hop redirectBlock 14 · medium

Medium-term — 1–3 months

  1. Third-party script audit: 16 hosts, 4,814 KBBlock 10 · medium
  2. Add FAQPage schema to product and guide pagesBlock 4 · medium
  3. Fix the Store → OnlineStore schema mismatchBlock 12 · medium
  4. Resolve "silicone rings" cannibalisation across 3 URLsBlock 16 · medium
  5. Expand /collections/men-rings beyond 628 wordsBlock 3 · medium
  6. Enlarge the 154 sub-44px tap targetsBlock 8 · medium

Long-term

  1. Link-acquisition programme to close the 1.95 → 4.0 authority gapBlock 0 / 13 · critical
  2. Build topic clusters from the 40 existing articlesBlock 5 · strategic
  3. Reduce homepage from 493 images toward competitor normsBlock 6 · medium
  4. Author bylines and credentials on all articlesBlock 11 · medium
  5. hreflang if international selling beginsBlock 1 · conditional
Implementation Estimate — Fixed Price
Critical Priority
Mobile performance, orphaned content and commercial metadata — ship these first.
BlockTaskCategoryFixed Price
15Hero LCP fix — eager loading, fetchpriority, preload hint, exclude from lazy loopPerformance$120
9Remove triplicate GA4 / Google Ads / reCAPTCHA injections, consolidate to one tag sourcePerformance$100
9Privy audit — defer to post-interaction or replace with a lighter capture tool (2,111 KB)Performance$250
6Add descriptive alt text to 43 homepage images (closes the only Lighthouse SEO failure)On-page$100
5De-orphan the blog — nav and footer entries, related-article modules on collections and productsArchitecture$140
3Blog hub title and meta description, plus article-template meta reviewOn-page$70
3Rewrite 38 collection titles and meta descriptions keyword-firstOn-page$150
11Surface founded-2015 / 1M-rings-sold proof in metadata and Organization schemaE-E-A-T$60
0 / 13Authority gap — link-acquisition strategy, prospect list and outreach angles from the 40 articlesOff-page$150
Critical subtotal$1,140
Medium Priority
Payload reduction, schema accuracy and mobile usability.
BlockTaskCategoryFixed Price
6Re-encode the 777KB GIF banner as muted autoplay MP4/WebMPerformance$70
9Lazy-load or defer the 8 homepage videos (1,573 KB)Performance$70
2 / 13Expand homepage title to ~59 chars and meta description to 150–160 with a CTAOn-page$50
3Normalise product title and description outliers across the catalogueOn-page$70
4Add FAQPage schema to product, sizing and care pagesStructured data$90
4 / 12Correct Store → OnlineStore, remove unsupported openingHours and NAP claimsStructured data$50
5Render visible breadcrumbs on collection and product templatesArchitecture$80
10Third-party script audit across 16 hosts; address Best Practices failures (score 54)Performance$100
0 / 10Raise HSTS max-age to one year (unlocks SSL A+)Security$40
14Flatten the http://rinfit.com two-hop redirect to a single 301Technical$35
8Enlarge 154 sub-44px tap targets across cards, swatches and footerMobile UX$85
3Expand /collections/men-rings copy and rewrite its H1Content$75
16Resolve "silicone rings" cannibalisation across homepage / silicone-rings / shop-allStrategy$75
11Author bylines and credentials across blog articlesE-E-A-T$60
Medium subtotal$950
Low Priority
Refinements worth doing once the items above are shipped.
BlockTaskCategoryFixed Price
6 / 13Homepage image-count audit — reduce 493 images toward competitor normsPerformance$80
4Add ItemList to collections and review nodes to Product schemaStructured data$50
2Introduce H3 levels so the 17 flat H2s form a real hierarchyOn-page$45
11Expand the About page beyond 778 words with patent and warranty detailContent$55
9Reduce duplicate analytics beacon loops (monorail 19×, Clarity 8×)Performance$50
5 / 6Fix 4 empty anchor-text links and add explicit dimensions to 10 imagesTechnical$35
7Clean legacy copy-of- product slugs with 301s where traffic justifies itTechnical$40
1hreflang implementation — only if international selling beginsTechnical$55
Low subtotal$410
Total — All Priorities
$2,500