Demonstration sample. Kestrel Supply Co. is a fictional store.
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.
Reviewed: Homepage, three collection pages, four product pages, cart, checkout, search, 404. Turnaround five working days.
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.
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.
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.
Roughly a day of work. I would measure before and after on the same five templates so the result is attributable rather than assumed.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
This converts a dead end into a mailing list, which is the cheapest audience you will ever build.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Filters exist for colour, price and category. There is no size filter anywhere, on a catalogue of 340 apparel SKUs across seven sizes.
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.
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.
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.
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.
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.
'Jackets' and 'Outerwear' both point to /collections/aw24-early-access. A customer clicking the second expecting something different receives the first.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
I would fix this first, before anything else in this report, including the items scored at the same severity.
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.
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.
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.
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.
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.
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.
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.
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.
The error page shows a short message and nothing else — no header navigation, no search field, no suggested products, no link home.
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.
Every link shared to a message, group chat or social post renders with an AW24 lookbook cover, including links to current-season products.
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.
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.
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.
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.
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.
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.
Four things that shape every audit I write.
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.
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.
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.
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.
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.