Headings · Meta · Schema — the three pillars, audited across all four stores.
4-market on-page audit refreshed 2026-04-24 via incremental recrawl — UK 143 / US 86 / DE 100 / FR 118 = 447 pages. 494 FAQs cleaned + verified. All tools built. Nothing deployed to Shopify — paused at the REPLACE-not-AUGMENT deploy gate.
Most recent audit + cleanup runs. Newest first.
| Date | What + Why | Outcome |
|---|---|---|
| 2026-04-24 (evening) |
Incremental recrawl + FAQ accuracy sweep. Why: human team edited 158 products + 98 theme assets on UK since 2026-04-23 baseline. FAQ files still held 31 Ashwagandha + other hallucinations that could not ship. Built new tools/seo_incremental_diff.py (Admin API updated_at_min + sitemap cross-check). Ran 180-URL selective recrawl across 4 stores. Dispatched 8 Sonnet agents (primary + verifier per market) for FAQ ingredient-accuracy cleanup against full_ingredients[sku] gate.
|
180/337 URLs recrawled
58 FAQ edits
Ashwagandha 31 → 0 (US)
Orphan GABA claims resolved
Dashboard commit a42a7de
|
| 2026-04-24 (day) |
FAQ accuracy audit + SOP v1.1 pre-read gate. Why: agent-generated FAQs referenced Ashwagandha / Bacopa / Withania / Lion's Mane / Rhodiola — none of which are in any Brainzyme® SKU. Near-shipped to customers. Root cause: agents used _meta.false_ingredients (image-gen guardrail) instead of full_ingredients[sku] (copy gate).
|
CANONICAL_PRE_READS.md created (402 lines) SOP bumped to v1.1 Cleanup deferred to evening sweep |
| 2026-04-23 |
Deploy attempt HALTED correctly. Why: Opus deploy agent discovered live theme state differs from March 2026 tech map — all 4 stores have embedded @graph JSON-LD in theme.liquid that would collide with new snippet.Revised plan: REPLACE (remove embedded blocks) not AUGMENT (add alongside). |
Halted pre-deploy — zero writes Forensic state documented 337-page baseline captured |
Full chronology: marketing/seo/onpage-audit/CHANGELOG.md. Session state: memory/working-context/session-46-seo-schema-audit.md.
The full 4-market SEO plan — 337 rows across 4 tabs. This is what you approve before we deploy anything. (Rows are baseline-vintage 2026-04-23; newly-discovered URLs from 2026-04-24 recrawl don't yet have planned meta/schema entries.)
| Tab | Rows | Notes |
|---|---|---|
| UK — 101 pages | 101 | 44 PDPs (4 main + 40 legacy SEO LPs) · 57 non-PDPs |
| DE — 90 pages | 90 | Native German · "Alternative zu…" positioning preserved per management exception |
| FR — 74 pages | 74 | Native French · same exception for "Alternative à…" |
| US — 72 pages | 72 | Native US English · FTC rules strict — no drug-comparison exception |
| Workstream folder | F:/Claude Root/marketing/seo/onpage-audit/ |
|---|---|
| Master SOP | SOP.md v1.2 (bumped 2026-04-25 — added Phase 1.5 incremental recrawl + Phase 2.5 FAQ verifier pattern) |
| Changelog | CHANGELOG.md — dated entries with deploy hashes |
| Entity graph SSoT | config/entity_graph.json — v1.0 locked |
| FAQ content SSoT | config/faqs/*.json |
| Canonical Liquid snippets | snippets/*.liquid — 6 files |
| Timestamped audits | audits/{uk,de,fr,us}-*.jsonl + reports |
| Session tracking | memory/working-context/session-46-seo-schema-audit.md |
| Shopify deploy workflow | Shopify Publish SOP v1.6 — drift-check pre-flight mandatory |
What this workstream does, end-to-end. Phases 0–3 + 1.5 + 2.5 complete (1.5 + 2.5 added 2026-04-25 — see SOP v1.2). Phase 4 prep done; execution gated on your approval. Phase 5 (deploy to remaining 3 stores after UK green) is a repeat of Phase 4.
tools/seo_audit_uk.py · async httpx + lxml + extruct · rendered HTML only · 337 pages crawled 2026-04-23 baseline · 447 pages refreshed 2026-04-24 (incremental — see Phase 1.5)tools/seo_incremental_diff.py · Admin API updated_at_min + sitemap cross-check · outputs diff manifests + changed-URL lists · 180/337 URLs re-crawled 2026-04-24 after content team edited 158 products + 98 theme assets · ~60s vs ~45min for full recrawltools/seo_audit_report.py · 22 flag codes · priority matrix · markdown + JSON outputsfull_ingredients[sku] · 58 edits applied 2026-04-24 evening · Ashwagandha 31→0 (US) · 6 rapid-onset FTC claims purged · 6 orphan ELITE-GABA claims now cite real adaptogens · CANONICAL_PRE_READS.md enforces this gate going forward| Decision | Choice | Rationale |
|---|---|---|
| Extraction approach | Custom Python pipeline | Re-usable across markets, integrates with dashboard, free vs Screaming Frog license cap |
| Entity graph: Nootropic | Keep as topical Thing, never as Product.additionalType | AI crawler signal preserved, compliance-safe product typing |
| Entity graph: Neuroenhancement | Remove sitewide | Compliance risk (wiki entity ties to cognitive-enhancement drugs) |
| Entity graph: per-product Things | Dopamine/Motivation on PRO pages · GABA/Stress management on ELITE pages | Matches 4-class lexicon mechanism bindings |
| Product typing | All Products additionalType: DietarySupplement | Accurate category, compliance-safe |
| Judge.me sync | Use native reviews.rating / rating_count metafields — no custom tool | Judge.me already auto-syncs; saves a build step |
Per-market @id | Store-specific ({{ shop.url }}/#organization) | Prevents entity conflation across markets |
| Category A/B/C | A = dot-in-name core products · B = SEO LPs · C = exclusions | Single-axis indexing rule; all A + B SEO-optimised, C noindex/redirect |
| FR/DE drug-comparison language | Permitted for FR + DE only | Management exception — positioning as "alternative to" not "substitute for" |
| US compliance | FTC strict — NO drug-comparison | Exception does NOT extend to US |
| Sample packs | Propose noindex | Freebie seekers don't convert; dilutes product juice |
| 2-pack bundle | Promoted to Cat A | Core commercial product |
The audit produced 8 distinct data layers, each with a specific purpose in the pipeline. Walk through each step to see what it is, where it lives, and how it feeds the final deploy.
sitemap.xml.audits/{uk,de,fr,us}-urls-2026-04-23.jsonl — 337 rows total.audits/{uk,de,fr,us}-2026-04-23.jsonl.tools/seo_audit_uk.py — async httpx + lxml + extruct, ~14 seconds to crawl 101 UK pages at 3 req/s.
audits/{store}-report-2026-04-23.{md,json}. Dashboard-copy at F:/brainzyme-git/onpage-audit/data/{store}.json.schema.banned_entity_neuroenhancement + PageFly H1 issues — both clear in the deploy step.
Thing entities that describe what each page is about — not what the product is.config/entity_graph.json (v1.0 locked).snippets/schema-jsonld.liquid. Per-product scoping (PRO adds Dopamine+Motivation, ELITE adds GABA+Stress management).config/faqs/*-faq.json (per-market, per-product). Merged at config/full_site_plan_all_markets.json.tools/seo_faq_sync.py writes to product.metafields.custom.faq_json. Then product-schema-block.liquid emits FAQPage JSON-LD from that metafield.snippets/*.liquid (canonical source — deployed theme will mirror).schema-jsonld.liquid included once in theme.liquid before </head>. It delegates to per-template sub-snippets via {%- render ... -%}.audits/schema-snapshots/{store}-{page-type}-*.json.tools/seo_schema_render_samples.py.
@graph SSoTThing entities with sameAs Wikipedia. These are TOPICAL — "this page discusses X" — not product typing. Each Product block is typed additionalType: DietarySupplement regardless. Source of truth: config/entity_graph.json (v1.0).
Extracted from the PageFly "Additional Questions People Ask" accordion on each UK PDP. Feeds FAQPage JSON-LD emission (Phase 4). Re-run tools/seo_faq_extract.py when the content editor updates the on-page block.
Accuracy sweep verified all 494 Q&As against full_ingredients[sku] gate. Root cause of earlier ingredient hallucinations: agents had used _meta.false_ingredients (image-gen guardrail) as the validation list. CANONICAL_PRE_READS.md now enforces the correct gate sitewide.
Full site plan now includes FAQ Q&As for every content-heavy page across 4 markets.
| Market | FAQ pages | Total Q&As | Language |
|---|---|---|---|
| UK | 33 | 165 | English (UK) |
| DE | 21 | 105 | German (native) |
| FR | 27 | 135 | French (native) |
| US | 23 | 89 | English (US) |
| Total | 104 | 494 | — |
All Q&As banked in the master Google Sheet — columns Q1/A1/V1 through Q5/A5/V5 per row, with monthly search volumes from DataForSEO.
Use the store switcher at the top to flip between UK / DE / FR / US. Counts below reflect the selected store.
Priority-ordered flag list, generated by tools/seo_audit_report.py from the rendered-side extractor. Re-run the tools to refresh.
Canonical source lives in marketing/seo/onpage-audit/snippets/. The deployed theme mirrors these files via the Shopify Publish SOP v1.6 workflow (drift-check pre-flight mandatory).
Organization + WebSite + WebPage with topical about Things. Delegates per-template via {% render %}. Rendered once in layout/theme.liquid before </head>.@id via {{ shop.url }}reviews.rating_count > 0), FAQPage (if custom.faq_json)template.name == 'collection'template.name == 'blog'article.metafields.custom.faq_json) · Fires on template.name == 'article'/pages/* templates — auto-subtypes based on handle (about → AboutPage, contact → ContactPage, else WebPage) + BreadcrumbList + conditional FAQPage.template.name == 'page'Sample JSON-LD outputs from tools/seo_schema_render_samples.py — real Liquid rendering via python-liquid with realistic Shopify context. 17 schema blocks across 6 page types. 0 validation errors. Feed any block to Google Rich Results Test.
| Page type | Blocks | Types emitted | Snapshot |
|---|---|---|---|
| Homepage | 2 | Organization + WebSite · WebPage (5 Things) | JSON → |
| PDP (Product) | 3 | Organization + WebSite · WebPage (7 Things — global + PRO-scoped) · Product + Offer + BreadcrumbList + FAQPage | JSON → |
| Collection | 3 | Organization + WebSite · WebPage (5) · CollectionPage + ItemList + BreadcrumbList | JSON → |
| Blog index | 3 | Organization + WebSite · WebPage (5) · Blog + ItemList + BreadcrumbList | JSON → |
| Blog article | 3 | Organization + WebSite · WebPage (5) · Article + BreadcrumbList + FAQPage (author + publisher refs) | JSON → |
| CMS page | 3 | Organization + WebSite · WebPage (5) · AboutPage (or WebPage/ContactPage) + BreadcrumbList + FAQPage | JSON → |
✓ All 17 blocks render without errors (validated 2026-04-23). Ready for Phase 4 deploy. Snapshots are pre-recrawl vintage — new PDPs added in 2026-04-24 incremental recrawl inherit the same product template and are covered by the PDP snapshot above.
One Liquid codebase, four deploys. Per-store adaptations handled by Shopify's native Liquid variables at render time:
| Variable | Used for | Per-store resolution |
|---|---|---|
{{ shop.url }} | All @id references + internal links | brainzyme.com / .de / .fr / .us |
{{ cart.currency.iso_code }} | Offer.priceCurrency | GBP / EUR / EUR / USD |
{{ request.locale.iso_code }} | WebPage.inLanguage | en-GB / de / fr / en-US |
{{ page_title }} | WebPage.name | Native per market |
{{ page_description }} | WebPage.description | From SEO metafield per page |
Everything below is ready — I'm standing by for your go-ahead before anything touches the live theme. Deploys go through Shopify Publish SOP v1.6 with mandatory drift-check pre-flight.
| Step | What | Status | Gate |
|---|---|---|---|
| 0a | Resolve 4 ghost URLs on DE store (brainzyme-focus-{elite,original,pro}-fr + 1 more) — Admin API lists them but storefront returns 404 | blocked | Before any DE deploy |
| 0b | Capture theme drift baselines for US / DE / FR stores (shopify_theme_drift_check.py --store {us|de|fr} --init) — UK already synced | missing | Required before SOP v1.6 §1.6 drift-check can pass |
| 1 | Owner review of master Google Sheet (337 baseline rows; 110 newly-discovered URLs from 2026-04-24 recrawl not yet planned in Sheet) | awaiting you | Your approval |
| 2 | Remove duplicate Organization + WebSite from sections/header.liquid (UK + US) | ready | Prerequisite for step 3 |
| 3 | Deploy 6 Liquid snippets to theme (all 4 stores) | ready | After step 2 |
| 4 | Wire {%- render 'schema-jsonld' -%} into layout/theme.liquid before </head> | ready | After step 3 |
| 5 | Apply 32+ UK legacy meta updates via Shopify Admin API | ready | After sheet review |
| 6 | Human operator pastes FAQ Q&As into PageFly accordion on each PDP | manual | After Sheet approval |
| 7 | Run tools/seo_faq_sync.py --store uk --commit --i-mean-it | ready | After step 6 |
| 8 | Re-run extractor + report per store — confirm flags cleared | automated | After each deploy |
| 9 | Google Rich Results Test on main PDPs + homepage per store | manual spot-check | After step 8 |
| 10 | Log every deploy to CHANGELOG.md with hash | ready | Automated |
| Market | Issue | Action |
|---|---|---|
| UK | focus-starter-bundle-adhd — "Manage ADHD Symptoms" in title/desc/H1 | Compliance rewrite proposed in Sheet (P0) |
| UK | focus-for-neurodivergent — ASA ruling risk | Meta rewrite proposed |
| UK | focus-supplements-smart-drug-pro / -speed | "Smart drug" in URLs — 301 to canonical PRO |
| UK | /pages/home-v2 + /pages/chat-widget-test-june-2025 | Indexed dev pages — noindex immediately |
| UK | adhd-supplements-guide — meta description is a dev note | Meta rewrite in Sheet |
| US | 3 "Adderall Alternative" collections + "Smart Drug Pro" PDP | 301 to canonical (FTC strict — NO FR/DE exception on US) |
| US | brainzyme-focus-pro-copy draft indexed | noindex + 301 |
| FR+DE | "Alternative à modafinil" / "Alternative zu Ritalin" | Keep — management-approved exception |
The gap list the pipeline will close once Phase 4 deploys. All documented and tracked.
| Tier | Issue | Cleared by |
|---|---|---|
| P0 | Duplicate Organization + WebSite in sections/header.liquid | Step 2 (manual removal) |
| P0 | Product blocks are stubs (name only) | Step 3 (new product-schema-block.liquid) |
| P0 | Neuroenhancement sameAs sitewide (UK + US) | Step 3 (removed from entity graph) |
| P1 | BreadcrumbList missing on collection + blog | Step 3 (new snippets emit it) |
| P1 | Judge.me AggregateRating client-side-only | Step 3 (new snippet reads native metafields) |
| P1 | FAQPage schema absent | Steps 6+7 (paste + sync) |
| P1 | hasMerchantReturnPolicy + ShippingDeliveryTime missing | Step 3 (baked into new snippet) |
| P2 | Meta typos + overlength | Step 5 (Admin API updates) |
| P0 | New PDPs (2026-04-24) inherit embedded schema.banned_entity_neuroenhancement via theme.liquid — same compliance issue as the existing P0 above, different source (template inheritance, not header block). Driving the P0 delta in refreshed reports. | Step 3 (same snippet deploy removes it sitewide) |
| P0 | PageFly-generated H1 problems on new PDPs (detected 2026-04-24 recrawl) | Step 3 + Step 5 (heading + meta updates) |
Headline: the schema deploy your team did to the UK live theme on 28 Apr 2026 did not land what session 46's plan called for. Score: 1 / 10. The PDPs that earn the revenue have zero server-rendered Product schema, and the homepage still emits the banned Neuroenhancement entity.
Method: Opus 4.7 audit agent crawled 9 representative UK URLs (homepage · 4 main PDPs · 1 collection · 1 article · blog index · CMS page), extracted every <script type="application/ld+json"> block, and validated against the canonical Liquid snippets at marketing/seo/onpage-audit/snippets/. Raw HTML evidence at tmp/uk-schema-audit-2026-05-01/{01..09}-*.html. Full report at tmp/uk-schema-deep-audit-2026-05-01.md.
NEW · Codex 5.5 QC pass · 2026-05-02 Codex 5.5 second-opinion review added 11 deltas to this tab (4 P0 additions, 1 new recommendation, 3 corrections, 3 missed checks). Each is marked NEW below.
Refined root cause NEW · Codex QC: the deploy's specific failure is a snippet name mismatch, not just "canonical not deployed". theme.liquid renders {% render 'product-schema' %} but snippets/product-schema.liquid doesn't exist in the live theme — meanwhile our canonical file is named product-schema-block.liquid. Fix is either rename our file or deploy under the rendered name.
Decision needed: see "Four paths forward" at the bottom of this tab (Codex added Option D — Hybrid).
The team's pushback was partially correct. They use Google's Rich Results Test + schema.org, both of which see post-JS rendered content. My original 2026-05-01 audit used curl only (raw HTML, pre-JS) — which is why it reported "zero server-rendered Product schema" on PDPs. I re-ran the audit with Playwright headless Chromium + Googlebot UA + networkidle. Findings below.
What changed: Judge.me injects a JS Product node with AggregateRating on all 4 PDPs post-render. Googlebot's WRS (Web Rendering Service) executes JS before indexing, so this IS surfaced to Google. Star-rating SERP snippets are eligible. The team is right about that.
What didn't change: the Judge.me JS block is a 4-field stub: @type, @id, name, aggregateRating. No offers/price (so no price-display rich result, no Shopping eligibility), no image, no description, no brand, no BreadcrumbList. The site-wide Organization/WebSite/WebPage entities are still absent on all PDPs post-render. Score updated from 1/10 → 4/10 — passes Google's minimum bar; fails commercial optimisation.
| PDP | ratingValue | reviewCount | SERP star-snippet eligible? |
|---|---|---|---|
| ELITE | 4.75 | 726 | yes via Judge.me JS |
| PRO | 4.73 | 1,257 | yes via Judge.me JS |
| ORIGINAL | 4.63 | 208 | yes via Judge.me JS |
| Bundle | 4.82 | 589 | yes via Judge.me JS |
| Field | Status | What it unlocks |
|---|---|---|
offers.price + priceCurrency | missing | Price display in SERP. Google Shopping eligibility. Biggest commercial loss. |
image | missing | Full product card with image in rich results |
description | missing | Better SERP context |
brand | missing | Knowledge Graph linkage to Organization |
BreadcrumbList | missing | Breadcrumb path in SERP |
hasMerchantReturnPolicy + shippingDetails | missing | Required for Google Shopping FREE listings |
Audit evidence: tmp/uk-schema-browser-audit-2026-05-02/SUMMARY.md · per-URL post-render JSON-LD dumps + diff files in same folder · repeatable script browser_audit.py
| URL | ld+json blocks | Schemas found | Matches spec? | P0 | P1 |
|---|---|---|---|---|---|
/ (homepage) |
1 server | Organization + WebSite + WebPage (legacy embedded) | partial | 4 | 5 |
/products/brainzyme-elite |
0 raw, 2 post-render | FAQPage (JS) + Product stub w/ AggregateRating 4.75/726 (Judge.me JS) | partial | 3 | 2 |
/products/brainzyme-professional-stronger-formula |
0 raw, 2 post-render | FAQPage (JS) + Product stub w/ AggregateRating 4.73/1,257 (Judge.me JS) | partial | 3 | 2 |
/products/brainzyme-original-milder-formula |
0 raw, 2 post-render | FAQPage (JS) + Product stub w/ AggregateRating 4.63/208 (Judge.me JS) | partial | 3 | 2 |
/products/brainzyme-combo-set-...-original |
0 raw, 2 post-render | FAQPage (JS) + Product stub w/ AggregateRating 4.82/589 (Judge.me JS) | partial | 3 | 2 |
/collections/best-brain-supplements |
0 | none | no | 3 | 0 |
/blogs/neurodiversity-tips/adhd-supplements-guide |
2 server | Article + BlogPosting (both legacy, no @graph wrap) | no | 3 | 2 |
/blogs/neurodiversity-tips (blog index) |
0 | none | no | 2 | 0 |
/pages/about-us |
0 | none | no | 3 | 0 |
JS-injected FAQ block on PDPs has type="application/ld+json" but is created at runtime by assets/...js — search engines that don't render JS will not see it. Counted separately.
| File in live theme | Status | Detail |
|---|---|---|
snippets/homepage-schema.liquid | deployed | Their custom v2 (post Rich-Results-Test, 28 Apr) — fires only on homepage via {% if template.name == 'index' %}. Has compliance issue: Organization.knowsAbout still lists Neuroenhancement + Nootropics, and WebPage.mentions includes a Neuroenhancement Thing entity. |
snippets/faq-schema-generator.liquid | JS-only | NEW · Codex QC Reworded: not present in raw HTML and not reliable for non-rendered crawls or validator testing. Google does render JS, but server-side JSON-LD is more reliable + validates predictably. Additional risk: on homepage this JS creates a second @graph at runtime with isPartOf/about pointing to #website + #organization. If canonical server-side schema ships later, you'll have a server/client graph consistency conflict. Decide: server-render the FAQ or remove homepage FAQ injection from schema scope. |
snippets/breadcrumbs.liquid | exists | Visual breadcrumb component — not a schema renderer |
snippets/product-schema.liquid | missing | Theme.liquid calls {% render 'product-schema' %} but the file doesn't exist → silent fail → zero Product schema on every PDP. NEW · Codex QC Mismatch detail: our canonical equivalent is named product-schema-block.liquid. Two fixes available — either (a) rename our spec file to product-schema.liquid before deploy, or (b) deploy the canonical content under the name the theme already renders. |
snippets/breadcrumbs.liquid NEW · Codex QC | caution | Already exists in live theme. If we deploy our canonical schema-jsonld snippet (which emits BreadcrumbList in the Product/Collection blocks), risk of duplicate BreadcrumbList on templates that already render this snippet. Verify before any deploy that the existing breadcrumbs.liquid does not also emit JSON-LD (visual breadcrumb only is fine). |
snippets/schema-jsonld.liquid (ours) | never deployed | Site-wide @graph snippet from session 46 |
snippets/product-schema-block.liquid (ours) | never deployed | Rich Product + BreadcrumbList + FAQPage |
snippets/collection-schema-block.liquid (ours) | never deployed | Collection schema |
snippets/article-schema-block.liquid (ours) | never deployed | Article schema |
snippets/blog-schema-block.liquid (ours) | never deployed | Blog index |
snippets/cms-schema-block.liquid (ours) | never deployed | CMS pages |
schema-jsonld.liquid exists at marketing/seo/onpage-audit/snippets/ but is absent in the live theme.@graph still on homepage. The legacy block was supposed to be removed; instead a new homepage-only snippet was added alongside it (no consolidation).AggregateRating (so star snippets ARE eligible — team was right on this). But missing: offers/price, image, description, brand, BreadcrumbList, hasMerchantReturnPolicy, shippingDetails. Biggest commercial loss is now price-display + Google Shopping eligibility, not stars.Organization.knowsAbout lists "Neuroenhancement" + "Nootropics" and WebPage.mentions includes a Neuroenhancement Thing entity. Banned for UK per onpage-audit/CLAUDE.md — only DE/FR have alternative-positioning exception, and even there it does NOT extend to the Neuroenhancement entity.#article fragment ID collision on the ADHD article PDP — two competing schemas (Article + BlogPosting), both legacy.Organization.description. Live snippet emits: "scientifically proven ingredients", "reduce brain fog", "promote dopamine and GABA production" in JSON-LD. Functional/structure-function claims become machine-readable in schema and warrant legal review. Replace with approved structure/function-safe wording from the product matrix before any deploy.WebPage.description. Live snippet repeats: "support focus, mental energy, mood and memory" and "help reduce brain fog". Same machine-readable claim risk as Organization.description. Legal sign-off required before deploying any tightened version.Organization.name uses "Brainzyme®" with the registered mark — spec says no ® in name field (use as ™ in display only)Brainzyme_Logo_Square.png, spec = brainzyme-logo.pngWebPage.@id uses #webpage-home on homepage — spec uses {canonical_url}#webpage (consistency across page types)WebPage.about array has only 2 entities (Nootropic, Brain fog) — spec requires 5 base entities (Dietary supplement, Nootropic, Attention, Memory, Brain fog) plus PRO/ELITE-specific entities on those PDPsarticleBody: "This article uses a custom template. Body content is rendered from the section file, not from this field."@id with #article fragment — spec requires absolute {canonical_url}#articleEntryPoint object in potentialAction.target — spec uses bare string (functionally equivalent, cosmetic only)sameAs@graph wrapper but the per-page entities (collection / article / blog index / CMS) are NOT in @graph — inconsistentlegalName, foundingDate: 2016, address (modulo extra addressRegion), 4 social sameAs URLs, SearchAction@type: Drug or @type: MedicalEntity emitted (compliance hard line held)That's it. Everything else is missing, wrong, or duplicated.
| Path | What it means | Effort | Risk | When to pick this |
|---|---|---|---|---|
| A. Replace | Deploy our 6 canonical snippets from session 46 (replacing their work). Remove homepage-schema.liquid v2 and the broken {% render 'product-schema' %} reference. Wire {%- render 'schema-jsonld' -%} in theme.liquid before </head>. |
~2 hours | medium — the team will see their 28 Apr work overwritten | If alignment with the canonical spec matters more than preserving their work. Cleanest end state but most disruptive to team. |
| B. Patch | Keep their homepage-schema.liquid v2 (fix the Neuroenhancement + description compliance issues). Create the missing snippets/product-schema.liquid using our spec's product-schema-block content. Add the missing collection / article / blog / CMS snippets from our canonical set. |
~1 hour | low — additive, preserves their work | Forward progress fast, two structures coexist (theirs + ours). |
| D. Hybrid NEW · Codex QC | Keep their live snippet names (homepage-schema, product-schema, faq-schema-generator) — replace the internals with our canonical logic. theme.liquid already calls these by name; we just supply the implementations. No theme.liquid edits needed beyond compliance fixes. |
~1.5 hours | low — fewer moving parts than Option A, more spec-compliant than Option B | Recommended. Faster + safer than Replace because theme.liquid already references the names; spec-compliant because internals come from our canonical files. Best of both A and B. |
| C. Stop | Talk to the team that did the deploy. Find out what they intended, why our snippets weren't used, and what state they think the site is in. Decide together. | 1 conversation | none | If you're not sure why our session 46 plan was bypassed and you want to understand the gap before writing more code. Safest if you suspect a process issue. |
offers.price + priceCurrency + image + description + brand + hasMerchantReturnPolicy + shippingDetails. Judge.me's stub gets stars; our canonical block unlocks price snippets + Google Shopping FREE listings. Biggest commercial win available right now. Ensure same @id as Judge.me's stub ({url}#product) so Google merges them as one node, not two competing.homepage-schema.liquid's knowsAbout array AND WebPage.mentions — UK compliance violation, fix todayOrganization.description + WebPage.description on homepage-schema.liquid — current wording emits machine-readable functional claims ("scientifically proven", "reduce brain fog", "promote dopamine and GABA production"). Get legal sign-off on structure/function-safe replacement copy from product matrix. NEW · Codex QCsnippets/product-schema.liquid matching our canonical content, OR rename our spec file. theme.liquid calls {% render 'product-schema' %} but the file doesn't exist; canonical is product-schema-block.liquid.price / image / description in the widget's Product node. If yes, you get a partial commercial win without a deploy. Worth checking before scheduling Option D.| Check | Result |
|---|---|
Organization @id consistency across pages | N/A — Org block only on homepage; PDPs have nothing |
| Duplicate Product across PDPs | no — none on PDPs at all |
Old embedded @graph still present | yes — homepage still has legacy block |
| AggregateRating populated on PDPs UPDATED 2026-05-02 evening | yes (post-render via Judge.me JS) — 4.63–4.82 across 4 PDPs, 2,780 total reviews. Star snippets eligible. Original "no" was curl-only. |
| BreadcrumbList present on PDPs | no |
| FAQPage present on PDPs (server-rendered) | JS-only — exists but client-injected, raw HTML visibility is the safer bar |
| Banned ingredient citations | none — clean |
| Banned types (Drug / MedicalEntity) | none — clean |
nootropic typed as Product.additionalType or category | no — only as topical Thing in WebPage.about (correct) |
| Solicited / paid-promoter Review schema risk NEW · Codex QC | verify before deploy — AggregateRating from Judge.me's aggregate metafields is OK (mathematically derived). Do NOT emit individual Review schema entities unless review provenance is verified non-paid. Our spec correctly emits AggregateRating only. |
| Duplicate BreadcrumbList risk NEW · Codex QC | check — live theme has snippets/breadcrumbs.liquid already. Confirm it does not also emit JSON-LD before deploying our canonical Product schema (which emits its own BreadcrumbList). Visual breadcrumbs only is fine. |
| PageFly schema injection on PDPs NEW · Codex QC | verify with browser-render — PageFly is heavy on PDPs and may inject JSON-LD post-render. Raw curl misses this. Verify with a browser-based crawl (Playwright / Puppeteer) before assuming pre/post-deploy state from curl alone. |
F:/Claude Root/tmp/uk-schema-deep-audit-2026-05-01.md — full Opus 4.7 audit report (5,000-word cap)F:/Claude Root/tmp/uk-schema-audit-2026-05-01/{01..09}-*.html — raw HTML evidence per pageF:/Claude Root/tmp/uk-schema-audit-2026-05-01/*.jsonld.json — parsed JSON-LD per pageF:/Claude Root/marketing/seo/onpage-audit/snippets/ — 6 canonical Liquid snippets from session 46F:/brainzyme-themes/uk/snippets/ — what's actually in the live UK themememory/working-context/session-46-seo-schema-audit.md — original deploy planmemory/feedback_fr_de_alternative_positioning_exception.md — confirms Neuroenhancement is banned for UK regardless of FR/DE exceptionWhat: 16-month YouTube experiment + linkable-asset case study videos integrated with session 46 SEO audit findings. Codex 5.5 reviewed v1 framework and flipped it to v2 with 6 HIGH + 8 MEDIUM corrections. Bottom line for Brainzyme: AI content alone fails on YMYL supplement domain; needs 7 supports, with linkable assets as the strongest backlink mechanism (no link-scheme risk), magazines/PR as secondary, dormant-blog revival as a 2,723-article opportunity already sitting in the Shopify Admin API.
Source videos: video #1 — 16-month AI content experiment · video #2 — linkable assets case study. Files: F:/Agentic-OS/reference/video-transcripts/ (transcripts + insights v1 + insights v2 + Codex review).
Brainzyme's AI-content programme delivers one editorially-supervised article per week to the existing high-equity blog domains (UK/US/DE/FR), classified by content type (routine brain-nutrition / disease-adjacent / medication-comparison / market-exception), with each article passing the 5-step publish-gate stack. Backlinks come from two parallel tracks: (1) a stable of 3–5 linkable assets built once and earning citations for years, (2) HARO + targeted PR pitches for first-time legitimacy in supplement / wellness / parenting / student outlets. Compounding it: 2,723 dormant blog articles across the 4 stores get triaged for revival, with the strongest candidates (recent unpublishes, comparison content, neurodivergent tips) getting AI-content-v2 reactivation. Rhythm: 7 / 14 / 30 / 60 / 90-day staged check-ins on every published article. Pre-launch gate: 1,564 banked FAQs from session 46 must be triaged into 4 buckets before any article promotion.
| Track | Effort | Cost | Time-to-impact | Backlink quality | Compliance risk | Recommended |
|---|---|---|---|---|---|---|
| AI Content v2 articles | Medium (7 supports per article) | ~£200–500/article (editor + medical reviewer) | 30–90 days per article | N/A (pulls links via supports) | Medium (managed by gates) | YES |
| Dormant blog revival | Low–Medium (content already exists) | £100–300/article (refresh + fact-check) | 14–30 days for <6mo unpub | Inherits old equity (bonus) | Low if pre-screened | YES — quick win |
| Linkable assets (3–5 stable) | High upfront, 0 ongoing | £500–3,000 each (vibe-code + design) | 3–12 months to peak | HIGH (1,000s of inbound) | Low if tool is functional, not claim-based | YES — strongest moat |
| HARO / PR pitches | Low (15min/day pitching) | £0–£99/mo (HARO/Cision) | 2–8 weeks per landed citation | HIGH (DA70+ outlets) | Medium (each pitch needs compliance) | YES — first-time legitimate |
| Paid link schemes | Low | ££££ ongoing | Days | Often penalised | HIGH (Google policy + ASA) | NO — Codex blocked |
Switch to the sub-tabs above to see specific options + sliding scales for each track.
| # | Support | Brainzyme implementation |
|---|---|---|
| 1 | Backlinks | Earned citations only (HARO + linkable assets) — no count target. Codex blocked the original "2-3 links per article" framing. |
| 2 | Credentialed named author | Author scope LIMITED to nutritional accuracy, ingredient-mechanism factuality, plain-language clarity. NOT medical endorsement. Schema author/reviewer only when human actually reviewed (no decorative E-E-A-T). |
| 3 | Original data / first-hand | Judge.me as customer-experience signal ONLY (with sample-size context, never ingredient-efficacy proof). Manufacturing provenance (Scotland, GMP, batch-level). UK 16-month longitudinal data. Cited peer-reviewed studies (linked, not reworded). |
| 4 | Internal linking | Anchor text must NOT pair condition + product (no "ADHD focus supplement [PRO]" anchors). Link to entity_graph.json clusters + PDPs via generic anchors only. |
| 5 | Site structure | Always brainzyme.{com,us,de,fr}/blogs/ — never new subdomain. Hreflang reciprocity verified at day-7 check. |
| 6 | Human editing + fact-check | 5-step publish-gate: copy_preflight + product_matrix --validate-copy + banned-grep + human-gate (medication/disease/structure-function) + post-publish curl+browser-render schema audit. |
| 7 | Freshness cadence | SECONDARY benefit only — never publish sub-quality content to maintain rhythm. Quality + compliance + dedupe + intent gates first. |
| Class | Examples | Gate | Cadence |
|---|---|---|---|
| Routine brain-nutrition | Ingredient guides, sleep/focus tips, lifestyle articles | Auto preflight + lexicon validate + spot-check | Weekly OK |
| Disease-adjacent | Brain fog mechanism, perimenopause focus | Human compliance + legal review | Slow |
| Medication-comparison | Ritalin / modafinil / Adderall alternative content | Human compliance + legal + market-specific sign-off | Project-based, never autonomous |
| Market-exception (DE/FR) | "Alternative à modafinil" / "Alternative zu Ritalin" | Same as medication-comparison + market-lens | Project-based |
| Day | Check | Action if failing |
|---|---|---|
| 7 | Indexed? Schema (curl + render both)? Internal links? Canonical? hreflang reciprocity? | Fix immediately |
| 14 | Initial impressions? Banned-copy regression scan still clean? | Fix or pull |
| 30 | GSC indexed-pages? Internal-link graph populated? First citations? | Strengthen if weak |
| 60 | Early GSC query data — search intent matched? | Re-write title/H1 if intent-mismatched |
| 90 | Ranking trajectory? Earned citations? AI Overview observability? Cannibalisation check? | Continue / refresh / consolidate / noindex |
Pre-requisite gate (Codex-imposed): the 1,564 banked FAQs from session 46 must be triaged into 4 buckets — hero-support / FAQ-only / noindex/redirect / net-new article candidate — BEFORE any FAQ→article promotion. Otherwise we inherit clone-family duplication into the article programme.
| Market | Blogs | Published | Unpublished | Recovery viability |
|---|---|---|---|---|
| UK | 7 | 19 | 2,675 | Massive — disproportionate to other markets |
| US | 5 | 16 | 23 | Comparison articles with high commercial value (Vyvanse / Adderall / etc.) |
| DE | 3 | 40 | 17 | Targeted |
| FR | 3 | 23 | 8 | Targeted |
| TOTAL | 98 | 2,723 | ||
Age distribution (revival viability is highest when index entry hasn't dropped yet):
| Days unpub | Market | URL | Why |
|---|---|---|---|
| 8 | US | /blogs/focus-learning-center/qualia-mind-vs-magic-mind-vs-brainzyme-focus-compared-reviewed | Comparison content, high commercial value, very recent |
| 10 | UK | /blogs/supplements/buying-nootropics-uk-read-this-first | UK head-term commercial intent, very recent |
| 10 | US | /blogs/supplements/focus-factor-vs-mindful-advantage-vs-brainzyme-2026-guide | Comparison content, very recent |
| 23 | UK | /blogs/work-life-tips/how-to-clear-brain-fog-with-simple-walk-after-meals | Lifestyle/wellness, recent |
| 55 | US | /blogs/supplements/what-is-choline-and-what-to-look-for-in-a-supplement | Ingredient-education, evergreen |
| 60 (×12+) | UK | /blogs/neurodiversity-tips/... | Batch-unpublished 60 days ago — investigate WHY before reviving (compliance? clone-family pruning?) |
Full inventory: F:/Agentic-OS/reference/video-transcripts/dormant-blogs-trawl-2026-05-09.json
Before reviving any URL: (1) check why it was unpublished — if it was a compliance pull (e.g. ASA neurodivergent + functional claim), don't revive without rewrite. The 60-day batch unpublish on UK /neurodiversity-tips/ looks like a deliberate compliance / clone-family decision and needs human investigation first. (2) Cross-reference against GSC for historical impressions/clicks — only worth reviving URLs that ranked. (3) Check Wayback Machine for prior content quality (don't re-launch thin content). (4) If revival proceeds, refresh content using AI-Content-v2 supports + 5-step publish gate, then run staged check-ins per cadence.
The freshness-pump bonus: per video #1's March 2026 finding, simply ADDING new AI content to the same domain caused dormant pages to revive 17–19× — so the AI-content programme itself doubles as a freshness pump for the dormant inventory, even before we directly republish them.
Per video #2 case studies: sleepyti.me (sleep cycle calculator) earned 35,000 backlinks from 4,500 domains. Canva color palette generator: 8,100 backlinks from 2,500 domains. donothingfor2minutes.com: 384,000 backlinks from 7,100 domains including Wired + TechCrunch. No link-building budget can replicate this — paid link schemes top out at hundreds; linkable assets earn tens-to-hundreds-of-thousands organically.
Two deployment patterns: (1) build on the brand domain (Canva model — direct juice), (2) build on a catchy standalone domain → 301 redirect to brand later (sleepyti.me → sleepopolis, donothingfor2minutes → calm — full juice transfers).
Asset types prioritised (per video #2 prompt): tools, calculators, generators, visualizers, quizzes, databases, maps, trackers, micro apps. Cards below show effort/cost/risk so you can scan + pick. Tap or scroll to mark which to build.
brainfogtest.com, amibrainfogged.com). Already built — package as embeddable widget for blogs, launch on Product Hunt with the catchy URL.focusmeter.com · share-card OG image for social viral · launch Product Huntgreenteaequivalent.com. Playful, shareable, zero compliance risk.Per video #2 launch playbook: ship to Product Hunt + Betalist + targeted journalists. Per video #1's 7 supports framework: every linkable asset must work whether or not the user clicks through to Brainzyme — the asset earns its own backlinks based on utility, not on conversion.
My recommended starting trio (best effort/value + risk balance):
Codex flagged that paid link schemes are HIGH compliance + Google policy risk. But Calum is right that first-time PR push in legitimate publications is fine — Brainzyme has never done it, has nothing to hide, and editorial citations from real journalists are how brands earn DA70+ links sustainably.
| Existing rule | Strategy compatibility | Notes |
|---|---|---|
feedback_protected_seo_assets_canonical.md (Tier 1/2/3) | Compatible | Tier 1 pages get full human pipeline; Tier 2 strengthened SOP; Tier 3 routine flow — all still apply on top of AI-content programme |
feedback_honeypot_eeat_pattern.md (3-asset stack) | Premium tier | Honeypot pattern (25-FAQ + Cause Breakdown + Severity Index + named medical reviewers) is the premium tier of AI-content for Tier-1 high-equity recovery pages |
feedback_schema_audit_curl_vs_render_canonical.md | Inherited at day 7 | Day-7 check in staged cadence uses BOTH curl + browser-render per session 46 canonical |
marketing/seo/onpage-audit/CLAUDE.md rule #8 | Inherited | Same browser-render bar in v2 staged cadence |
feedback_fr_de_alternative_positioning_exception.md | Honoured | DE/FR alternative-positioning content lives in "medication-comparison" content class — human-gated always |
| 4-class lexicon (matrix) | Hard gate | Hard publish-gate via tools/product_matrix.py --validate-copy |
| Session 46 FAQ dedupe + clone designations | Pre-requisite | 4-bucket FAQ triage rule builds on top of dedupe outputs (Codex blocker) |
marketing/seo/onpage-audit/AI_CONTENT_SOP.md codifying v2 7-supports + 4-content-class table + staged-check-in cadence + publish-gate stackpending_tasks_registry.md (ANSM/HWG/ASA/FTC) BEFORE article programme launches — otherwise programme inherits regulatory riskFill what you can — leave the rest blank. Press Send to Claude and the responses land in F:/Agentic-OS/inbox/onpage-audit/. Claude picks them up on the next session start.
All fields optional. You can send partial, then send again later. Each send is a fresh envelope — Claude treats the latest as authoritative.
@graph in theme.liquid that collides with our canonical snippets. Pick the deploy strategy.homepage-schema.liquid knowsAbout array AND WebPage.mentions. UK regulatory issue.Organization.description + WebPage.descriptiontheme.liquid calls {% render "product-schema" %} but the file does not exist; canonical is product-schema-block.liquid.focus-for-ND page — promote or canonical?free-trial-packs UK — keep or re-tag?amazon-loyalty-bonus (15 sessions only).slug : approve / reject / rewrite-to "new text" per line.price / image / description in the widget's Product node. If yes = partial commercial win without a deploy.