Session handover — 2026-07-05¶
SEO fundamentals slice for the CMS path, then swapped the deployed demo to
waterfordcountypainters to prove the fix live. Work on master.
Motivation: side-by-side vs live showed the emdash build had page titles but blank meta descriptions and no structured data — the live Wix sites carry both. Not a Fable-worthy problem; a plumbing gap. Fixed it.
What changed — where to look¶
SEO extraction + render (the slice). Four files, all this session's commit:
lib/cms/seed-from-build.js— description now falls backmeta[name=description]→og:description(Wix uses the OG tag; that was the blank-meta bug). NewextractBusiness()flattens the crawledLocalBusinessJSON-LD into anfcr.businessglobal block.apps/cms/src/layouts/Base.astro— head brought to parity with the per-siteemit.js(og:type/og:site_name/twitter:*, og:image fallback) and regenerates clean on-domainLocalBusinessJSON-LD from thefcr.businessblock (not the stale crawled one).apps/cms/src/plugins/marketing-blocks/index.ts— registeredfcr.business(Site category) so the globals admin accepts/edits NAP.apps/cms/src/pages/index.astro— bug found on deploy: the static homepage route hardcoded the emdash scaffold's demo description and never readseo_description. Now reads it like[slug].astro.
See the three new known-patterns.md entries (2026-07-05): Wix
og:description tag, regenerate-JSON-LD-from-fields, and static-route
template-SEO leftovers.
Demo swapped garvanbay → wfpainters. Full tenant swap on the deployed
demo to show SEO live. Details + restore recipe in known-issues.md
"CMS demo swapped garvanbay → wfpainters (2026-07-05)". Garvanbay is
recoverable from git + a D1 backup in apps/cms/scripts/.tmp/backup/.
Deployed state¶
- Worker
replatform-emdash-demo(personalcathaldempseyaccount),emdash.dcathal.org. Current versiond45fc179. - Tenant: waterfordcountypainters (D1 reseeded; 95 images uploaded to R2, 0 failed).
- wrangler is authed to the personal account, not FCR Media Ltd —
switch back (
wrangler login) when done with the demo.
Verified (live)¶
Homepage + subpages on emdash.dcathal.org:
meta descriptionpopulated on all pages (was 0/N before) — home and subpages carry real copy.og:type/title/description/url/site_name+twitter:card/title/ descriptionpresent.LocalBusinessJSON-LD: on-domainurl, name, telephone,PostalAddress.
Known gaps opened (see known-issues.md, all 2026-07-05)¶
- Per-site
emit.jshardcodesnoindex,nofollow— launch blocker for the long-tail static path (CMS path unaffected). Reopen trigger: any production launch of a per-site build. - Logo + Wix transform-suffixed image paths don't migrate to R2 — so
og:image/JSON-LD image 404 and some body images are broken on the wfpainters demo. Image-path-normalisation gap intransform-seed-images.mjs, orthogonal to SEO.
Next priorities¶
- Fix the image basename deriver (#2 above) so previews + images resolve — small, own slice; then re-transform + reseed + deploy.
- Env-gate the
emit.jsnoindex before any per-site launch (#1). - Prior pt4 priorities still stand: repeater-item image fields, contact form real submission, access-policy tightening, seed-vs-admin source-of-truth policy.