Rhafael CorpuzShopify & CRM automation · US, UK, AUBook a call
Case study · Shopify CRO

A CRO audit, built on a live storebefore Spring Racing.

A Sydney milliner sells more than 500 styles of designer headwear online. An outside CRO expert wrote the audit. I was hired to build it, with the first five fixes due within a week.

ClientDesigner milliner, Sydney
RoleCRO implementation, plus search, catalog, and SEO fixes
StackShopify, Liquid, JavaScript, reviews app, structured data
Shipped

The audit, built.

Each recommendation from the audit, with what changed and where it stands.

#RecommendationWhat changedStatus
01Cart pop-up straight to checkoutButton reads CHECKOUT; the cart page detour is gonedone
02Reassurance at the buy buttonFree returns, plus the made-in-Australia claim the client confirmeddone
03Sizing for headwearS 54 to 55 cm through XL 60 to 61 cm, replacing a face-mask chartdone
04Product reviewsReview requests that link to the product boughtdone
05Homepage testimonialsMatching the section shoppers see on product pagesdone
07Cross-sellsFill in automatically when a product has none setdone
09Homepage categoriesFascinators, Sun Hats, Race Day, Headbands, Earrings, Bagsdone
10BreadcrumbsOn collection and product pages, with structured datadone
+Collection swatchesOne card per style, colours as swatchesin review
Try the two biggest changes

Fewer steps to pay. Every colour in one card.

The cart pop-up

2clicks from add-to-cart to paying
Add to cartPop-upCHECKOUT
Under the button: free returns, and the made-in-Australia claim the client confirmed.

Collection swatches

in review
ONE STYLEWhite · 1 of 11

One card per style, colours in a single row with arrows, as the client asked. Colours shown are illustrative.

Under the hood

The snippet behind the swatches.

{%- comment -%} One card per style, colours as swatches {%- endcomment -%}
{%- assign style = product.metafields.custom.style.value -%}
<div class="style-card" data-style="{{ style.handle }}">
  {%- for colour in style.colours.value -%}
    <a class="swatch" href="{{ colour.product.value.url }}"
       style="--swatch: {{ colour.hex }}"
       aria-label="{{ colour.name }}"></a>
  {%- endfor -%}
</div>
snippets/style-card.liquid
1Styles live in a metaobject, so a hat sold in dozens of colours becomes one card instead of dozens.
2Every swatch is a real link, so Google still reaches and ranks each colour page.
3Screen readers hear the colour name, not “link”.
Simplified for reading. Client names and data removed.
Beyond the audit

Found by digging, not guessing.

FoundNumberWhat I did
Draft products invisible to every filterhundredsA tagging plan for new arrivals: category, occasion, colour, hat style
Search that didn’t narrow anything~92%Traced it to related-product matching and added category shortcuts
Tracking tags blocked by one speed app3Flagged that GA4, Google Ads, and the Meta pixel weren’t loading
Internal pages showing in Google2Hidden and marked no-index, plus article schema on every blog post