Store audit

Two stores, opened up.

Everything I found inside naelinaturals.com and inwardlywellness.com. Measured on 14 August 2026, from the theme code up.

Prepared for Eliyahu Fox · ALLI LLC · by Michel Dimitri, Sharkcode

Why you are getting this

Eli, before I sent you a single price I went into both stores. I downloaded the live themes, ran the same checks Shopify runs on the themes it sells, measured both sites on a throttled phone, and wrote down what came back. This page is the result.

It is yours to keep, and I mean that in the practical sense. If you decide to do nothing with me, or to hand the work to somebody else, take this with you. Every finding names the file and the line it lives on, so any developer can price it without guessing, and you can compare what two of them ask for the same list. That is a fair use of it.

I am giving it to you because it is also the honest answer to how I work. This is how: I measure first, I write down what I measured, and I say plainly when something is fine. There are six things in here that I checked and could not fault, and they are at the bottom of the page, in writing.

Michel

How to read it

Every finding says four things: what it is, exactly where it lives, what it costs you, and how to check it without taking my word for it. They are grouped by subject, one block at a time, so you can read only the part you care about.

SeriousMoney or trust on the line today. Customers or Google are hitting it right now.
Worth fixingReal, not urgent. It slows things down or leaves value on the table.
HousekeepingSmall stuff. Cheap to do while touching the same file.

What I used

Shopify CLI 3.92 to download both live themes, Shopify Theme Check (the official linter, the same one that gates themes on the Theme Store), Lighthouse on an emulated phone with 4G throttling and a 4x slower processor, Chrome DevTools performance traces and network logs, and plain HTTP requests for headers and status codes.

What I did not look at

Orders, customer data, your email flows and the settings inside third party apps. A collaborator account gets me the storefront, the themes and the settings that shape them, which is where everything on this page lives. The rest is a conversation, not a login.

What is in here

INWARDLY

inwardlywellness.com · 2 products · launched 30 April 2026 · custom theme, 14 sections

91Accessibility
100Best practices
92SEO
1.5sLargest paint

Lighthouse on a phone plus your live theme downloaded and read, 14 August 2026. The engine is in good shape, and so is most of the theme. What is broken sits on top of both.

Block 1

Pages that do not exist

The theme of this whole store, and the reason I would start here: the work is mostly done, it was just never switched on. Nine links on your storefront point at pages that answer 404.

Serious

Your About page answers 404, and so does every broken link on the site

Open inwardlywellness.com/pages/about and you see your story: the headline, the paragraph, the four values. Look at the browser tab while you read it. It says 404 Not Found.

The page exists in your admin, it is written, and it is set to visible. But the address it lives at returns the "page not found" status to every visitor and to every search engine. What you are actually looking at is the 404 page, because somebody built the 404 template out of the About section: the story you wrote is what this store shows when a link is broken.

Two consequences, both real. Google will never index that story, because you do not index a 404, so the page cannot rank or be quoted anywhere. And every wrong address on the site, including the four dead policy links in the footer, greets the visitor with your brand manifesto instead of telling them the page is missing.

as an anonymous visitor, 14 August 2026: GET /pages/about 404 Not Found GET /pages/anything-invalid 404 Not Found <- same page, same story templates/404.json, the theme's not-found page: "about_template_ejxz6T": { "type": "about-template", hero_heading: "We believe wellness begins within", blocks: Transparency, Clean Sourcing, Third-Party Tested, Community First } "main": { "type": "404-template", "disabled": true } <- the real 404 is switched off and the whole site points at it: header menu "About" -> /pages/about 404 mobile menu "About" -> /pages/about 404 hero button "Our Story" -> /pages/about 404 footer "About Us" -> /pages/about 404

The fix: give the About content a page that answers 200, point the four links at it, and put a real not-found page back where the 404 template belongs. The writing is already done and it is good: it just needs an address that exists.

Serious

Four store policies were never written, and the footer links to all of them

Shipping, returns, terms and the FAQ are linked from the footer of every page, and all four answer 404. On a supplement store, the return policy is the last thing a first time buyer checks before paying. It is also what payment providers and ad platforms look for when they decide how much to trust you.

404 /policies/faq 404 /policies/shipping-policy 404 /policies/terms-of-service 404 /policies/refund-policy 200 /pages/contact <- this one exists

The fix: Shopify has these fields built in, under Settings and then Policies. They need writing once, honestly, in your own words.

Housekeeping

The FAQ page is a placeholder that says so out loud

There is an FAQ template in the theme. Its entire content is the sentence "FAQ coming soon".

sections/faq-template.liquid, complete file: <p>FAQ coming soon</p> {% schema %} {"name": "FAQ Page"} {% endschema %}

The fix: the questions your Amazon reviews already ask, answered on the page. It is also the content Google likes most on supplement stores.

Block 2

The homepage video

The one you told me about, the video that sometimes does not show. Here is why, and it is not the theme's fault.

Serious

It is a 31 MB QuickTime file in a slot that asks for MP4

The hero video is not a web video. It is a .mov file, and Shopify's CDN serves it as video/quicktime. Safari plays that format, most other browsers do not, which is exactly why it shows up for you and not for everyone else. It also weighs 31.5 MB, so the visitors whose browser does try to play it pay for it out of their data plan.

The theme is fine: the hero section declares the source as MP4, and the field where the file goes says "MP4 recommended" right on the label. A QuickTime file was pasted into it. The poster image, the frame people would see while the video loads, falls back to a background image that was left empty, which is why the hero is simply blank when the video does not play.

$ curl -I https://cdn.shopify.com/videos/c/o/v/169812e0dbc046f8ba8f85e8d03469f8.mov HTTP/1.1 200 OK Content-Type: video/quicktime Content-Length: 31553100 sections/hero-banner.liquid, line 4 <video autoplay muted loop playsinline poster="{ bg_image, empty }"> <source src="{ bg_video }" type="video/mp4"> <- says mp4 </video> theme settings, live right now bg_video = .../169812e0dbc046f8ba8f85e8d03469f8.mov <- is a .mov bg_image = (empty) <- no poster

The fix: re-encode to H.264 MP4 around 3 to 5 MB, paste the new URL in the same field, set a poster image. No code change at all. Same video, a tenth of the weight, plays everywhere.

Block 3

What Google and social see

Right now, almost nothing. This is the cheapest block on the page to fix and the one that keeps paying the longest.

Worth fixing

No description, no structured data, no share image

The homepage has no meta description, the store has no structured data anywhere, and there is no Open Graph image. No description means Google writes its own snippet out of whatever text it finds first. No structured data means your products can never show a price or a rating in the results. No share image means that when somebody sends your store on WhatsApp or iMessage, the link arrives bare, with no picture.

The theme is ready for the description: it prints one whenever the field is filled. The field is empty.

application/ld+json .... 0 occurrences (checked in the theme source too) og:image ............... 0 occurrences meta description ....... 0 occurrences layout/theme.liquid, line 11 <meta name="description" content="{{ page_description }}"> <- waiting

The fix: titles and descriptions on every page, a share image, and Product structured data on the two product pages. One afternoon.

Block 4

Nothing is being measured

The most expensive silence in this audit, especially for a store that gets traffic from Amazon buyers looking you up.

Worth fixing

No analytics, no pixel, no email capture

Every visitor who arrives and leaves without buying is gone for good: you cannot retarget them, you cannot email them, and you cannot tell which channel brought them. You are also blind on the basics, like how many people reach the product page and drop before the cart.

klaviyo ..... 0 gtag ........ 0 facebook .... 0 pixel ....... 0

The fix: analytics, a pixel, and a welcome flow with a popup. The popup alone starts building a list from the first day it is on.

Block 5

The Add to cart button

One real bug in the code, and I can show you the two lines that cause it.

Worth fixing

One tap sends two requests

I tapped Add to cart once on the Magnesium page and watched the network: two calls went out, and the cart drawer redrew twice. Shopify handled both and the cart still shows the right quantity, so this is not losing you orders today. It is a button wired twice, and it doubles the noise in any analytics or ad pixel you plug in later, which is exactly when it starts costing you.

one tap on ADD TO CART, 14 August 2026: POST /cart/add.js 200 POST /cart/add.js 200 <- same tap GET /cart.js 200 GET /?sections=cart-drawer 200 GET /cart.js 200 GET /?sections=cart-drawer 304 cart after the tap: 1 item, quantity 1, $24.95 and here is why, assets/theme.js: line 90 document.addEventListener('submit', ...) catches every form line 92 if (!form.action.includes('/cart/add')) return; line 108 fetch('/cart/add.js', { method: 'POST' }) call one line 126 productForm.addEventListener('submit', ...) the product form line 140 fetch('/cart/add.js', { method: 'POST' }) call two

The first listener was written for the small Add to cart buttons on product cards, and it matches any form pointing at the cart. The second was written for the product page. On the product page both match, so both run.

The fix: one handler on the product form. Half a day including a test on a real iPhone and a real Android.

Block 6

Accessibility

Two problems that hurt real people and, in the United States, occasionally lawyers.

Worth fixing

Hidden panels that can still be reached with a keyboard

The mobile menu and the cart drawer are marked as hidden from screen readers while still containing links that can be tabbed into: someone navigating by keyboard falls into a menu their screen reader says is not there. Some text also fails contrast, and the footer jumps a heading level.

aria-hidden-focus <nav class="mobile-nav" aria-hidden="true"> <div id="cart-drawer" aria-hidden="true"> color-contrast .section-eyebrow, .section-subheading, .product-card__vendor heading-order <h4 class="footer-links__heading">

The fix: a pass on the drawer states and a small contrast correction. Accessibility complaints against US supplement stores are a real thing, and this is the cheap end of that problem.

Block 7

Product content

Two products, and about a paragraph each.

Housekeeping

Thin descriptions on both products

For a supplement, the pages that rank are the ones that answer what a buyer actually asks: how much to take, when, what it feels like, what it does not do, and who should not take it.

Magnesium Bisglycinate 500mg + Ashwagandha ...... 324 characters Magnesium Bisglycinate 500mg - Sleep ........... 334 characters

The fix: proper product pages with facts, dosage, an FAQ and the FDA line US supplement stores carry.

Block 8

The theme itself

Worth saying plainly, because it changes what the work is: the code is not the problem.

Housekeeping

Clean, small, and unfinished rather than badly built

I ran the same official linter I used on Naeli. Your theme comes back with 32 findings against Naeli's 260, and the three errors are minor. Fourteen sections, seven templates, 32 KB of CSS. Whoever built it kept it tidy. What it is missing is not quality, it is the last mile.

Shopify Theme Check, INWARDLY live theme: 3 errors, 29 warnings, 32 total 13 deprecated image filter (img_url, now image_url) 12 hardcoded links instead of Shopify's route object 4 assets loaded from outside the Shopify CDN 2 images without width and height (layout shift) 1 script that blocks the page while it parses

The fix: worth doing in the same pass as everything else, not on its own.

NĀELI Naturals

naelinaturals.com · 9 products · Motion theme by Archetype, version 10.5.2

96Accessibility
58Best practices
92SEO
260Theme warnings

Lighthouse on a phone plus Shopify Theme Check on the live theme, 14 August 2026. A working store carrying years of additions.

Block 1

Your 368 reviews and Google

If you read one block on this page, read this one. It is the single thing costing you the most, every day, and it is one file away from being fixed.

Serious

Google is not allowed to see a single one of them

Okendo holds your reviews and hands the average and the count to the page, and your theme uses them to draw the stars a human sees. But the block Google actually reads, the structured data, never gets them. It lists price, availability, brand and description, and stops there.

snippets/product-template-variables.liquid, line 16 "@type": "Product", "offers": [ ... price, availability, sku ... ], "brand": "N Ā E L I", "name": "...", "description": "...", "category": "" <- empty <- no aggregateRating anywhere same page, in the theme's JavaScript: okendoProductReviewCount = okendoProduct.reviewCount okendoProductReviewAverageValue = okendoProduct.reviewAverageValue

The numbers are right there, one file away from the block that would put stars under your listing in Google. That is why you can search your own products and never see a rating, while competitors with forty reviews show five.

The fix: pass Okendo's average and count into the Product structured data, then validate it in Google's Rich Results test. Same day.

Block 2

The theme and its age

Motion is a good theme. Yours is an old copy of it, with a few things that have quietly broken along the way.

Worth fixing

Two major versions behind

You are running Motion 10.5.2. Archetype released 10.6.0 in January 2025 and the current version is 12.0.0, from 6 July 2026. Six releases in between, including support for products with 250 or more variants, the new listings system, and respect for the reduced motion setting people with vestibular issues turn on.

config/settings_schema.json "theme_name": "Motion", "theme_author": "Archetype Themes", "theme_version": "10.5.2" current release: v12.0.0, 6 July 2026 help.archetypethemes.co/hc/en-us/articles/46027040160403

The fix: either a controlled update on a copy of the theme, or a refresh that carries your customisations forward. Never a blind update on the live store.

Worth fixing

The official linter returns 260 findings, 71 of them errors

Theme Check is the tool Shopify uses to review themes before they go on sale. Run against your live theme, it comes back with 260 findings. Not all of them matter to a customer, but some do, and they point at real files.

WhatCountWhere it shows
Image files referenced by the CSS that no longer exist3The arrows on dropdown menus
Snippets called but missing from the theme2Newsletter block, text and image blocks
Liquid syntax errors7Gift card page, select icons, accordion
HTML tags opened and never closed15Menus, collection callouts, product carousel
Image filters Shopify has deprecated13Everywhere images are rendered
Variables assigned and never used41Weight the browser parses for nothing
assets/theme.css.liquid:73 'assets/ico-select.svg' does not exist assets/theme.css.liquid:74 'assets/ico-select-footer.svg' does not exist assets/theme.css.liquid:75 'assets/ico-select-white.svg' does not exist snippets/media-text.liquid:11 'snippets/color-scheme-texture.liquid' does not exist snippets/newsletter-section.liquid:13 'snippets/color-scheme-texture.liquid' does not exist

The fix: the missing files and the broken tags are an afternoon. The rest is worth doing when the theme gets updated, not before.

Block 3

Weight on every page load

Not what makes the store feel slow today. What makes every future change slower and riskier to make.

Worth fixing

Over a megabyte of theme code before anything else loads

The stylesheet alone is 740 KB before compression, the theme script another 260 KB, plus 128 KB of vendor scripts. Years of additions that were never cleaned up.

assets/theme.css.liquid ....... 740 KB assets/theme.js ............... 260 KB assets/vendor-scripts-v14.js .. 128 KB

The fix: comes with the theme refresh, not on its own.

Block 4

Tracking and privacy

Your best practices score is 58, and it is almost entirely tracking you may not know you have.

Worth fixing

Third party cookies on load, one of them from a channel you do not work

Lighthouse marks the store down mostly for third party cookies: Shop Pay and a Pinterest tracking pixel that fires on page load. Worth a decision rather than an accident.

third-party-cookies shop.app/pay/hop ct.pinterest.com/user/ (shopify-web-pixel) deprecations Attribution Reporting API

The fix: decide which pixels earn their place, remove the rest.

Block 5

Links and accessibility

Naeli scores 96 here, better than most stores I open. Two things still slip through.

Housekeeping

Links with no name, and "read more" as link text

Several links, including the logo that takes people home, have nothing a screen reader can announce. Others are called "learn more" and "read more", which tells neither a person nor Google where they lead.

<a href="/" class="site-header__logo-link"> no accessible name <a href="/collections/discover-our-products"> no accessible name "learn more" -> /pages/our-ingredients "read more" -> /pages/happy-faces

The fix: real names on the links. An hour.

Block 6

Housekeeping

Nothing here is on fire. It is the kind of tidy up that makes the next person faster, including future you.

Housekeeping

Twelve old themes in the library, and five languages you do not sell in

The theme list holds twelve unpublished copies, from a Debut and a Brooklyn to backups dated 2021 and 2024. Nothing breaks, but sooner or later somebody edits the wrong one. The live theme also ships German, Spanish, French, Italian and Portuguese translation files for a store that sells in the United States only.

The fix: keep the two most recent backups, name them by date, delete the rest.

Housekeeping

Four products out of nine have no tags at all

Tags are what let you build collections that fill themselves, filters that work, and recommendations that make sense. Four of your nine products carry none, and the descriptions run between 328 and 578 characters.

The fix: comes with the content work, not on its own.

What I found working well

An audit that only finds problems is a sales pitch. These are the things I checked and could not fault.