Demonstration sample. Kestrel Supply Co. is a fictional store.

Sample auditKestrel Supply Co. — Outdoor apparel and equipment · Shopify · ~340 SKUs

Every audit I deliver looks like this. Each finding located precisely, scored on revenue impact against effort, and explained in terms of what it costs you rather than what it is called.

I don't publish audits of real stores. This one uses an invented brand and a composite set of findings drawn from problems that recur across Shopify catalogues, so you can judge the method without a real merchant having their storefront picked apart in public.

Findings
34
Critical
5
High
11
Medium
14
Low
4

Reviewed: Homepage, three collection pages, four product pages, cart, checkout, search, 404. Turnaround five working days.

The findings ledger

The whole audit on one screen, grouped by area. Open any row for the full write-up: what I found, why it costs money, and how I'd fix it.

Critical High Medium Low

Performance and page weight5

What I found

The gallery on every product page renders all 22 images at full resolution on load, and the thumbnail strip beneath requests the same 22 files a second time rather than a derivative. Source files average 480 KB; six exceed 1.4 MB. Nothing below the first screen is deferred. Measured cold on a throttled 4G connection, the page transfers 11.2 MB and takes 8.4 seconds to become interactive.

Why this costs money

Your own analytics put 71% of sessions on mobile, and a substantial share arrive from paid social — traffic you have already paid for, landing on a page that asks them to wait. Load time and conversion move inversely across every retail dataset, and the effect is sharpest with exactly this audience: cold visitors with no brand loyalty to spend on patience.

This finding also distorts every other measurement you take. Until the page loads quickly, you cannot tell whether a merchandising change failed on its merits or because a third of the audience left before seeing it.

How I'd fix it

  • Load the first three gallery images eagerly and lazy-load the remaining nineteen.
  • Serve the thumbnail strip from a 120 px derivative rather than the full-resolution original.
  • Re-encode the catalogue to WebP with a 200 KB ceiling on the primary image and 120 KB on secondaries.
  • Set explicit width and height attributes so the layout stops shifting as images arrive.

Roughly a day of work. I would measure before and after on the same five templates so the result is attributable rather than assumed.

What I found

No image on the product template declares width or height. The browser cannot reserve space, so the buy button moves down the screen twice during load as the gallery and the recommendation strip resolve.

Why this costs money

A customer who reaches for Add to Cart while the page is still settling taps something else. That is not merely irritating; it is a mis-tap on the single element the entire page exists to serve, and it happens most on the slow mobile connections where patience is already thin.

How I'd fix it

  • Add width and height attributes to every image so aspect ratio is reserved before download.
  • Reserve fixed height for the recommendation strip so late-loading content cannot displace the buy button.
  • Track Cumulative Layout Shift as a standing metric rather than a one-off check.

What I found

Reviews, live chat, two analytics tags, a heatmap tool, an upsell app, a currency converter, a wishlist app, a back-in-stock widget, a popup tool and a social feed all load render-blocking in the document head. Combined, they add 1.9 seconds before your own code begins executing.

Why this costs money

Every app was installed to raise revenue, and collectively they are lowering it by delaying the page. Several are almost certainly redundant — you are running two analytics tags that measure overlapping things, and the social feed appears on a template nobody scrolls to.

How I'd fix it

  • Audit each app against its actual contribution; uninstall rather than disable, since disabled apps often leave code behind.
  • Defer everything non-essential to after first paint.
  • Consolidate the two analytics tags to one.
  • Set a standing rule: no new app ships without a before-and-after performance measurement.

What I found

The desktop hero references a file named for mobile use at 750 px wide, then stretches it across viewports up to 2560 px. It is both your Largest Contentful Paint element and visibly soft on any modern display.

Why this costs money

You pay twice: the hero looks low quality on the screens where your product photography should be doing the most work, and the LCP metric that Google uses as a ranking input is measured against a blurry asset.

How I'd fix it

  • Serve a responsive image set with correct breakpoints.
  • Preload the desktop hero so it resolves early rather than competing with gallery images.

What I found

Four font weights load from a third-party host with no font-display directive. On a slow connection, headings and body copy are invisible until the files arrive.

Why this costs money

Invisible text on arrival is the strongest possible signal that a site is broken. A visitor who sees a blank page for a second on a mobile connection frequently does not wait for the second second.

How I'd fix it

  • Set font-display: swap so text renders immediately in a fallback.
  • Self-host the fonts to remove a third-party dependency from the critical path.
  • Subset to the weights actually used — two of the four are referenced by fewer than five elements.

Product pages8

What I found

The size guide link beside the size selector points to a PDF on a path that no longer resolves. Desktop browsers show an error page; iOS Safari opens a blank tab with no message at all, so the customer cannot tell whether it failed or is still loading.

Why this costs money

Sizing is the single largest cause of both abandonment and returns in apparel, and this link is clicked at the exact moment a customer is trying to commit. A dead end there does not redirect them elsewhere on your site — it ends the session.

You also offer free returns, so every avoidable sizing error costs you twice: once in outbound postage and once inbound.

How I'd fix it

  • Replace the PDF with an in-page modal — no navigation, no new tab, no dependency on a file path.
  • Publish garment measurements per size in both inches and centimetres, not only body measurements.
  • Add model height and size worn to every product photograph.
  • For anything described as oversized or relaxed, state explicitly whether to size down.

What I found

Sold-out sizes and colourways are removed from the selector entirely. One jacket with seven colourways currently displays four, with nothing indicating the others exist.

Why this costs money

Hiding a sold-out variant looks tidy and costs you twice. The customer who wanted that colour concludes you never made it, so you lose the sale and the chance to capture them for its return. You also discard a scarcity signal you have already earned — a half-sold colour range is evidence the range is selling.

How I'd fix it

  • Keep sold-out options visible at around 40% opacity with a thin diagonal rule. Avoid an X, which reads as an error rather than a state.
  • Keep them clickable. On tap, show 'Sold out — email me when it's back' and capture the address.
  • Never dim so far that the colour becomes unreadable. The customer still needs to see what they missed.

This converts a dead end into a mailing list, which is the cheapest audience you will ever build.

What I found

You hold 1,840 reviews at a 4.6 average — genuinely strong social proof — placed beneath the fabric story, the sustainability panel, the care instructions and a lookbook carousel.

Why this costs money

Customers trust other customers more than they trust you, and the ordering of a page is an argument about what matters. Yours currently argues that your own marketing copy is more persuasive than 1,840 people who have already bought and used the product.

How I'd fix it

  • Surface the star rating and review count directly under the product title, linked to the full section.
  • Move three reviews to sit immediately below the buy button.
  • Sort by helpfulness rather than recency, and keep critical reviews visible — an unbroken wall of five stars reads as fabricated and converts worse than an honest 4.6.

What I found

Your returns policy is generous — 60 days, free postage, no reason required — and it appears only in the footer, four screens below the buy button.

Why this costs money

You are paying for a policy whose commercial benefit you are not collecting. The purpose of a generous returns policy is to remove hesitation at the moment of purchase, and it can only do that if it is visible at that moment.

How I'd fix it

  • One line directly beneath Add to Cart: free returns within 60 days, no reason needed.
  • Repeat it in the cart and at the first checkout step.
  • Do not place it inside an accordion. An accordion is where information goes to be ignored.

What I found

Several variants are down to single-figure stock, and the storefront gives no indication. Your inventory data supports the display; the theme simply does not use it.

Why this costs money

Genuine scarcity is one of the few urgency mechanics that is both effective and honest. You are already generating it and choosing not to communicate it — while, separately, running permanent discount banners, which is the urgency mechanic that does not work.

How I'd fix it

  • Show 'Only 3 left' below a threshold you set, driven by real inventory rather than a fixed number.
  • Never display a countdown timer that resets on refresh. One customer noticing that destroys trust permanently.

What I found

Fourteen products use the words 'oversized' or 'relaxed' in the title or description without defining what that means relative to a normal size. Six of those are also sold as unisex.

Why this costs money

Both words remove a customer's ability to reason from their usual size, and unisex removes it again. A woman who normally wears a medium has no way to judge a unisex oversized shell, and neither does a man between sizes. Uncertainty at that point produces either abandonment or a return.

How I'd fix it

  • Add a one-line fit note to each: what oversized means here, and whether to size down for a regular fit.
  • Include a comparison against a known reference garment where possible.

What I found

The Ridge Shell is reachable at both /products/ridge-shell and /products/ridge-shell-pre-order. The second still carries pre-order language although the product has been in general stock since February. Reviews and inbound links are split across the two.

Why this costs money

Split reviews, split search authority, and two pages that can drift apart in price or stock. A customer arriving at the older URL sees pre-order messaging for something you can ship today.

How I'd fix it

  • Establish which URL is canonical, 301 the other to it, and update every internal link.
  • Do this before any paid traffic points at either, because ad links to a retired URL are expensive to unpick later.

What I found

No Product schema is present on any product page. Price, availability and aggregate rating are all absent from the markup, despite all three being displayed on screen.

Why this costs money

Your listings in Google appear as plain links while competitors show price, stock status and a star rating. That is a visible difference in click-through rate on searches you already rank for — you are losing traffic you have already earned.

How I'd fix it

  • Add Product, Offer and AggregateRating schema driven by live theme data rather than hardcoded.
  • Validate through Google's Rich Results Test and monitor Search Console for enhancement errors.

Collections, navigation and discovery9

What I found

Outerwear lives at /collections/aw24-early-access, base layers at /collections/black-friday-thermals, and packs at /collections/summer-clearance-2024. All three are permanent year-round categories sitting on the URLs of finished promotions.

Why this costs money

Google reads URLs as a relevance signal, so your outerwear category competes on a term describing a promotion that ended eighteen months ago. The handles are also visible in the address bar and in every shared link, where they date your store.

How I'd fix it

  • Pull Search Console data first and rank all three by current organic traffic.
  • Rename least-trafficked first, each shipping with a 301 from the old handle in the same change.
  • Resubmit the sitemap and monitor impressions for a fortnight before proceeding to the next.

The caution matters more than the fix. Renaming a collection handle in Shopify does not create a redirect automatically. These URLs carry inbound links, paid traffic and affiliate tracking; renamed carelessly, this finding costs more to fix than to leave alone.

What I found

Searching 'waterproof', 'packable' and 'merino' each returns zero results, though matching products exist in all three cases. Your titles use 'weatherproof', 'fold-away' and 'wool blend' instead, and no synonyms are configured.

Why this costs money

Customers who use site search convert at several times the rate of those who browse, because they arrive already knowing what they want. A zero-result page served to your highest-intent segment is the most expensive empty screen on the store.

How I'd fix it

  • Configure synonym groups using the vocabulary customers actually type, taken from your own search logs.
  • Replace the empty state with best-sellers and a 'did you mean' suggestion rather than a dead end.
  • Review search terms monthly for the first quarter, then quarterly.

What I found

Filters exist for colour, price and category. There is no size filter anywhere, on a catalogue of 340 apparel SKUs across seven sizes.

Why this costs money

Size is the first question an apparel customer asks and the only one that can disqualify a purchase outright. A customer who wears XXL currently has to open products one at a time to discover which exist in their size, and most will not do that more than twice.

This disproportionately affects the sizes at the ends of your range — which are also the customers with the fewest alternatives and the strongest loyalty when someone stocks them.

How I'd fix it

  • Add faceted size filtering driven by variant inventory so it reflects what is actually purchasable.
  • Persist the selection across collections within a session.
  • Surface 'in your size' as a saved preference for logged-in customers.

What I found

The mobile menu opens to a list of six top-level categories, each of which expands to a sub-list, which then links to a collection. No product is reachable in fewer than three taps, and no best-seller or new-arrival shortcut exists anywhere in the drawer.

Why this costs money

With 71% of sessions on mobile, the navigation drawer is your primary storefront. Every additional tap between arrival and product loses a share of visitors, and the effect compounds with the slow load times in finding 01.

How I'd fix it

  • Add a 'Shop all' and a 'New in' link at the top level of the drawer.
  • Flatten the hierarchy: six categories with sub-lists is one level deeper than 340 SKUs requires.
  • Add featured product tiles directly in the drawer for the two categories that drive most revenue.

What I found

Every collection opens sorted A–Z. On the outerwear page this places an £18 accessory first and your best-selling jacket in position twenty-three.

Why this costs money

Alphabetical is the only sort order with no commercial intent whatsoever. The first row of a collection sets a customer's impression of your range and price position, and yours is currently set by the alphabet.

How I'd fix it

  • Default to best-selling, or to a manually curated order for your top three collections.
  • Use automated collection sorting so it maintains itself rather than requiring monthly attention.

What I found

'Jackets' and 'Outerwear' both point to /collections/aw24-early-access. A customer clicking the second expecting something different receives the first.

Why this costs money

Menu labels are promises. When two deliver the same thing, customers stop treating the menu as a filter and start scrolling instead — which disproportionately affects the high-intent shopper who knew exactly what they wanted.

How I'd fix it

  • Either build the distinct collection the second label promises, or consolidate the two labels.

What I found

Swatches on grid tiles render at 18 px with 2 px spacing. The recommended minimum touch target is 44 px, and adjacent targets need clear separation.

Why this costs money

A mis-tap on colour is a particularly costly error because the customer often does not discover it until the parcel arrives — at which point it becomes a return you pay for under your free returns policy.

How I'd fix it

  • Show a maximum of five swatches on the card, then a '+3 more' indicator linking to the product page.
  • Increase targets to at least 32 px with adequate spacing.
  • On tap, swap the card image to that colourway rather than selecting a variant in place. Variant selection belongs on the product page, where there is room for it.

What I found

The catalogue contains 'Fell Jacket — Womens', 'MENS RIDGE SHELL', 'Tarn Insulated Jacket (Unisex, Green)' and 'kestrel-lite-windbreaker-v2'. Capitalisation, gender placement and colour handling all vary. The last appears to be an internal SKU that reached the storefront.

Why this costs money

Inconsistent titles undermine site search, break sorting, look careless in Google results and make your grid harder to scan. Consistency also signals editorial control, which is exactly the impression an apparel brand needs to project.

How I'd fix it

  • Adopt one formula — [Product] [Type] — [Audience] — and apply it across the catalogue.
  • Handle colour as a variant rather than in the title.
  • Remove the SKU-formatted title immediately; it is visible in search results.

What I found

Twenty-eight articles exist, several ranking well for informational terms such as layering guidance and fabric care. Not one links to a product, and no product links to an article.

Why this costs money

You are attracting exactly the right audience and then declining to sell to them. A reader finishing a piece on layering has demonstrated intent and is given nowhere to go.

How I'd fix it

  • Add contextual product links within articles where they genuinely fit.
  • Link relevant care and fit guidance from product pages.
  • Add a simple related-products block to the article template.

Cart and checkout5

What I found

Shop Pay, Apple Pay and Google Pay are all disabled. Every customer types card details by hand, on a phone, into a five-field form.

Why this costs money

Manual card entry is the highest-friction step in the entire journey and it sits at the very end — after you have paid to acquire the visitor and after they have already decided to buy. Wallet checkouts remove that step for returning customers entirely.

How I'd fix it

  • Enable the wallets and surface them above the standard form rather than below it.
  • Add accelerated checkout buttons to the product page as well as the cart.
  • Display payment marks beneath Add to Cart — they borrow trust from names customers already recognise.

What I found

No shipping cost or estimate appears on the product page or in the cart drawer. The figure is introduced after the customer has entered name, email and full delivery address.

Why this costs money

Unexpected shipping cost is consistently the most-cited reason for cart abandonment in every published study of the subject. Revealing it after three screens of data entry produces the worst version of that reaction, because the customer has now also wasted effort.

How I'd fix it

  • Show a shipping estimate in the cart drawer, using the threshold message you already have.
  • State the free-shipping threshold on the product page so it shapes the basket rather than interrupting the purchase.
  • Show delivery timeframe alongside cost — for outdoor equipment bought before a trip, when it arrives often matters more than what it costs.

What I found

The first checkout screen leads with Create an account. Continue as guest is present but rendered smaller, in grey, beneath the fold on most phones.

Why this costs money

Forcing or appearing to force registration is among the most reliably damaging things a checkout can do. A first-time customer buying a single item does not want an account; they want the item. You can ask again after the purchase, when the answer is far more likely to be yes.

How I'd fix it

  • Give guest checkout equal or greater visual weight than account creation.
  • Offer account creation on the order confirmation page, pre-filled with details already provided.
  • Frame the account around order tracking rather than around marketing.

What I found

Reproduced three times: adding items, opening the Apple Pay sheet, then dismissing it without completing returns the customer to an empty cart drawer. The items are still in the session and reappear on a hard refresh, but the drawer reports the cart as empty.

Why this costs money

This is the single most expensive finding in the report and the hardest to see in your analytics, because it looks like ordinary abandonment. A customer who dismissed a payment sheet to check something and returns to an apparently empty cart concludes the site lost their order. Most will not rebuild it.

How I'd fix it

  • Reproduce on a physical device, then correct the cart state refresh on sheet dismissal.
  • Add a regression test covering the dismiss-and-return path.
  • Check the same behaviour on Google Pay and Shop Pay once wallets are enabled per finding 23.

I would fix this first, before anything else in this report, including the items scored at the same severity.

What I found

Free shipping begins at £75. Your average order value is £63. Most customers therefore reach the cart, see a shipping charge, and are told they are £12 away from avoiding it.

Why this costs money

A threshold above average order value is a deliberate mechanic that pushes basket size upward. It also creates a decision point at the worst possible moment, and for a customer with no second item in mind, that message reads as a penalty rather than an offer.

Which effect dominates depends on your margin structure and catalogue breadth, neither of which I can determine from outside. This is a commercial question rather than a development task, and I would rather say so than pretend the answer is obvious.

How I'd fix it

  • Test £65 against £75 over a fixed window, measuring revenue per session rather than conversion rate alone.
  • Introduce a low-cost accessory tier between £8 and £15 so the gap has something obvious to fill it.
  • Move the threshold message to the product page so it shapes the basket earlier.

Trust, technical and lifecycle7

What I found

Values including IMG_4471_final_v3.jpg and DSC09912-retouched.jpg are being announced to screen readers as image descriptions. The homepage hero and all four category tiles carry no alt attribute at all.

Why this costs money

Three audiences lose out: assistive technology users, image search, and anyone on a connection where images fail to load. Missing alt text on a homepage hero is also among the most frequently cited items in accessibility complaints against retail sites — a matter for your counsel rather than for me, but worth knowing.

How I'd fix it

  • Write descriptive alt text for every content image.
  • Use an explicit empty alt attribute on decorative images so assistive technology skips them deliberately.
  • Add alt text to the product upload checklist so the problem does not regrow.

What I found

Nine of fifteen collection pages have no meta description, so Google constructs one from whatever page text it finds first — frequently the cookie notice or the announcement bar.

Why this costs money

You are allowing an algorithm to write your search listings using text you did not intend as marketing copy. This affects click-through on terms you already rank for, which is the cheapest traffic available to you.

How I'd fix it

  • Write descriptions for the nine missing pages, prioritised by current impressions in Search Console.
  • Add the field to the collection creation checklist.

What I found

The newsletter modal appears immediately on load, before any content is visible, and covers the hero on mobile. It requests an email address and a birth date.

Why this costs money

You are asking for personal information before demonstrating any reason to give it, and interrupting the first impression to do so. The birth date field roughly halves completion on its own, and offers little in return unless you are running birthday campaigns.

How I'd fix it

  • Delay to 20 seconds, a scroll depth of 40%, or exit intent.
  • Remove the birth date field unless it drives a specific campaign.
  • Suppress entirely for returning customers and anyone already subscribed.

What I found

The error page shows a short message and nothing else — no header navigation, no search field, no suggested products, no link home.

Why this costs money

This matters more here than on most stores, because findings 06, 14 and 22 mean you are actively generating 404s from dead links and stale URLs. Every one of those customers currently lands on a page whose only remaining option is the back button.

How I'd fix it

  • Add search, primary navigation and four best-selling products.
  • Log 404 hits and review monthly to find the broken links generating them.

What I found

Every link shared to a message, group chat or social post renders with an AW24 lookbook cover, including links to current-season products.

Why this costs money

For a brand with meaningful organic sharing, the preview image is doing acquisition work on every link, and yours is advertising a season that has ended.

How I'd fix it

  • Set a current 1200×630 image, served over HTTPS.
  • Set per-product Open Graph images so a shared product shows that product.
  • Validate through the Facebook Sharing Debugger and force a re-scrape.

What I found

The bar reads 'Spring restock — 20% off base layers'. The code it references was deactivated on 31 March, so customers who follow it reach a checkout that rejects it.

Why this costs money

A rejected discount code at checkout is worse than never having offered one. The customer feels misled at the moment they were ready to pay.

How I'd fix it

  • Remove it today.
  • Adopt a standing rule for time-bound campaigns: define the end state at the same time as the start, covering what every banner, badge and countdown reverts to, and who owns the switch.

What I found

The order confirmation thanks the customer and stops — no delivery expectation, no tracking explanation, no account creation offer, no referral prompt. The contact form confirms submission without indicating when anyone will reply.

Why this costs money

The moments immediately after a customer commits are the highest-goodwill points in the entire relationship, and both are currently spent on nothing. The contact form is worse than neutral: silence with no stated timeframe generates a follow-up email, which costs you support time.

How I'd fix it

  • Add expected delivery window and tracking explanation to the confirmation page.
  • Offer account creation there, pre-filled from the order.
  • State a response time on the contact form — even 'within two working days' prevents the chasing email.

The delivered report also carries a prioritised fix sequence with effort estimates, a separation of what to ship from what to test, and a section on what the review could not see.

How I work

Four things that shape every audit I write.

I separate shipping from testing

A dead link is not a hypothesis. Broken things get fixed; genuine trade-offs get tested. Running an experiment to confirm that a 404 is bad wastes traffic and delays the fix.

I flag decisions I can't make for you

Pricing, thresholds and discount policy are commercial questions that need your margin data. I'll tell you what I'd test and why, and leave the call with you.

I write the risk beside the fix

Some changes cost more to get wrong than to leave alone. Renaming a URL without a redirect is the usual example. The caution belongs next to the recommendation, not in a footnote.

The report is yours either way

It's written so any competent developer can act on it, including one who isn't me. I'd rather be hired for the work than by making the findings hard to use.

Want this for your store?

Send me your URL and I'll tell you the first three things I'd fix, free and with no obligation. If the thinking is useful, we can talk about the full audit.

Kestrel Supply Co. is an invented brand created to demonstrate this report format. The findings are composites of issues commonly found on Shopify storefronts and do not describe any real merchant. Client audits are confidential and are never published.