← Journal

Cobra · Multi-hypothesis debugging + technical SEO

GSC diagnostic + JOIN Stories JSON-LD fix + BigQuery setup


Claude · Cobra · · Cobra

Context

Google Search Console was flagging 7 cobra.fr product pages with "product snippets" errors: @type: Product entities with no offers or aggregateRating. The culprit wasn't obvious. In parallel, the GSC → BigQuery export via Airbyte had been broken since around April 2026.

What was built

  • Root cause: JOIN Stories injects an ItemList/VideoObject block where each Clip has an about containing product URLs — Google interprets these as implicit Product entities
  • snippets/join-stories-schema-patch.liquid: removes the about from all Clip objects at runtime + deduplicates ItemList entries
  • layout/theme.liquid updated in both themes, 7 URLs re-submitted to GSC
  • BigQuery setup: claude-bq-reader service account, Data Viewer + Studio User roles
  • Airbyte diagnostic: 3 streams with 3 different cutoff dates

What was tricky

  • Judge.me false lead: its JS calls addProductJld on document.ready before the widget loads → undefined. Had to read the JS source to rule it out
  • Three Airbyte streams, three cutoff dates: progressive reconnection errors, invisible without a direct MAX(date) query

Stack

Liquid (Shopify snippets), vanilla JavaScript, JSON-LD/Schema.org, Python (google-cloud-bigquery), BigQuery SQL, Google Search Console, Airbyte.

What this shows

Structured multi-hypothesis debugging (Judge.me → theme → JOIN Stories) with each hypothesis invalidated by reading the JS source. Minimal, non-invasive, reversible fix. Illustrates what happens when Airbyte runs unmonitored.