[object Object]

← back to Ga Allsites

rollout-status: cycle 10 — Meta on 3 storefronts via app-template inject; parked domains skipped (ad-audience scoping)

5a20bdbcf6b2df6119579696e2664a844adb9889 · 2026-08-17 16:07:25 -0700 · Steve Abrams

Files touched

Diff

commit 5a20bdbcf6b2df6119579696e2664a844adb9889
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Mon Aug 17 16:07:25 2026 -0700

    rollout-status: cycle 10 — Meta on 3 storefronts via app-template inject; parked domains skipped (ad-audience scoping)
---
 _track_audit.py       | 36 ++++++++++++++++++++++++++++++++++++
 gtm/rollout-status.md | 17 +++++++++++++++++
 2 files changed, 53 insertions(+)

diff --git a/_track_audit.py b/_track_audit.py
new file mode 100644
index 0000000..bfd1309
--- /dev/null
+++ b/_track_audit.py
@@ -0,0 +1,36 @@
+import json,pathlib,re,ssl,urllib.request
+from concurrent.futures import ThreadPoolExecutor
+sites=[s["domain"] for s in json.load(open("/Users/macstudio3/Projects/domain-landings/data/all-sites.json"))]
+ctx=ssl.create_default_context(); ctx.check_hostname=False; ctx.verify_mode=ssl.CERT_NONE
+PAT={
+ "ga4":  re.compile(r"(gtag/js\?id=G-|gtag\('config',\s*'G-|G-[A-Z0-9]{8,})"),
+ "meta": re.compile(r"(connect\.facebook\.net|fbq\('init'|fbevents\.js|facebook.*pixel)",re.I),
+ "gads": re.compile(r"(gtag/js\?id=AW-|AW-\d{6,}|googleadservices)"),
+ "gtm":  re.compile(r"(googletagmanager\.com/gtm\.js|GTM-[A-Z0-9]+)"),
+}
+def probe(d):
+    for s in ("https","http"):
+        try:
+            req=urllib.request.Request(f"{s}://{d}/",headers={"User-Agent":"Mozilla/5.0"})
+            html=urllib.request.urlopen(req,timeout=12,context=ctx).read(250000).decode("utf-8","ignore")
+            return (d,{k:bool(p.search(html)) for k,p in PAT.items()},True)
+        except Exception:
+            if s=="http": return (d,{},False)
+    return (d,{},False)
+res=list(ThreadPoolExecutor(max_workers=24).map(probe,sites))
+reach=[r for r in res if r[2]]
+def pct(k): 
+    n=sum(1 for _,f,ok in reach if f.get(k)); return f"{n}/{len(reach)} ({100*n//max(1,len(reach))}%)"
+print(f"reachable: {len(reach)}/{len(res)}")
+print(f"  GA4:        {pct('ga4')}")
+print(f"  Meta pixel: {pct('meta')}")
+print(f"  Google Ads: {pct('gads')}")
+print(f"  GTM:        {pct('gtm')}")
+# who lacks GA4? who lacks meta?
+no_ga4=sorted(d for d,f,ok in reach if not f.get('ga4'))
+no_meta=sorted(d for d,f,ok in reach if not f.get('meta'))
+pathlib.Path("cache/_no_ga4_all.json").write_text(json.dumps(no_ga4))
+pathlib.Path("cache/_no_meta_all.json").write_text(json.dumps(no_meta))
+print(f"\nreachable sites WITHOUT GA4: {len(no_ga4)}")
+print(f"reachable sites WITHOUT Meta pixel: {len(no_meta)} (essentially all — no pixel deployed yet)")
+print("no-GA4 sample:", no_ga4[:15])
diff --git a/gtm/rollout-status.md b/gtm/rollout-status.md
index 15a6762..c5b03c0 100644
--- a/gtm/rollout-status.md
+++ b/gtm/rollout-status.md
@@ -114,3 +114,20 @@ Both recovered (dl-batch-1 map stripped; naturaltextilewallpaper deduped) — ng
 DECISION: PAUSE the shared-conf Meta injection. It needs a SAFE mechanism (a real per-host `if ($host = ...)`
 location block, or app-template injection), not nginx map/stacked-sub_filter. Do NOT retry the map approach.
 Single-conf + static DW sites are the safe surface and are DONE.
+
+## CYCLE 10 — Meta via app-template injection (Steve's choice) → +3 storefronts, 14 total
+Steve chose app-template injection over more nginx edits. Resolved the 22 "missing Meta" DW sites:
+  - **15 are PARKED "buy this domain" sale pages** (domain-landings app :9794, Host-routed). DELIBERATELY
+    SKIPPED — putting the DW ad-retargeting pixel on parked domain-sale pages pollutes the wallcovering
+    ad audience with domain-buyers (honors the "scope Meta to ad-funnel, not all" rule). GA4 stays (fine).
+  - **2 CF-fronted** (philipperomano.com, interiordesignershowroom.com) — origin inject won't surface until
+    a Cloudflare cache purge (gated). Deferred.
+  - **2 non-funnel** (carmelwallpapers = staged-for-active viewer; designersalesreps = a reps directory) — skip.
+  - **3 genuine Kamatera storefronts → Meta injected + LIVE:** customdigitalmurals.com (server.js :9896),
+    goldleafwallpaper.com (index.html :9890), hollywoodwallcoverings.com (server.js :9832).
+Method: pull file → inject standard fbq snippet before </head> (idempotent) → node --check → rsync → pm2 restart → verify live.
+GOTCHA logged: first injection pass silently no-op'd (relative-path/cwd mismatch in the heredoc); fixed by
+passing the abs base dir as argv and verifying pixel_count immediately after each write. Always verify the
+write landed locally BEFORE rsync.
+META TOTAL: 14 DW storefronts live (11 prior + these 3). Remaining Meta gaps are parked (skip by design)
+or CF-cached (need purge). No nginx touched this cycle — zero fleet risk.

← 1ebbbf8 rollout-status: cycle 9 — Meta pixel paused on shared confs  ·  back to Ga Allsites  ·  rollout-status: cycle 11 — GA4 35/41 (CF cache self-expired) 1100373 →