Life of Fish — Site Audit — Quantised

Life of Fish audit
Quantised — Prospect — Cold Outreach

Life of Fish — Site Audit

https://lifeof.fish · September 2026
Prospect — Cold Outreach · https://lifeof.fish · September 2026

Summary

Life of Fish is an independent London fishmonger with three shops and a genuinely well-built pantry range — 199 products across 21 properly populated collections, strong photography and a distinctive voice. The catalogue is not the problem. The problem is that half of it sits at the wrong web address: 95 of 199 products have a URL naming a different product, the result of a duplicate-and-rename cascade that never updated the slugs, so a hake fillet lives at /products/salmon-fillet. Alongside that, the privacy policy is an unedited Shopify template carrying 26 unfilled placeholders and is not linked from the footer, mobile LCP is around 16 seconds, and there is no review mechanism beyond a single hard-coded quote whose attribution links to a fish collection. Fix the URLs and the privacy policy and this becomes a good site with a speed problem, rather than one quietly undermining its own search visibility.
Danger
Technical SEO
TECHNICAL SEO
STATUS DANGER

95 of 199 product URLs name a different product; 128 images missing alt text.

At Risk
Performance
PERFORMANCE
STATUS AT RISK

Lab-estimated mobile LCP of 15,977ms makes paid mobile acquisition uneconomical.

At Risk
Search Visibility
SEARCH VISIBILITY
STATUS AT RISK

95 of 199 product URLs name a different product, so the strongest on-page signal is wrong across half the catalogue.

Danger
CRO & Trust
CRO & TRUST
STATUS DANGER

Privacy policy is an unedited template with 26 placeholders and is unlinked; no review mechanism beyond one hard-coded quote.

At Risk
Content
CONTENT
STATUS AT RISK

Catalogue is well populated and well photographed; no recipe or editorial content to rank with.

Critical — fix before anything else

Critical — fix before anything else

  • 🔴95 of 199 products sit at a URL naming a different product — /products/salmon-fillet-7cbd7 is a Hake Fillet, /products/galician-octopus-mg6tm is Squid. An off-by-one cascade from repeated duplication where the slug never followed the rename.
  • 🔴The privacy policy is an unedited Shopify template carrying 26 unfilled placeholders, including whole instructional paragraphs, and it is not linked from the footer at all.
  • 🔴Mobile LCP is approximately 16 seconds, which makes paid acquisition uneconomical.
High priority

High priority

  • 🟠No review mechanism anywhere. One hard-coded Google review sits on the homepage and its attribution links to the All Fish collection rather than to the review.
  • 🟠No privacy or cookie links in the footer, though Terms, Refunds, Contact and a newsletter sign-up are all present.
  • 🟠128 images missing alt text across the pages crawled.
  • 🟠Analytics setup could not be determined from outside — Shopify loads Google Analytics client-side, so GA4 may well be running. Verify in the Shopify admin or the GA4 Realtime report.
Medium priority

Medium priority

  • 🟡No payment method icons in footer; footer scores 1/5 on trust-signal audit — a meaningful conversion drag.
  • 🟡128 images missing alt text across 20 crawled pages; 24 missing on homepage alone — image SEO and WCAG 2.1 AA failure.
  • 🟡6 duplicate-handle variants of salmon fillet product URL detected (e.g. /products/salmon-fillet-7cbd7-x27bm-c4a7c-8fwxp-jnb58-n7jac) — crawl budget and duplicate content risk.
  • 🟡No Google Knowledge Panel despite Companies House record, Instagram presence, and physical retail footprint.
  • 🟡Hake Fillet (47 words) and Mackerel Filleted (41 words) are below the thin-content threshold with no provenance or sourcing detail.
What's working

What's working

  • ✅A properly populated catalogue — 199 products across 21 collections, none of them empty. All Pantry alone holds 108 products.
  • ✅Almost everything is in stock: 198 of 199 products available.
  • ✅Strong product photography and a distinctive brand voice throughout.
  • ✅A working newsletter sign-up in the footer.
  • ✅Three physical shops with established local presence.
Prioritised action plan

Prioritised action plan

  • ▸🔴 Export the catalogue, correct 95 product handles against their titles, re-import with 301 redirects from every old URL.
  • ▸🔴 Complete or replace the privacy policy (26 placeholders), and add privacy and cookie links to the footer.
  • ▸🔴 Install GA4 via Shopify Google channel; configure purchase, add_to_cart, and begin_checkout events; remove UA script.
  • ▸🔴 Resolve Cloudflare/Shop Pay conflict so only one H1 renders on the homepage — remove or reclassify error-state headings.
  • ▸🔴 Rewrite privacy policy replacing all "your business" placeholders with actual business details; review for UK GDPR compliance.
  • ▸🟠 Run mobile DevTools trace to identify LCP element; convert hero to WebP with fetchpriority="high"; defer non-critical scripts.
  • ▸🟠 Install a back-in-stock app and add notify-me form to the sold-out product template across all products.
  • ▸🟠 Select Trustpilot or Reviews.io; set up post-purchase review request flow; add AggregateRating schema once 10+ reviews exist per product.
  • ▸🟡 Add Organisation JSON-LD schema to homepage; audit and 301-redirect duplicate product handles; expand Hake and Mackerel descriptions to 150+ words.

Next steps

A structured four-week engagement covering catalogue remediation, GA4 implementation, and mobile performance would bring Life of Fish to a launchable baseline before any growth spend is committed.

  • Diagnose whether products exist in Shopify Admin as drafts or are genuinely absent, then either bulk-publish or begin catalogue build — this unlocks every other workstream.
  • Install GA4 and verify purchase event firing in DebugView before removing the UA script — measurement must be restored before any paid or SEO activity is evaluated.
  • Run a throttled mobile trace in Chrome DevTools to identify the LCP element and scope the performance fix, so a realistic timeline for paid mobile activation can be set.