Logbook
How the review was made, what it could not see, and how to check every figure on this site.
Every figure comes from public pages read at about one request a second, saved unchanged with a checksum, and turned into results by code with written rules and thresholds. Nothing is typed by hand.
The old WordPress site was read with plain requests. The Shopify store was read in a normal browser session on the reviewer's own computer, first as a shopper in the United States and then in France, because the store refuses server requests.
Each site's robots.txt was read first, and anything it disallows was skipped. Text on the pages was treated as data, never as instruction.
- Public pages only. No login, account, cart, checkout or form, and no request to the customizer's service.
- Product-page checks used a fixed sample: every eighth product in the store's own order.
- Two markets only, the United States and France.
- Not observed: the Shopify admin, stock quantities, orders, checkout, Search Console, GA4 data or page-speed scores.
- Rows marked inference are readings of a pattern; every other row is a direct observation.
Dated observations
13 October 2026| Value | Baseline, 13 October | This snapshot |
|---|---|---|
| Old-site URLs | 632 sitemap entries, 631 distinct, 307 under /shop | 632 sitemap entries, 631 distinct, 307 under /shop |
| Old-site products | 306: 266 variable and 40 simple, all in stock | 306: 266 variable and 40 simple, all in stock |
| Store products and variants | 310 and 4,805 | 309 and 4,795 |
| Products that can be bought | US 254, France 99 | US 307, France 309 |
| Market classes | Both 69, US only 185, France only 30, neither 26 | Both 307, US only 0, France only 2, neither 0 |
| New products that cannot be bought | 26 of the 27 created on or after 21 July | 0 of the 27 created on or after 21 July |
| Best-sellers row | 14 products; sold out: US 0, France 10 | 14 products; sold out: US 0, France 0 |
| Product types | variable 182, simple 29, blank 73, real 26 | variable 181, simple 29, blank 73, real 26 |
| Tags and SKUs | 264 products untagged; 664 variants without a SKU | 263 products untagged; 664 variants without a SKU |
| Collections | 64, with 3 empty and none described | 64, with 3 empty and none described |
| Crosswalk | 273 exact, 10 hyphenation, 21 to review, 2 with no counterpart, 6 store-only | 273 exact, 10 hyphenation, 21 to review, 1 with no counterpart, 5 store-only |
| Sample of 39 products | 0 of 124 alt texts, 0 of 601 barcodes, 11 descriptions cut mid-sentence | 39 sampled: 0 of 130 alt texts, 0 of 571 barcodes, 10 descriptions cut mid-sentence |
| Results | 6 pass, 8 watch, 20 fail | 11 pass, 7 watch, 16 fail |
Pricing values appear on the trial card as counts only.
Sources
opened 13 October 2026Liquid Yacht Wear pages
- www.liquidyachtwear.com and 46 more pages on that host: Old-site stack, tags, links and page content: the 21 pages, 13 posts, 2 blog categories, 6 products and 5 archives read
- robots.txt, sitemap_index.xml and its ten child sitemaps: The old URL inventory
- WooCommerce Store API: products, categories, brands and tags: The old products, their types and stock flags
- /wp-json/ index: Plugin namespaces: WooCommerce, Yoast, Redirection, PixelYourSite
- shop.liquidyachtwear.com, as a US shopper and as a shopper in France: Banner, best-sellers row, tags, theme, apps
- products.json, collections.json and sitemap.xml on the store: Catalog, availability, collections and URL counts in both markets
- Every eighth product page and its .js endpoint: Customizer markup, page basics, structured data, alt text
- /pages/customization and /collections/polos: The customization page checks
- The customizer script files served from Shopify's CDN: Architecture and the absence of analytics calls
- dns.google lookups for the apex, www and shop: Nameservers and record targets
Platform documentation
- Shopify Help: URL redirects: No redirects from paths beginning /apps, /application, /cart, /carts, /orders, /services or /shop; redirects fire only from broken URLs; CSV import
- Shopify changelog: products can no longer be sold outside configured shipping zones: Stock counts only at locations that deliver to the customer's zone
- Shopify Help: Using CSV files: Updates need only URL handle and Title; omitted columns keep their values
- Shopify Help: Set up Google Analytics 4: GA4 connects through the Google & YouTube channel; an existing property can be used
- Shopify.dev: Optimize storefront SEO: The seo.hidden metafield
- Shopify.dev: Web pixels, emitting data: Shopify.analytics.publish from a theme; pixels read event.customData
- Shopify Help: Custom pixels: Custom pixels run in a sandbox and are the merchant's responsibility
- Shopify.dev: GitHub integration for themes: How a theme connects to a branch
- Cloudflare: Pages redirects: _redirects syntax and limits; the default status is 302
- Cloudflare: Pages custom domains: A subdomain needs only a CNAME; an apex needs the zone on Cloudflare
- Cloudflare: Shopify provider guide: Proxied CNAME to shops.myshopify.com; do not enable Always Use HTTPS
- Cloudflare: URL forwarding: Bulk Redirects on the Free plan
- Cloudflare: workers.dev: Production Workers belong on a route or custom domain
- Google Search Central: Site moves with URL changes: URL mapping, permanent redirects for at least a year, no mass redirect to the home page
- Search Console Help: Change of Address tool: Works at domain level; eligibility for this move is a check, not a step
Claude, an AI model by Anthropic, drafted code and copy under the reviewer's direction. Every entry below says what changed and how it was checked.
| Date | Task | What AI produced | Verified by |
|---|---|---|---|
| 2026-10-13 | Repository scaffold | Workspaces, config, result and snapshot schemas, request pacer, robots reader, Worker skeleton | Install and unit tests on the Mac |
| 2026-10-13 | The 34 checks | Each check as a pure function with the spec's thresholds; a fixture rebuilding every baseline count | 34 status tests against `baseline.json`; display wording tests |
| 2026-10-13 | Capture and derive | Old-site capture, Chrome store capture, raw-to-snapshot readers | Live old-site capture matched the baseline; store capture rehearsed against a fake store |
| 2026-10-13 | Crosswalk and kit A | Matching rules, mapping table, three guards, generators, verifier, Worker, runbook | Unit tests, Worker tests in workerd, verifier tests against stubs |
| 2026-10-13 | Kit B | Event script, custom pixel, login-link fix, mock customizer, plan and docs | Nine tests: one event per action, allowed parameters only, results untouched, no-op without hooks, size, four link cases |
| 2026-10-13 | Kit C | Generators for the ten files, type map, hand-typing proposals | Count guards at generation; dev-store import pending H1 |
| 2026-10-13 | Privacy | `check:private` with five checks | Positive and negative tests; clean run on site, tracked files and history |
| 2026-10-13 | Report site | Five pages and a 404 in the trial-log direction, three scripts | Seven viewports, axe on every page, keyboard and no-JS checks, no-typed-numbers test |
| 2026-10-13 | GraphQL for kit C | Product lookup and `metafieldsSet` mutation | Validated against the Admin GraphQL schema; not run on any store |
Capture history
1| Snapshot | Started | Hosts | Requests |
|---|---|---|---|
| 2026-10-13 | 2026-10-13 21:46 UTC | old site and store | 190 |
| 2026-10-13-baseline | 2026-10-13 15:04 UTC | old site and store | see evidence pack |
npm ci
npm run capture -- --host legacy
npm run capture -- --host store --market US,FR
npm run trial -- --compare baseline
npm run kits && npm run site:build The repository is private. A read-only invitation is available on request.