The eComm Manager job asks for a weekly note that says what happened, why, where we are against target, and what we'll do. I don't have your numbers yet, so I read everything else. This is dehanche.com as it rendered on September 16, 2026, every one of its 164 live products run through a catalog check, and the tools I'd run the role with.
Same format I'd send every Monday. This week's version is built from what a customer, a search engine and a scraper can see.
i.
What happened
The Fall 2026 drop is live and the product pages read beautifully. Underneath, the storefront has drifted: a sold-out belt in a top slot, a “Pre-Order” page selling sale stock, three copies of All Belts, and tags that contradict the product.
ii.
Why it matters
Each of these costs clicks, trust or rankings, and none needs a developer to fix. Most trace back to product data: tags, types and alt text feed the filters, feeds, search and email segments.
iii.
Against target
Unknown from the outside. Below is the pacing board I'd set up on day one, running on sample numbers until it's connected to Shopify.
iv.
What we'll do
This week: fix slot order, retire the Pre-Order page, redirect the duplicate collections, start the tag-to-metafield cleanup. Next: the size-row and second-belt tests, then two new email flows with the Klaviyo team.
Product copy
PDP titles and descriptions are specific and on-brand: “Hollyhock Black Silver Belt | Déhanche”, cast in Italy, ten holes, lined in suede.
Stock health
516 of 631 size variants are in stock and only 4 of 164 products are fully sold out. There's plenty of product to merchandise.
Size-level states
The theme already knows “Available”, “Low Availability” and “Pre-Order” per size, and has Klaviyo waitlist hooks wired in.
The right stack
Algolia search, Rebuy recommendations, Global-e, Klaviyo, Clarity, Triple Whale. Nothing new to buy, just tuning.
Clear offers
Free US ground shipping over $250 and 15% off two full-price belts are both good AOV levers.
Editorial pull
The imagery and storytelling carry the brand. The fixes below should protect that, not dilute it.
What happened · twelve flags
Found before anyone flagged them.
Each flag shows what I saw, why it costs sales or trust, and the fix. Everything was captured from the public storefront on September 16, 2026. Screenshots are cropped, not edited.
01
HighMerchandising · /collections/belts
A sold-out belt sits in slot 10 of All Belts. The $250 best sellers sit at 33 and 34.
/collections/belts · rendered at 1440px · Sept 16Slot 10 → SOLD OUT Hollyhock Crystal Black Silver · $495 · 0 of 5 sizes
tagged: Best seller · New Arrivals · Fall26
Slot 27 → Mija Black Silver · $290 · Best Seller badge
Slot 33 → Constance Black Silver · $250 · Best Seller badge
Slot 34 → Constance Black Gold · $250 · Best Seller badge (ninth row, ~6,300px down)
The first three rows take most of the clicks. A sold-out tile there is a dead end, and Constance at $250 is the easiest first purchase in the line.
Fix
Sold-out products drop to the end automatically, and their tile offers the waitlist instead. In-stock best sellers at each price tier ($250 / $290 / $325) are pinned into the first twelve slots. I'd review the order weekly against sell-through.
Owner eCommEffort 1 hourMeasure collection CTR, PDP views per session
Third row of All Belts, desktop: the Sold Out tile next to an in-stock croco Hollyhock.
02
HighMerchandising · /collections/pre-order
The “Pre-Order” page is selling final-sale stock.
/collections/pre-order · public · listed in sitemap_collections8 products, all purchasable now
Hollyhock Ochre Suede Gold $325 → $180 final sale
Versailles Ochre Suede Gold $425 → $350 final sale
Cupid Black Gold $350 → $249 final sale
Versailles Black Gold · Vendome Black Gold tagged Preorder · Prefall25 · published Feb 2026
PDP size states for Versailles Black Gold: Available / Low Availability (none Pre-Order)
A shopper who lands here from search, an old email or an ad reads “pre-order” and expects to wait. Instead they get in-stock belts, some of them final sale and non-returnable. The posting names this exact problem: an in-stock product showing as pre-order.
Fix
Let inventory drive pre-order status. The theme already reads a per-size Pre-Order state from Fabrikator. Rebuild the collection as “tag Preorder AND not in stock”, remove the tag from styles that have shipped, and redirect the page to New Arrivals whenever it's empty.
Owner eComm + OpsEffort half a dayMeasure zero in-stock items in Pre-Order
Mobile, Sept 16: “PRE-ORDER” heading above two SALE tiles.
03
MediumMerchandising · /collections/new-arrivals
“New Arrivals” goes back almost a year.
/collections/new-arrivals · 57 products · publish dates from products.jsonpublished > 90 days ago 17
published > 180 days ago 7
oldest 323 days
still tagged “New Arrivals”: Bodice Belt Black Short (created May 2025), Vendome Black Gold, Vendome Ivory Gold, Élysées Gold Chain Belt (Jan 2026)
2 of the 57 are fully sold out (Hollyhock Crystal Black Silver, Signet Stone Hinge Earring Onyx & Silver)
Regulars stop checking “New” when it doesn't change, and the Fall 2026 pieces get buried among older ones.
Fix
Make the collection automatic: published in the last 60 days, in stock. Pin the hero launch pieces by hand and drop the manual tag.
Owner eCommEffort 1 hourMeasure New Arrivals CTR, repeat-visitor sessions
04
HighCatalog data · tags
The tags contradict the products.
tags across all 164 live productsdistinct tags: 375
gold alone: Gold · Gold Finish · Gold Hardware · Gold Metal · Gold-Plated · Gold-Tone · 24K Gold · 18K Gold
tagged both 24K Gold and 18K Gold: 34 productsHollyhock Crystal Black Silver: tagged Gold, Silver, 24K Gold and 18K Gold
internal tags visible to anyone: Check_COGS · HIDE_IN_FABRIKATOR · black_crow_do_not_cross_sell · nyla_filter_Price_300399 · “260”
Filters, the Google feed, search and email segments all read these tags. A karat filter that returns silver belts loses trust, and conflicting karat data is a product-claims risk on a luxury site.
Fix
Move product facts into metafields with one allowed value each: metal (Silver / 24K gold-plated / Mixed), leather, width, collection family. Tags stay for merchandising only. Internal tags get an underscore prefix and a written owner, so the next person knows what's safe to delete. The scanner below lists every affected product.
Product type drives Google Shopping categories and category reporting. Zero weights can misprice shipping and Global-e duty quotes. Missing SKUs break inventory syncs and wholesale reconciliation.
Fix
One bulk CSV pass (Matrixify or the Shopify bulk editor), plus a required-fields check before any product goes live. That check is item one on the launch checklist below.
products.json · Hollyhock Black Silver product page HTMLcatalog alt text filled in: 0 of 722 images
the theme falls back to the product title, so on the Hollyhock Black Silver page
all 18 images read: alt="Hollyhock Black Silver"
(front, side, buckle detail and on-model shots are indistinguishable)
Screen-reader shoppers hear the same name eighteen times. Google Images, a real discovery channel for visual luxury goods, gets one repeated phrase. Feeds read the empty field, and missing or identical alt text often appears in ADA demand letters.
Fix
Fill alt text from a template in one bulk pass: “Hollyhock belt in black calfskin with silver five-ring hardware, front view”, then “…, worn at the waist”, and so on. Add it to the launch checklist so new products ship with it.
Owner eComm + CreativeEffort 1 day with a scriptMeasure Google Images clicks in Search Console
07
MediumSEO · collections
Three “All Belts” pages compete with each other.
title tags · canonical · sitemap_collections_1.xml/collections/belts “Shop All Belts – Made in Italy | Déhanche” canonical → itself
/collections/all-belts-copy “Shop All Belts – Made in Italy | Déhanche” canonical → itself
/collections/belts-all “Shop All Belts | Déhanche” canonical → itself
identical meta descriptions on the first two · all three listed in the sitemap
Google splits ranking signals across near-duplicates and can pick the copy to rank.
Fix
301 /all-belts-copy to /belts. Keep /belts-all (the full-price view) out of the index, or give it a distinct purpose and title. One All Belts page holds the rankings.
Owner eCommEffort 30 minutesMeasure impressions consolidate on /belts
08
MediumSEO · housekeeping
Internal and expired collections are public and in the sitemap.
61 collections in sitemap_collections · page titles as served/sizing-source-collection title “sizing source collection” · 53 products shown
/wholesale-only title “Wholesale Only” · 0 products
/catalog title “Collection”
/international-womens-month a March campaign, still live in September
/pre-fall-24 · /pre-spring-25 · /fall-collection (titled “Fall 2025”)
/resort-2027 no products visible yet
Empty and internal pages sit in the index, shoppers can reach them, and old seasons can outrank the current one.
Fix
Unpublish the utility collections from the Online Store, or noindex them through the template. Redirect past seasons to the current season, hold Resort 2027 until launch day, and audit collections once a quarter.
Owner eCommEffort 2 hoursMeasure indexed pages in Search Console
09
LowSEO · homepage
The homepage title is only the brand name.
view-source: dehanche.com<title>Déhanche</title>
<h1>Déhanche | </h1> (a stray pipe after the name)
compare: product pages → “Hollyhock Black Silver Belt | Déhanche”
Fix
Title: “Déhanche | Sculptural Italian Leather Belts & Jewelry”, and a clean H1. It takes two minutes and lets the homepage rank for more than the brand name.
10
MediumPDP · conversion
Size is the first question about a belt, and the product page hides it.
/products/hollyhock-black-silver · iPhone-sized viewportsizes XS–XXL and “Low Availability” appear only after tapping Add to Cart
the “BESTSELLER” badge renders on top of the header icons
Afterpay and Klarna scripts load, but no installment line shows under $325
Shoppers who can't see their size or its stock before committing hesitate. “Only one left in XL” works as urgency only if people see it.
Fix
Show the size row with stock state above Add to Cart (A/B test, T1 below). Fix the badge's z-index. Test an installment line on items over $250.
Sizes appear in a sheet after Add to Cart.“BESTSELLER” overlapping the header icons.
11
MediumAOV · bag and homepage
The best offer on the site only shows in the top banner.
announcement bar · bag drawer · homepagebar rotates: “15% OFF TWO OR MORE FULL PRICED BELTS”
bag says: “Complimentary shipping on orders over $250.00.” with no progress bar and no second-belt prompt
homepage: four editorial blocks, no shoppable product row
The offer is there to raise order value, but no one sees it when they add a first belt, which is when it would matter.
Fix
Add a bag nudge: “Add a second belt, save 15%”, with Rebuy suggestions limited to in-stock sizes and the other hardware finish of the same style. Test a shoppable Hollyhock row under the hero against the editorial layout (T2 and T5).
Owner eCommEffort 1–2 daysMeasure AOV, units per order
12
MediumPerformance · tags
Heavy pages: three copies of one 1080p video, a doubled GA4 tag, 30+ third parties.
Lighthouse 12, mobile, lab run from a cloud server (directional) · page source · resource timingHollyhock Black Silver page: 3 autoplaying <video> tags for the same 1080p 7.2 Mbps file · 26.7 MB total transfer
Performance score: homepage 31 · product page 26 (LCP 6.2 s / 21.9 s)
third-party main-thread blocking ≈ 5.9 s: Google Tag Manager 2.9 s · Facebook 0.9 s · Klaviyo 0.5 s · Rebuy 0.5 s · Yandex Metrica 0.2 s
two GTM containers (GTM-KSX9D6X, GTM-P8P6WVRR) · GA4 G-Q891RMV74D loaded twice
New Arrivals: 546 requests · 5,514 DOM elements
Luxury traffic arrives mostly on phones, from Instagram and email, and a slow first product page loses sales. A doubled GA4 tag can also double-count, which undermines the weekly numbers.
Fix
Load the video once, at 720p on mobile with a poster image. Consolidate to one GTM container, remove unused pixels (why is Yandex Metrica there?), and delay below-the-fold apps. Confirm the gains with field data (Search Console Core Web Vitals, CrUX) before and after.
This runs in your browser on a copy of all 164 live products taken September 16. To check today's catalog, save dehanche.com/products.json?limit=250 and drop the file in below; the same rules run again. As a scheduled job, it would email the list before stand-up.
Snapshot · Sept 16, 2026 · 164 products
Product
Type
Sizes in stock
Issues
Priority
The file stays on your computer; nothing is uploaded anywhere.
Priority adds up issue weights: high 5, medium 3, low 1. The rules mirror flags 01–08. Product names and data come from dehanche.com's public product feed.
Tool · revenue pacing
Where are we against target, today?
The posting asks for daily and hourly pacing against weekly and monthly targets. This is the board I'd build in the first week. Every number here is a sample until it's connected to Shopify and your real targets; change the inputs to see how it responds.
Sample data · not Déhanche's numbers
Pace is weighted by day of week, heavier on weekends and email-send days, rather than split evenly across the month.
Revenue to date (sample)Pace needed to hit target
Show the numbers as a table
Day
Revenue to date
Pace
Gap
Email · six flow concepts for the Klaviyo team
Use sales data to time every send.
The posting asks the eComm Manager to use real-time sales, product and customer data to shape email. These are six places where that data changes what gets sent and when. All are concepts to build with the email team, using products and prices from the live site.
01 · Your size is back
Recovered revenue
Trigger: a back-in-stock request for one size.e.g. Constance Black Silver, size S, sold out today
Email when that size restocks. Subject: “Your size is back: Constance, S”.instant
Reminder only if the shopper hasn't bought and two or fewer are left: “Two left in S”.+24 hours
Exit when they order that size.
requested back-in-stock · variant option = S
AND not ordered variant since request
02 · The second belt
AOV · repeat rate
Trigger: an order with exactly one full-price belt.
Wait until the belt has been worn once.delivered + 3 days
Email: “Two belts, fifteen percent”. It leads with the other finish of the same style, e.g. Constance Black Silver → Constance Black Gold, $250.
Skip anyone with a return or exchange open; send at most once every 90 days.
placed order · belts_full_price = 1
AND NOT return_started · last 90 days
03 · Match the hardware
Jewelry attach
Trigger: a belt delivered three weeks ago.
Branch on the metal metafield: silver, gold or mixed.
Email: “The same five rings, for your ears”. A Hollyhock Black Silver buyer sees Hollyhock Silver Earrings Medium, $320.
Stop once they've bought jewelry in that finish.
delivered belt · 21 days ago
metal = metafield(custom.metal) ← needs flag 04 cleanup
04 · Fit, before doubt
Conversion
Trigger: opened “Find my fit” but didn't add to cart.+2 hours, known subscribers
Email: how sizing works. Measure where you'll wear it (waist or hips); ten holes follow the figure; exchanges are easy.
Add a stock note if the viewed style has Low Availability in any size.
Exit on add to cart.
custom event “Viewed Fit Guide” (from the sizing sheet)
AND NOT Added to Cart within 2h
05 · First access
Launch-day revenue
Trigger: a launch date, e.g. Resort 2027 (the collection already exists).
VIP link to customers with 2+ orders or one of $500+, plus the collection's waitlist.launch − 24 h
General send: the lookbook, then the shop.launch day
Sizes going fast: only styles with two or fewer left in any size.+48 h
VIP = orders ≥ 2 OR max_order ≥ $500
“going fast” = any size inventory ≤ 2
06 · The pace-keeper
Close the gap
Trigger: the pacing board shows month-to-date more than 8% behind by the 15th.
Send a pre-built campaign to subscribers who engaged but haven't bought in 90 days.
Feature best sellers with full size runs only, never final sale, with no discount on core styles.
Cap at once a month; the report records what it recovered.
IF mtd_revenue < 0.92 × pace(day 15)
THEN schedule campaign “Hollyhock, all sizes”
Flow 01, written out
A short, specific email with one action.
Subject: Your size is back: Constance, S Preview: Constance Black Silver · S · back in stock today.
It names the exact size, shows one product, and has one button that opens the page with size S already selected. It doesn't discount the belt.
Its value is measured as revenue per back-in-stock request, and it's only a good report number if flag 01's waitlist tiles are feeding it.
Concept · written by Mousa for this application
Your size is back: Constance, SConstance Black Silver · S · back in stock today.
DÉHANCHE
Your size is back.
You asked us to tell you. Constance Black Silver in S is available again, in small numbers.
Free US ground shipping over $250 · Handmade in Italy
A continuous CRO roadmap
Eight tests, ranked.
Scored with ICE (impact, confidence, ease; 1–10 each). Each test has one metric, a guardrail and a named audience. Sort by any column. I've run A/B and conversion tests before, and this is the list I'd start from.
Hypothesis
Launch QA · Resort 2027
Everything checked before it goes live.
The posting asks for launches that are prepared, tested and correct. This checklist would run before every drop. Ticks are saved in this browser, so you can try it.
0 of 0 checked
Worked examples · the rest of the posting
Seven more lines from the job, worked through.
Each tab takes one responsibility from the posting and shows how I'd handle it at Déhanche. Prices, the two-belt offer and the $250 shipping line come from dehanche.com on September 16. Traffic, order and customer numbers are samples, and marked that way, until they come from Shopify, GA4 and Klaviyo.
From the postingOwn daily and hourly revenue pacing against monthly and weekly sales targets
Sample inputs · change them
Revenue is sessions × conversion × order value. A target only becomes workable once it's split into those three, because each has different owners and different fixes.
Close the gap: pick the moves
The lift on each move is a planning assumption, not a promise. In the first month I'd replace these with Déhanche's own test results and last year's numbers.
The monthly target, split by week
Week
Days
Target
Share
Weighted by day of week with the same weights as the pacing board, so weekends and email-send days carry more.
From the postingdetermine what can be done that day to move it
Sample day · Wed, Sept 16
The expected curve is a typical weekday shape: a bump after the 10 am send and an evening peak on phones. Connected to Shopify, it would come from Déhanche's last eight of the same weekday.
Revenue so far (sample)Expected by each hour
Before acting on a dip, I'd confirm it in Shopify orders, not just GA4. GA4 loads twice on the site right now (flag 12), so its numbers can mislead.
From the postinguse real-time sales, product and customer data to inform email strategy, segmentation, timing and commercial pushes
The Klaviyo team owns the sends. My part is the live data behind them: what's behind pace, what's in stock, and who has been looking at what. These are the segments I'd ask for in the first week, written the way Klaviyo's segment builder reads.
S1
Hollyhock lookers, no order
Viewed Product at least 2 times · last 14 days
where product name contains "Hollyhock"
AND Placed Order zero times · last 30 days
AND can receive email marketing
Use
Same-day pushes when we're behind pace: the Hollyhock they looked at, in sizes that are in stock.
Note
Swap “Hollyhock” for whichever family needs to move.
S2
One belt, no second yet
Placed Order equals 1 · over all time
AND Ordered Product at least once · over all time
where product type equals "belt"
AND Placed Order zero times · last 35 days
Use
The live offer, 15% off two full-price belts, showing the same style in the other finish (flow 02).
Note
Wait until week five: second orders pick up after day 30 in the cohort read (tab 04, sample).
S3
Gold hardware owners
Ordered Product at least once · over all time
where product name contains "Gold"
after the metafield cleanup (flag 04):
where metal equals "24K gold-plated"
Use
The piece that repeats their buckle: the Koru choker for a Koru belt, Tetra earrings for a Tetra (tab 05).
Note
“Two Tone” titles name neither metal; metafields fix that.
S4
Silver hardware owners
Ordered Product at least once · over all time
where product name contains "Silver"
after the metafield cleanup (flag 04):
where metal equals "Silver"
Use
Hollyhock silver earrings, the Brancusi silver cuff and choker.
Note
Mixed-metal buyers belong in both S3 and S4.
S5
Size waitlist
Subscribed to Back in Stock
at least once · last 90 days
AND Placed Order zero times · last 7 days
Use
Restock alerts by size. The count per style is also a reorder signal I'd pass to Inventory.
Note
Grows once sold-out tiles offer the waitlist (flag 01).
S6
VIP
Placed Order at least 3 times · over all time
OR Predicted customer lifetime value
is at least $1,500
Use
First access to drops (flow 05). No discount codes.
Note
$1,500 is a placeholder; set it from the real spread of lifetime value.
S7
Lapsing, still browsing
Placed Order at least once · over all time
AND Placed Order zero times · last 180 days
AND Active on Site at least once · last 60 days
Use
The Fall 2026 story and new shapes, not a discount.
Note
They're still visiting, so lead with product, not price.
S8
Outside the US, engaged
Properties about someone
Country is not "United States"
AND Active on Site at least once · last 30 days
Use
Global-e markets: local prices, delivery times and holiday cutoffs by country.
Note
Send by the customer's time zone, not Eastern.
Always excluded: anyone who ordered in the last 5 days, Smart Sending on, and a sunset for people with no opens or clicks in 120 days. Exact property names depend on the Shopify integration, so I'd confirm them with the Klaviyo team on day one.
Same-day push: who gets what when we're behind
At the 1 pm read
Ask the Klaviyo team for
What it shows
Guardrail
Less than 5% behind
Nothing yet. Read again at 4 pm.
—
—
5–10% behind
A 6 pm email to S1
The family they viewed, sizes in stock
No discount
More than 10% behind
S1 at 6 pm, then S2 at 7 pm
For S2: the live 15%-off-two offer, in the other finish
No new codes without marketing's sign-off
More than 8% behind after the 15th
Flow 06, the pace-keeper
Best sellers with full size runs
S6 VIPs only get first-access sends
Every push keeps a 10% holdout, so the weekly note can say what the send added, not just what it touched.
Launch week: site and email on the same clock
T−7VIP teaser to S6. Every new product record checked against the launch list.
T−1Staging review: collection, homepage, product pages, and prices in each Global-e market.
T010 am launch email. Homepage and navigation switch in the same minute; hourly pacing on.
T+2People who viewed the drop but didn't order: S1, rebuilt on the new family.
T+7Sell-through by style and size: reorder, restage or leave it. Findings go in Monday's note.
From the postingAnalyze performance by product, category, geography, customer cohort and traffic source
Sample data · last 30 days
What I'd do about it
Every read ends in an action with an owner. The real version would come from Shopify and GA4 every Monday.
From the postingimprove conversion and AOV through merchandising, cross-selling, bundling, product recommendations
dehanche.com · Sept 1684 of 85
full-price belts in stock cost $250 or more, so free shipping at $250 doesn't raise belt orders. It only matters for Mini Hutch ($190) and 21 sale styles (test T7).
dehanche.com · Sept 1615% off two
full-price belts is the live offer that raises order value, and it only shows in the rotating top banner (flag 11).
dehanche.com · Sept 1628 pieces
of jewelry are in stock at full price, with a median price of $350. Several repeat a belt's buckle exactly, which makes them the easiest second item.
Complete the set: jewelry that repeats the buckle
Real products, prices and stock from dehanche.com on September 16. Where it would live: a “wear it with” row on the product page (T8), a line under the belt in the bag, and an S3/S4 email three weeks after delivery.
The live offer: two full-price belts, 15% off
The default is the same style in both finishes, the suggestion I'd put in the bag (T2).
What a better attach rate is worth
Sample inputs
$350 is the real median price of in-stock, full-price jewelry. The order count and attach rates are samples.
From the postingbriefing a developer
How I'd hand two of the flags to a developer: context with evidence, a clear scope, acceptance criteria that can be tested, and how we'll know it worked. Ready to paste into Jira, Linear or an email.
DEH-101 · Merchandising · from flag 01
Sold-out products drop to the end of collection grids, and their tiles offer the waitlist
Collection order is set by hand, so sold-out products stay where they were placed. On September 16, slot 10 of All Belts was a belt sold out in all five sizes, while the $250 best sellers sat at slots 33 and 34.
/collections/belts · desktop 1440px · Sept 16Slot 10 → SOLD OUT Hollyhock Crystal Black Silver · $495 · 0 of 5 sizes
Slot 33 → Constance Black Silver · $250 · Best Seller badge
Slot 34 → Constance Black Gold · $250 · Best Seller badge
Build
Products with no available size move after every in-stock product, in every collection grid. The hand-set order of in-stock products doesn't change.
A sold-out tile shows “Join the waitlist” and opens the back-in-stock form for that product. No price-only dead end.
When any size comes back, the product returns to its hand-set position.
Approach
Sort where the grid is built. If Algolia renders collection pages, rank on an in-stock attribute there. If Shopify does, use a sold-out-last app or a small job that calls the Admin API's collectionReorderProducts when inventory changes. Don't sort in Liquid per page, because that breaks across pages.
Done when
Given a product with zero available sizes, when any collection page loads, then it appears after all products with at least one size available.
Given an in-stock product in slot 5, when another product sells out, then its order relative to the other in-stock products is unchanged.
Given a sold-out product restocks one size, when the next inventory sync runs, then it's back in its hand-set slot within 15 minutes.
Given a sold-out tile, then it shows “Join the waitlist” and no add-to-cart, on mobile and desktop, with filters applied.
QA
On a duplicate theme, set a test product's stock to 0 and check All Belts, Best Sellers and New Arrivals.
Restock one size and confirm it moves back.
Run Lighthouse on All Belts before and after to confirm the page isn't slower.
Measure & rollback
Collection click-through, add-to-cart rate from collections, waitlist sign-ups, compared over two weeks before and after.
Rollback: switch the app off or republish the previous theme.
Out of scope: pinning best sellers by price tier. That's a merchandising task, done by hand.
Two Tag Manager containers load on every page, and the GA4 property loads twice. Page views and events can be counted twice, which makes every weekly number less reliable. It also adds main-thread time on phones.
page source · Lighthouse 12 mobile (lab) · Sept 16GTM-KSX9D6X · GTM-P8P6WVRR → two containers
G-Q891RMV74D → loaded twice
Google Tag Manager main-thread time ≈ 2.9 s · Yandex Metrica present
Build
Audit both containers with marketing. List every tag, its owner and whether it's still used.
Move the tags that are still needed into one container and remove the other snippet from the theme.
Confirm the purchase event fires once through Shopify's customer events.
Remove pixels no one owns, such as Yandex Metrica, after marketing confirms.
Done when
Given the homepage, a collection, a product page and checkout, when Tag Assistant runs, then it shows one GA4 configuration for G-Q891RMV74D.
Given a test order, when it completes, then GA4 DebugView shows exactly one purchase event.
Given any page load, then DebugView shows one page_view.
Measure & note
GA4 sessions and page views will drop when duplicates stop. I'd mark the change date in the weekly note so no one reads it as a real decline, and compare conversion with Shopify's own numbers for two weeks.
From the postingexplains what happened, why it happened, where we are against target, and what we are going to do about it
The note rewrites itself when the pacing board changes: try “Ahead of pace” or a different day. Causes are sample text; the flag references are real findings from this report.
The first ninety days
Learn it, fix it, then grow it.
The first month is for learning the business and fixing what's clearly broken. Targets get set once I've seen the real numbers.
30days
Learn & fix
Learn the targets, the weekly rhythm and the launch calendar with Erin, Lindsey and Ops.
Pacing board live on real Shopify data; first Monday report.
Tags moved to metafields; filters and feed rebuilt on them.
T1 (size row) and T2 (second-belt nudge) running.
Flows 01 and 02 live with the Klaviyo team.
Tag audit and video fix shipped; Core Web Vitals baseline set.
90days
Grow & report
Test roadmap running on a steady cadence, with results in the weekly report.
Performance by product, category, geography, cohort and source every week.
First-access launch sequence (flow 05) used for a drop.
Merchandising playbook written so anyone can run the site the same way.
Who filed this
Mousa Batarseh.
I've spent seven years running e-commerce storefronts end to end, including Shopify stores for apparel and textile brands. I look for problems before anyone reports them, and I'd like to do that for Déhanche.
ShopifyBuilt and ran Shopify and WooCommerce stores for two apparel and textile brands (Universal Wholesale & United Textile, 2019–2023): catalogs of 14,000+ SKUs, collections, launches, promo calendars.
MerchandisingHomepage, collection and navigation merchandising around launches; product data, pricing, inventory and imagery, owned end to end.
NowWebmaster at Wild Bill's Tobacco (2023–now): the wholesale e-commerce site and a portfolio of retail sites, campaign pages and launch readiness with marketing.
TestingI've run A/B and conversion tests, and I work from GA4, Search Console and PageSpeed data.
SearchTook organic rankings to Google pages 1–2 within a year; I handle redirects, metadata and site hygiene myself.
EducationB.S., Accounting Information Systems. Bilingual English and Arabic.