← back to Dw Yolo Loop
jsonld-audit: Product JSON-LD structurally healthy (50/50) but 6/50 leak $4.25 sample into offers.price (multi-variant, real variant exists) — schema.org echo of $4.25 problem; distinct from GMC channel feed (organic rich results + Merchant-Center disapproval)
2845706a699c201a58044f2c1c432dd20841fd07 · 2026-06-17 12:02:43 -0700 · Steve Abrams
Files touched
A scripts/jsonld-audit/jsonld-audit-2026-06-17.jsonA scripts/jsonld-audit/jsonld-audit.mjs
Diff
commit 2845706a699c201a58044f2c1c432dd20841fd07
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed Jun 17 12:02:43 2026 -0700
jsonld-audit: Product JSON-LD structurally healthy (50/50) but 6/50 leak $4.25 sample into offers.price (multi-variant, real variant exists) — schema.org echo of $4.25 problem; distinct from GMC channel feed (organic rich results + Merchant-Center disapproval)
---
scripts/jsonld-audit/jsonld-audit-2026-06-17.json | 667 ++++++++++++++++++++++
scripts/jsonld-audit/jsonld-audit.mjs | 88 +++
2 files changed, 755 insertions(+)
diff --git a/scripts/jsonld-audit/jsonld-audit-2026-06-17.json b/scripts/jsonld-audit/jsonld-audit-2026-06-17.json
new file mode 100644
index 0000000..d549152
--- /dev/null
+++ b/scripts/jsonld-audit/jsonld-audit-2026-06-17.json
@@ -0,0 +1,667 @@
+{
+ "ts": "2026-06-17T19:00:53.540Z",
+ "sampled": 50,
+ "summary": {
+ "product": 50,
+ "missing": 0,
+ "errs": 0,
+ "parseFails": 0,
+ "noOffer": 0,
+ "badCurrency": 0,
+ "badAvail": 0,
+ "sampleTraps": 6,
+ "mismatches": 0
+ },
+ "rows": [
+ {
+ "h": "venezia-glass-beads-wall-paper-gold-gls-111-glass-beads-gold",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 81.47,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 81.47,
+ "maxV": 81.47,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "venezia-glass-beads-red-rock-gls-113-glass-beads-red-rock",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 4.25,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 4.25,
+ "maxV": 81.47,
+ "sampleTrap": true,
+ "priceMismatch": false
+ },
+ {
+ "h": "venezia-tm-glass-beads-silver-gls-112-glass-beads-silver",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 4.25,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 4.25,
+ "maxV": 81.41,
+ "sampleTrap": true,
+ "priceMismatch": false
+ },
+ {
+ "h": "venezia-glass-beads-pinki-gls-115-glass-beads-pinki",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 4.25,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 4.25,
+ "maxV": 81.47,
+ "sampleTrap": true,
+ "priceMismatch": false
+ },
+ {
+ "h": "venezia-glass-beads-coffee-gls-116-glass-beads-coffee",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 4.25,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 4.25,
+ "maxV": 81.47,
+ "sampleTrap": true,
+ "priceMismatch": false
+ },
+ {
+ "h": "venezia-glass-beads-bronzino-gls-114-glass-beads-bronzino",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 4.25,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 4.25,
+ "maxV": 81.41,
+ "sampleTrap": true,
+ "priceMismatch": false
+ },
+ {
+ "h": "the-original-heavy-madagascar-cloth-raffia-wall-paper-mad-100",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 4.25,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 4.25,
+ "maxV": 105.89,
+ "sampleTrap": true,
+ "priceMismatch": false
+ },
+ {
+ "h": "grasscloth-wiki-horizontal-aba-311",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 27.06,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 27.06,
+ "maxV": 27.06,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "grasscloth-tightwiki-ab327-deep-wedgewood-blue-grs-ab327",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 42.5,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 42.5,
+ "maxV": 42.5,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "grasscloth-tightwiki-ab320-peach-grasscloth-tightwiki-ab320-peach",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 37.5,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 37.5,
+ "maxV": 37.5,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "grasscloth-tightwiki-light-blue-grs-1825",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 42.5,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 42.5,
+ "maxV": 42.5,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "grasscloth-tightwiki-chocolate-mocha-grs-1819",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 37.5,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 37.5,
+ "maxV": 37.5,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "grasscloth-tightwiki-tight-caramel-grasscloth-tightwiki-ab305-light",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 37.5,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 37.5,
+ "maxV": 37.5,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "grasscloth-tightwiki-ab318-golden-yellow-grasscloth-tightwiki-ab318-gyell",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 37.5,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 37.5,
+ "maxV": 37.5,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "grasscloth-tightwiki-mixed-naturals-grs-1808",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 18.82,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 18.82,
+ "maxV": 18.82,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "dwkk-g181f708c",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 250.43,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 250.43,
+ "maxV": 250.43,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "dwkk-g580f4af0",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 250.43,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 250.43,
+ "maxV": 250.43,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "dwkk-g24d3e005",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 250.43,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 250.43,
+ "maxV": 250.43,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "dwkk-g3480a31d",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 595.65,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 595.65,
+ "maxV": 595.65,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "dwkk-g918ec5d6",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 195.3,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 195.3,
+ "maxV": 195.3,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "dwkk-g5e29eff8",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 195.3,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 195.3,
+ "maxV": 195.3,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "dwkk-gae880958",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 132.3,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 132.3,
+ "maxV": 132.3,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "dwkk-gc98ca38f",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 132.3,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 132.3,
+ "maxV": 132.3,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "dwkk-gf0fdccb1",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 132.3,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 132.3,
+ "maxV": 132.3,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "dwkk-g9526101c",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 132.3,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 132.3,
+ "maxV": 132.3,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "dwkk-g82a96688",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 195.3,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 195.3,
+ "maxV": 195.3,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "dwkk-gf29b7324",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 195.3,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 195.3,
+ "maxV": 195.3,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "dwkk-g2178eefb",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 195.3,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 195.3,
+ "maxV": 195.3,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "dwkk-g1eba1890",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 207.9,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 207.9,
+ "maxV": 207.9,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "dwkk-g69084daf",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 207.9,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 207.9,
+ "maxV": 207.9,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "prw-920226-den-323",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 67.98,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 67.98,
+ "maxV": 67.98,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "prw-920227-den-353",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 67.98,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 67.98,
+ "maxV": 67.98,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "prw-920228-den-373",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 67.98,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 67.98,
+ "maxV": 67.98,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "prw-920229-den-381",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 67.98,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 67.98,
+ "maxV": 67.98,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "prw-920230-den-382",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 67.98,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 67.98,
+ "maxV": 67.98,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "prw-920231-den-383",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 67.98,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 67.98,
+ "maxV": 67.98,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "prw-920232-den-746",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 67.98,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 67.98,
+ "maxV": 67.98,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "prw-920233-den-786",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 67.98,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 67.98,
+ "maxV": 67.98,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "prw-920234-den-810",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 67.98,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 67.98,
+ "maxV": 67.98,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "prw-920235-den-813",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 67.98,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 67.98,
+ "maxV": 67.98,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "prw-920236-den-833",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 67.98,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 67.98,
+ "maxV": 67.98,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "prw-920237-den-843",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 67.98,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 67.98,
+ "maxV": 67.98,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "prw-920238-den-883",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 67.98,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 67.98,
+ "maxV": 67.98,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "prw-920239-doj-01",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 67.98,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 67.98,
+ "maxV": 67.98,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "prw-920240-doj-02",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 65.09,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 65.09,
+ "maxV": 65.09,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "dalila-hand-screen-print-yellow-wallcovering-schumacher",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 68.78,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 4.25,
+ "maxV": 68.78,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "stablewood-dwtt-72420",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 262.26,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 4.25,
+ "maxV": 262.26,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "indah-batik-sage-wallcovering-schumacher",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 43.44,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 4.25,
+ "maxV": 43.44,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "indah-batik-neutral-wallcovering-schumacher",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 43.44,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 4.25,
+ "maxV": 43.44,
+ "sampleTrap": false,
+ "priceMismatch": false
+ },
+ {
+ "h": "indah-batik-aqua-wallcovering-schumacher",
+ "hasProduct": true,
+ "parseFail": false,
+ "hasOffer": true,
+ "ldPrice": 43.44,
+ "currency": "USD",
+ "availability": "InStock",
+ "minV": 4.25,
+ "maxV": 43.44,
+ "sampleTrap": false,
+ "priceMismatch": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/scripts/jsonld-audit/jsonld-audit.mjs b/scripts/jsonld-audit/jsonld-audit.mjs
new file mode 100644
index 0000000..977b9c8
--- /dev/null
+++ b/scripts/jsonld-audit/jsonld-audit.mjs
@@ -0,0 +1,88 @@
+// jsonld-audit — READ-ONLY, $0. Samples live PDPs, parses the Product schema.org
+// JSON-LD, validates presence + well-formedness + offers(price/currency/availability),
+// and — the high-value check (DTD/officer flagged) — cross-references the JSON-LD
+// offer price against the product's ACTUAL variant prices to catch the $4.25
+// SAMPLE-TRAP leaking into structured data (which would be a Google rich-result +
+// Merchant-Center disapproval risk). All live; no writes.
+const WWW='https://www.designerwallcoverings.com';
+const UA='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function get(u){for(let a=0;a<4;a++){try{const r=await fetch(u,{headers:{'User-Agent':UA}});if(r.status===429){await sleep(1500*(a+1));continue;}return {status:r.status,text:await r.text()};}catch(e){await sleep(800*(a+1));}}return {status:0,text:''};}
+
+// 1. gather live handles from several product sitemaps (vendor/age diversity)
+const smIdx=await get(`${WWW}/sitemap.xml`);
+const prodMaps=[...smIdx.text.matchAll(/<loc>([^<]+sitemap_products_\d+\.xml[^<]*)<\/loc>/g)].map(m=>m[1].replace(/&/g,'&')).filter(u=>!/\/en-ca\//.test(u));
+// take a spread: first, middle, last few maps
+const pick=[prodMaps[0],prodMaps[Math.floor(prodMaps.length/3)],prodMaps[Math.floor(2*prodMaps.length/3)],prodMaps[prodMaps.length-1]].filter(Boolean);
+let handles=[];
+for(const sm of pick){ const x=await get(sm); const hs=[...x.text.matchAll(/<loc>[^<]*\/products\/([^<\/?]+)/g)].map(m=>m[1]); handles.push(...hs.slice(0,15)); await sleep(150); }
+handles=[...new Set(handles)].slice(0,50);
+console.log(`=== jsonld-audit (READ-ONLY, $0) ===\nsampling ${handles.length} live PDPs\n`);
+
+function parseProduct(html){
+ const blocks=[...html.matchAll(/<script type="application\/ld\+json">([\s\S]*?)<\/script>/g)].map(m=>m[1]);
+ let parseFail=false, product=null;
+ for(const b of blocks){
+ let j; try{ j=JSON.parse(b); }catch{ parseFail=true; continue; }
+ const cands=j['@graph']?j['@graph']:[j];
+ for(const c of cands){ if(c['@type']==='Product') product=c; }
+ }
+ return {blockCount:blocks.length, parseFail, product};
+}
+
+const rows=[];
+let done=0;
+for(const h of handles){
+ const pdp=await get(`${WWW}/products/${h}`);
+ if(pdp.status!==200){ rows.push({h,err:'pdp '+pdp.status}); done++; continue; }
+ const {blockCount,parseFail,product}=parseProduct(pdp.text);
+ // actual variant prices
+ const pj=await get(`${WWW}/products/${h}.json`);
+ let variantPrices=[]; try{ variantPrices=(JSON.parse(pj.text).product?.variants||[]).map(v=>parseFloat(v.price)); }catch{}
+ const minV=variantPrices.length?Math.min(...variantPrices):null;
+ const maxV=variantPrices.length?Math.max(...variantPrices):null;
+ const off=product?.offers;
+ const offer=Array.isArray(off)?off[0]:off;
+ const ldPrice=offer?parseFloat(offer.price):null;
+ const row={
+ h,
+ hasProduct: !!product,
+ parseFail,
+ hasOffer: !!offer,
+ ldPrice,
+ currency: offer?.priceCurrency||null,
+ availability: (offer?.availability||'').replace(/https?:\/\/schema\.org\//,''),
+ minV, maxV,
+ sampleTrap: (ldPrice!==null && ldPrice<=4.25 && maxV!==null && maxV>4.25), // JSON-LD shows sample price while a real variant exists
+ priceMismatch: (ldPrice!==null && minV!==null && maxV!==null && (ldPrice<minV-0.01 || ldPrice>maxV+0.01)),
+ };
+ rows.push(row);
+ done++;
+ if(done%10===0) console.log(` ${done}/${handles.length}`);
+ await sleep(180);
+}
+
+const ok=rows.filter(r=>r.hasProduct);
+const noProduct=rows.filter(r=>!r.hasProduct && !r.err);
+const errs=rows.filter(r=>r.err);
+const parseFails=rows.filter(r=>r.parseFail);
+const noOffer=ok.filter(r=>!r.hasOffer);
+const badCurrency=ok.filter(r=>r.hasOffer && r.currency!=='USD');
+const badAvail=ok.filter(r=>r.hasOffer && !['InStock','OutOfStock','PreOrder','BackOrder','Discontinued'].includes(r.availability));
+const sampleTraps=rows.filter(r=>r.sampleTrap);
+const mismatches=rows.filter(r=>r.priceMismatch && !r.sampleTrap);
+
+console.log(`\n=== RESULTS (${rows.length} sampled) ===`);
+console.log(`Product JSON-LD present: ${ok.length} | missing: ${noProduct.length} | pdp-fetch-err: ${errs.length}`);
+console.log(`JSON parse failures: ${parseFails.length}`);
+console.log(`has offers: ${ok.length-noOffer.length} | no offers block: ${noOffer.length}`);
+console.log(`currency != USD: ${badCurrency.length}`);
+console.log(`invalid availability value: ${badAvail.length}`);
+console.log(`\n*** $4.25 SAMPLE-TRAP in JSON-LD (ld price<=4.25 but real variant exists): ${sampleTraps.length} ***`);
+console.log(`other price mismatch (ld price outside variant range): ${mismatches.length}`);
+if(sampleTraps.length) sampleTraps.slice(0,15).forEach(r=>console.log(` TRAP - ${r.h}: ld=$${r.ldPrice} vs variants $${r.minV}-$${r.maxV}`));
+if(mismatches.length) mismatches.slice(0,10).forEach(r=>console.log(` MISMATCH - ${r.h}: ld=$${r.ldPrice} vs $${r.minV}-$${r.maxV}`));
+
+import fs from 'fs';
+fs.writeFileSync('/tmp/jsonld-audit.json',JSON.stringify({ts:new Date().toISOString(),sampled:rows.length,summary:{product:ok.length,missing:noProduct.length,errs:errs.length,parseFails:parseFails.length,noOffer:noOffer.length,badCurrency:badCurrency.length,badAvail:badAvail.length,sampleTraps:sampleTraps.length,mismatches:mismatches.length},rows},null,2));
+console.log('\nwrote /tmp/jsonld-audit.json');
← 1bc3c5b empty-collections audit: 575 advertised -> ~37 live-empty +
·
back to Dw Yolo Loop
·
jsonld-425-scan: sized the $4.25 JSON-LD leak — 87.8% of mul 0f99d97 →