Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Catching Technical SEO regressions and renderin...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →

Catching Technical SEO regressions and rendering disasters in CI for Shopify Stores

One of the elephants in the room for our industry is that most SEO testing still happens in production. At best, we may have a pre-prod environment. But because SEO validation is typically siloed from engineering, we often rely on luck to catch issues before they go live.

This session reframes SEO from a reactive checklist into a system of automated SEO guardrails. Learn how to simulate Googlebot-like rendering within a CI/CD workflow to catch regressions and block the build before it ships.

Stop testing in production. Start shipping with confidence.

Avatar for Estela Franco

Estela Franco

September 26, 2026

More Decks by Estela Franco

Other Decks in Marketing & SEO

Transcript

  1. Catching technical SEO regressions and rendering disasters in CI hopify

    S r o s f e r o t s ESTELA FRANCO @guaca.bsky.social @guaca
  2. Lap 1: Code ships Lap 4: SEO team notices traffic

    drop Lap 5: Root cause identified Lap 7: Fix deployed Lap 30+: Rankings maybe recover ESTELA FRANCO @guaca.bsky.social @guaca
  3. { "pages": [ { "path": "/", "template": "home", "seo": {

    "metadata": { "title": { "enabled": true, "severity": "warning", "value": "Home | Site Name" }, "h1": { "enabled": true, "severity": "warning", "value": "Welcome to Our Site" }, "canonical": { "enabled": true, "severity": "warning", "value": "/" }, "metaRobots": { "enabled": true, "severity": "warning", "value": "index, follow" }, "metaDescription": { "enabled": true, "severity": "warning", "value": "The best place for SEO guardrails." } } } }, { "path": "/products/my-cool-product", "template": "product", "seo": { "metadata": { "title": { "enabled": true, "severity": "warning", "value": "My Cool Product | Site Name" }, "h1": { "enabled": true, "severity": "warning", "value": "My Cool Product" }, "canonical": { "enabled": true, "severity": "warning", "value": "/products/my-cool-product" }, "metaRobots": { "enabled": true, "severity": "warning", "value": "index, follow" }, "metaDescription": { "enabled": true, "severity": "warning", "value": "The best cool product you can find." } } } } ] } ESTELA FRANCO @guaca.bsky.social @guaca
  4. TEMPLATE WHAT TO CHECK SEVERITY - Home - Collection pages

    (PLP) - Product pages (PDP) - Campaign pages - … - Metadata - Content - Rendering - Links - … - 🟡 Warning - 🔴 Blocker ESTELA FRANCO @guaca.bsky.social @guaca
  5. { "pages": [ { "path": "/", "template": "home", "seo": {

    "metadata": { "title": { "enabled": true, "severity": "warning", "value": "Home | Site Name" }, "h1": { "enabled": true, "severity": "warning", "value": "Welcome to Our Site" }, "canonical": { "enabled": true, "severity": "warning", "value": "/" }, "metaRobots": { "enabled": true, "severity": "warning", "value": "index, follow" }, "metaDescription": { "enabled": true, "severity": "warning", "value": "The best place for SEO guardrails." } } } }, { "path": "/products/my-cool-product", "template": "product", "seo": { "metadata": { "title": { "enabled": true, "severity": "warning", "value": "My Cool Product | Site Name" }, "h1": { "enabled": true, "severity": "warning", "value": "My Cool Product" }, "canonical": { "enabled": true, "severity": "warning", "value": "/products/my-cool-product" }, "metaRobots": { "enabled": true, "severity": "warning", "value": "index, follow" }, "metaDescription": { "enabled": true, "severity": "warning", "value": "The best cool product you can find." } } } } ] } ESTELA FRANCO @guaca.bsky.social @guaca
  6. METADATA CONTENT RENDERING / JS - meta robots - canonical

    - hreflang - title - meta description - structured data - … - h1 - h2 - alt text - broken images - empty hrefs - … - CSR content - 100vh trap - metadata misdirection - JS hrefs - … ESTELA FRANCO @guaca.bsky.social @guaca
  7. Googlebot Mobile UA Configuration const GOOGLEBOT_MOBILE_UA = 'Mozilla/5.0 (Linux; Android

    6.0.1; Nexus 5X Build/MMB29P)' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.6778.69 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'; const googlebotUse = { channel: 'chrome', userAgent: GOOGLEBOT_MOBILE_UA, viewport: { width: 412, height: 732 }, deviceScaleFactor: 2.625, isMobile: true, hasTouch: true, }; ESTELA FRANCO @guaca.bsky.social @guaca
  8. { "pages": [ { "path": "/", "template": "home", "seo": {

    "metadata": { "title": { "enabled": true, "severity": "warning", "value": "Home | Site Name" }, "h1": { "enabled": true, "severity": "warning", "value": "Welcome to Our Site" }, "canonical": { "enabled": true, "severity": "warning", "value": "/" }, "metaRobots": { "enabled": true, "severity": "warning", "value": "index, follow" }, "metaDescription": { "enabled": true, "severity": "warning", "value": "The best place for SEO guardrails." } } } }, { "path": "/products/my-cool-product", "template": "product", "seo": { "metadata": { "title": { "enabled": true, "severity": "warning", "value": "My Cool Product | Site Name" }, "h1": { "enabled": true, "severity": "warning", "value": "My Cool Product" }, "canonical": { "enabled": true, "severity": "warning", "value": "/products/my-cool-product" }, "metaRobots": { "enabled": true, "severity": "warning", "value": "index, follow" }, "metaDescription": { "enabled": true, "severity": "warning", "value": "The best cool product you can find." } } } } ] } ESTELA FRANCO @guaca.bsky.social @guaca
  9. { "pages": [ { "path": "/", "template": "home", "seo": {

    "metadata": { "title": { "enabled": true, "severity": "warning", "value": "Home | Site Name" }, "h1": { "enabled": true, "severity": "warning", "value": "Welcome to Our Site" }, "canonical": { "enabled": true, "severity": "warning", "value": "/" }, "metaRobots": { "enabled": true, "severity": "warning", "value": "index, follow" }, "metaDescription": { "enabled": true, "severity": "warning", "value": "The best place for SEO guardrails." } } } }, { "path": "/products/my-cool-product", "template": "product", "seo": { "metadata": { "title": { "enabled": true, "severity": "warning", "value": "My Cool Product | Site Name" }, "h1": { "enabled": true, "severity": "warning", "value": "My Cool Product" }, "canonical": { "enabled": true, "severity": "warning", "value": "/products/my-cool-product" }, "metaRobots": { "enabled": true, "severity": "warning", "value": "index, follow" }, "metaDescription": { "enabled": true, "severity": "warning", "value": "The best cool product you can find." } } } } ] } ESTELA FRANCO @guaca.bsky.social @guaca
  10. PULL REQUEST MERGE SCHEDULED - main/prod - staging/dev - main/prod

    - Optional ESTELA FRANCO @guaca.bsky.social @guaca
  11. Shared Ownership Agree on Checks and sample size … and

    Severity SEO Lanes and Branches Test URLs Configuration Kill the Build workflow approval ESTELA FRANCO @guaca.bsky.social @guaca
  12. Broken Canonical Wrong Meta Robots Broken Product Structured Data Rendering

    Issues Non crawlable links And more… ESTELA FRANCO @guaca.bsky.social @guaca