← back to Dw Yolo Loop
dup-title scan (c46): 18,577 ACTIVE products share non-unique titles; 84% generic/template
074660aa2e004eed7e322ecf6eed0bdb47192a8a · 2026-06-16 16:43:21 -0700 · Steve Abrams
Read-only. 3,285 ACTIVE titles shared across >1 handle (18,577 products); ~84%
(2,771) are GENERIC/template titles (vendor+material only — Versace Wallcovering
x99, Roberto Cavalli x149, Coordonne Durable Vinyl x366) — verified distinct real
products (distinct SKU handles) never differentiated by pattern+color. SEO
cannibalization + poor shopper differentiation. NOT accidental dup products
(fleet-dedup handled those). Fix = title-enrichment from existing pattern/color
data; GATED (title rewrite = customer-facing at scale, per banned-word rule).
Files touched
A scripts/dup-title-scan/dup-title-scan.sh
Diff
commit 074660aa2e004eed7e322ecf6eed0bdb47192a8a
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Tue Jun 16 16:43:21 2026 -0700
dup-title scan (c46): 18,577 ACTIVE products share non-unique titles; 84% generic/template
Read-only. 3,285 ACTIVE titles shared across >1 handle (18,577 products); ~84%
(2,771) are GENERIC/template titles (vendor+material only — Versace Wallcovering
x99, Roberto Cavalli x149, Coordonne Durable Vinyl x366) — verified distinct real
products (distinct SKU handles) never differentiated by pattern+color. SEO
cannibalization + poor shopper differentiation. NOT accidental dup products
(fleet-dedup handled those). Fix = title-enrichment from existing pattern/color
data; GATED (title rewrite = customer-facing at scale, per banned-word rule).
---
scripts/dup-title-scan/dup-title-scan.sh | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/scripts/dup-title-scan/dup-title-scan.sh b/scripts/dup-title-scan/dup-title-scan.sh
new file mode 100755
index 0000000..110ad7f
--- /dev/null
+++ b/scripts/dup-title-scan/dup-title-scan.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+# dup-title-scan (c46) — READ-ONLY. ACTIVE products sharing an EXACT title across
+# distinct handles = SEO cannibalization + poor shopper differentiation. Finding:
+# 3,285 collision-titles / 18,577 products; ~84% (2,771) are GENERIC/template
+# titles (vendor+material only, e.g. "Versace Wallcovering" x99, "Roberto Cavalli
+# Wallcovering" x149) — real distinct products never differentiated by pattern+
+# color. Fix = title-enrichment (gated, customer-facing). $0 local mirror.
+PSQL=/opt/homebrew/opt/postgresql@14/bin/psql
+DB="postgresql:///dw_unified?host=/tmp"
+$PSQL "$DB" -c "
+with t as (select trim(title) ti, count(distinct handle) h, string_agg(distinct vendor,', ') v
+ from shopify_products where status='ACTIVE' and title is not null and trim(title)<>'' group by trim(title) having count(distinct handle)>1)
+select count(*) collision_titles, sum(h) products,
+ count(*) filter (where ti ~* '(wallcovering|wallpaper|durable|self adhesive)$' or ti !~ ' - ') generic_template
+from t;"
+echo '-- top collisions --'
+$PSQL "$DB" -c "
+select trim(title) title, count(distinct handle) handles, string_agg(distinct vendor,', ') vendors
+from shopify_products where status='ACTIVE' and trim(title)<>'' group by trim(title)
+having count(distinct handle)>1 order by 2 desc limit 15;"
← 463cd18 stage live-price-canary as install-ready launchd package (c4
·
back to Dw Yolo Loop
·
Activate 451 of 467 1838 Wallcoverings drafts (status ACTIVE d44cbed →