Guide Storyblok SEO
Storyblok is a visual CMS headless — it stores content but jamais renders votre pages, so SEO lives in the frontend. Rendering, meta fields, preview noindex, sitemaps, images.
Langues
1 indice probant sur cette page
- Outil en ligne associéRaw vs. Rendered HTML Checker
Storyblok is a visual CMS headless: it stores block-based content and sert it over REST/GraphQL, but it jamais renders votre pages — votre frontend framework fait, so SEO outcomes are almost entirely a frontend decision. SSG and SSR are safe; CSR risks vide HTML and delayed indexation. The built-in SEO Fields App and AI SEO App seulement ajouter fields; the frontend doit encore render meta tags, canonicals, sitemaps, robots.txt, and JSON-LD itself. The platform-specific trap is preview mode — block draft/preview environments with server-rendered noindex headers, jamais JavaScript. Utiliser the /m/ image service pour WebP and Core Web Vitals, and lean on Storyblok's structured content pour AI search.
Evidence for this claim The article's described storyblok-seo capabilities must be evaluated against the platform's current documentation rather than assumed to be search-engine behavior. Scope: Platform-specific capability documentation. Confidence: high · Verified: Storyblok documentation Evidence for this claim Regardless of platform, Google needs crawlable URLs, accessible rendered content, descriptive metadata, and valid search directives. Scope: Google requirements independent of platform. Confidence: high · Verified: Google Search Central: SEO Starter GuideTL;DR — Storyblok is a “headless” CMS — it’s the placer vous écrire content, pas the chose que montre it. A separate website (construit with Suivant.js, Nuxt, or Astro) pulls votre content and builds the réel pages. Que signifie almost tout of votre SEO dépend on how que website is construit, pas on Storyblok. The big rule: construire votre pages on a server or at construire temps, pas entirely in the visitor’s navigateur. And the meta tags, sitemap, and robots.txt you’d expect a CMS to handle? Vous have to définir ceux up yourself.
Ce que Storyblok en réalité is
Storyblok is a visual CMS headless. “Headless” signifie it splits two jobs que a traditional CMS comme WordPress garde ensemble: où vous écrire content and où it obtient affiché. Storyblok handles the writing side — it stores votre content as reusable blocks and donne editors a drag-and-drop visual editor — and alors hands que content to a separate website via an API.
The website partie is construit with a framework comme Suivant.js, Nuxt, Astro, or SvelteKit. Que website récupère votre Storyblok content and turns it into the HTML que Google and Bing lire. So quand personnes demander me “is Storyblok good for SEO?”, the honest réponse is: Storyblok itself barely affecte votre SEO — the website votre developers construire on top of it fait.
The un rule que matters la plupart
Quand Googlebot demande pour une page, the finished HTML has to be ready. Là are two safe façons to do que and un risky façon:
- Construire pages ahead of temps (SSG) — Storyblok content is baked into plain HTML fichiers quand le site deploys. Fast and search-friendly.
- Construire pages on a server (SSR) — le serveur assembles the complet page pour chaque requête. Aussi search-friendly and toujours fresh.
- Construire pages in le navigateur (CSR) — le serveur sends a near-empty page and JavaScript fills it in afterward. Ce is the risky un.
Google peut run JavaScript and eventually lire a browser-built page, but it se produit plus tard and moins reliably — and la plupart AI robots d’exploration (the bots behind ChatGPT and Perplexity) don’t run JavaScript at tout. Ils simplement voir the vide page. So construire votre HTML on le serveur or at construire temps.
The stuff Storyblok won’t do pour vous
In WordPress, a plugin comme Yoast quietly handled votre title tags, meta descriptions, sitemap, and balise canonicals. Storyblok has aucun plugin couche doing que. Storyblok fait offer an SEO Fields App que adds title/description boxes pour editors to fill in — but même alors, votre developer has to faire the website en réalité output ceux valeurs into lune page. Nothing is automatic. You’ll besoin someone to:
- Ajouter SEO fields (title, description, etc.) to votre content.
- Wire ceux fields into lune page’s
<head>. - Construire a sitemap and a robots.txt in the frontend.
- Ajouter données structurées (schema) in the frontend.
The chose que quietly breaks: preview pages
Storyblok’s visual editor previews votre pages on a separate preview adresse. Si
que preview site is reachable by Google, it peut obtenir indexé — and now you’ve got a
duplicate, draft copy of votre site in search. The fix is to block preview/staging
from indexation en utilisant a server-level noindex, pas a JavaScript un (plus on pourquoi
que distinction matters in the Avancé tab).
Vouloir the complet version — the four rendering modes, the SEO Fields App vs. AI SEO
App, the preview noindex trap, sitemaps, the /m/ image trick, and AI search?
Switch to the Avancé tab.
Evidence for this claim The article's described storyblok-seo capabilities must be evaluated against the platform's current documentation rather than assumed to be search-engine behavior. Scope: Platform-specific capability documentation. Confidence: high · Verified: Storyblok documentation Evidence for this claim Regardless of platform, Google needs crawlable URLs, accessible rendered content, descriptive metadata, and valid search directives. Scope: Google requirements independent of platform. Confidence: high · Verified: Google Search Central: SEO Starter GuideTL;DR — Storyblok is a visual, API-first CMS headless: it stores block-based content and sert it over REST/GraphQL, but it jamais renders votre pages — the frontend framework fait, so SEO is a frontend decision. SSG and SSR ship fully-rendered HTML and are safe; CSR risks vide HTML and queued-render delays. The built-in SEO Fields App (
seo-metatags) and AI SEO App (sb_ai_seo) seulement supply field valeurs — the frontend doit encore render meta tags, canonicals, sitemaps, robots.txt, and JSON-LD itself. The platform-specific trap is preview mode: block draft/preview environments with server-renderedX-Robots-Tag: noindex, jamais JavaScript, parce que Google may skip JS execution quand it sees anoindex. Utiliser the/m/image service pour WebP + Core Web Vitals, generate the sitemap from le contenu Delivery API, and lean on the structured content model pour AI search.
The fundamental split: Storyblok stores, the frontend renders
Storyblok is a backend. It donne vous a content model construit from reusable blocks, a visual editor, and a Content Delivery API (REST and GraphQL). Ce que it fait pas do is produce the HTML que moteur de recherches explorer. Que job belongs to a separate frontend — Suivant.js, Nuxt, Astro, SvelteKit — que récupère Storyblok content and renders pages.
Storyblok dit ce plainly: “Since Google doesn’t charger content directement from Storyblok, votre team is responsible pour a fast and performant website.” The même point montre up in leur structured-content guidance — “AI doesn’t voir votre CMS directement. Moteur de recherches and generative models lire what’s rendered on votre website or app, pas the JSON coming from Storyblok’s APIs.” Internalize que and almost every Storyblok SEO question réponses itself: the CMS is nearly SEO-neutral, and the frontend’s rendering decisions determine everything. Ce is the même architecture reality I cover in SEO pour a CMS headless; Storyblok is a spécifique, visual-editing flavor of it.
Rendering strategy: the la plupart important SEO decision
How votre frontend renders Storyblok content is the unique biggest SEO lever. Four modes, tout of qui récupérer content from the même Storyblok CDN/GraphQL API:
SSG — Static Site Generation. HTML is construit at deploy temps and served as static fichiers. Best-case SEO: complet HTML on premier requête, very fast. The catch is freshness — nouveau or edited content nécessite a rebuild, so wire Storyblok’s publish webhook to trigger un. Meilleur pour mostly-static content. Astro and Gatsby are SSG-first; Suivant.js and Nuxt prise en charge it per route.
SSR — Rendu côté serveur. HTML is rendered per requête on a server or edge function. Always-fresh, fully-rendered HTML. Meilleur pour frequently modification content; the tradeoff is infrastructure cost and slightly plus élevé TTFB.
ISR — Incremental Static Regeneration. Static by par défaut, regenerated on a schedule or on-demand. The recommended middle ground pour grand Storyblok sites with mixed content types — but remarque the stale-on-first-request-after-revalidation trap I detail in the CMS headless write-up.
CSR — Rendu côté client (SPA). Le serveur sends a near-empty shell and the navigateur builds the DOM. Googlebot doit queue lune page pour a plus tard render wave (qui “may stay on this queue for a few seconds, but it can take longer than that”). AI-crawler rendering varies by provider, so HTML-only fetchers voir seulement the shell. Jamais ship content pages as CSR-only. Google’s propre line: “Si le contenu isn’t visible in the rendered HTML, Google won’t be able to index it.”
The decision rule: mostly-static content → SSG; always-fresh/volatile content → SSR; grand mixed sites → ISR; CSR seulement pour logged-in, non-indexed surfaces.
Built-in Storyblok SEO fonctionnalités (and leur limites)
Storyblok ships three façons to manage SEO field valeurs. Tout three seulement capture valeurs — the frontend encore has to render les.
SEO Fields App (seo-metatags). A native plugin field que donne editors
Title, Description, OG Title, OG Description, and OG Image inputs, plus a Google
SERP snippet preview in the editor. Exige a Growth plan, and it has to be ajouté
per content type — facile to forget on a nouveau content type.
AI SEO App (sb_ai_seo). Generates meta title, description, keywords, and
author with an LLM, à travers 22 pris en charge languages. Exige Premium. Vous pouvez bulk-generate
à travers tout stories with a Management API + Node.js script.
Manual field modeling. Aucun plan requirement: ajouter votre propre seo_title,
seo_description, og_title, og_image, noindex (boolean), and canonical_url
fields to votre content model. La plupart flexible, and ce que I’d reach pour on complex
sites.
The non-negotiable: aucun Storyblok app auto-renders a unique tag. A global head/
layout component in votre framework doit lire the SEO field valeurs from the API
réponse and output les server-side, with sensible fallback chains
(seo_title || story.name).
Balise canonicals
Storyblok has aucun awareness of votre frontend Structure d’URL, so canonicals can’t come
from the CMS. Compute les in the frontend — typically from the story’s full_slug
plus votre domain — and render les server-side. Toujours absolute URLs, jamais
relative, on every page template. (Pour the mechanics, voir
canonicalization.)
Preview mode and draft content: the defining Storyblok risk
Ce is the platform-specific pitfall to obtenir correct. The Visual Editor loads votre
pages à l’intérieur an iframe en utilisant preview URLs que carry _storyblok and _storyblok_tk
parameters, and the preview environment uses draft content with a preview
accès token. Production doit utiliser publié content with the public accès
token. The clean pattern is two separate Storyblok spaces/projects (preview and
production) so the incorrect token can’t leak draft content into the live index.
The critical partie is how vous garder preview/staging out of the index. Google warns:
“Quand Google encounters the noindex tag, it may skip rendering and JavaScript
execution, qui signifie en utilisant JavaScript to modifier or supprimer the robots meta tag
from noindex may pas fonctionner as attendu.” En d’autres termes, a noindex injected by
client-side JS is unreliable — Google may jamais run the JS. So protéger non-production
environments with a server-rendered réponse header — X-Robots-Tag: noindex at
the CDN/hosting level — and ajouter Disallow: / in que environment’s robots.txt.
Watch Search Console pour unexpected preview domains showing up; that’s votre early
warning.
Sitemaps and robots.txt
Storyblok generates neither. Les deux are frontend-built:
- Sitemap: récupérer tout publié stories from le contenu Delivery API and emit
XML. Astro:
@astrojs/sitemapplus dynamic routes from the Liens API. Suivant.js:app/sitemap.tsornext-sitemappost-build. Scope withstarts_with, paginate pour grand sites, and trigger a rebuild from the Storyblok publish webhook so le sitemap stays in sync. - robots.txt: aussi frontend-generated. Production devrait autoriser exploration of
page publiques; preview/staging devrait
Disallow: /(and carry theX-Robots-Tagheader ci-dessus).
Données structurées / JSON-LD
Storyblok stores content as structured JSON, but schema.org JSON-LD has to be
generated in the frontend — Googlebot reads the rendered HTML, pas the API
réponse. Construire a JsonLd component que maps content fields and story properties
(story.published_at, story.updated_at, story.name) into a server-rendered
<script type="application/ld+json">. Article, BreadcrumbList, Organization,
Product, and FAQPage are tout implementable ce façon.
Images and Core Web Vitals
Storyblok assets are served via Amazon CloudFront. The image service is a réel CWV win, but seulement quand utilisé correctement:
- WebP + transforms activate quand vous append
/m/to the image URL — e.g.https://a.storyblok.com/f/xxxxx/image.jpg/m/800x600. Resize, crop, quality, and smart-crop are tout URL parameters; results are edge-cached après premier requête. Forget the/m/and vous obtenir the unoptimized original. - Définir
widthandheighton every image to prevent layout shift (CLS). fetchpriority="high"+loading="eager"on the LCP hero image;loading="lazy"ci-dessous the fold.- Ajouter
alttext as an explicit field on every image component — thefilenamefield n’est pas texte alternatif. (Voir texte alternatif.)
Redirections, i18n, and hreflang
Redirections. Storyblok has aucun redirection manager, and modification a slug fait pas
créer a 301. Pattern: a redirects_config story with nestable redirect_entry
blocks (source_url, target_story), récupéré at construire/requête temps and injected
into framework routing; utiliser resolve_relations so targets mettre à jour si slugs modifier,
and refresh via the publish webhook.
Internationalization. Storyblok supports field-, folder-, and space-level
translation, and API réponses inclure an alternates array of tout translated
versions. Utiliser it to render <link rel="alternate" hreflang="..."> tags
server-side, and toujours inclure x-default. (Voir
hreflang.)
GEO / AI search readiness
Storyblok’s structured, component-based model is genuinely well-suited to AI
consumption — “Storyblok was construit autour données structurées from day un, thanks to
its headless, API-first design.” But the rendering rule encore rules: LLMs lire
rendered HTML, so SSR/SSG, correct JSON-LD, and clean semantic markup are the price
of entry. Vous pouvez aussi generate llms.txt (a markdown index of clé pages) and
llms-full.txt (a complet content archive) at the frontend. (Voir
AI search and llms.txt.)
L’essentiel
Storyblok is neither bon nor bad pour le SEO — it’s neutral, and it shifts the entier
SEO burden onto the frontend. Obtenir rendering correct (SSR/SSG), render the meta fields
the SEO apps capture, protéger preview with server-side noindex, construire le sitemap
and robots.txt yourself, and utiliser the /m/ image service. Do que and a Storyblok
site peut outperform a neglected traditional CMS. Skip it and the missing-by-default
SEO couche is exactly où le site quietly falls apart. Connexe reading lives in
CMS headless SEO and
JavaScript SEO.
AI summary
A condensed prendre on the Avancé version:
- Storyblok stores, the frontend renders. Storyblok is a visual, API-first CMS headless; it sert content over REST/GraphQL but jamais renders pages. The frontend (Suivant.js, Nuxt, Astro, SvelteKit) decides votre SEO. “Google doesn’t charger content directement from Storyblok.”
- Rendering is the #1 decision. SSG and SSR ship fully-rendered HTML and are safe; ISR is a bon middle ground (with a stale-first-request trap); CSR is risky — vide HTML, queued render wave, invisible to AI robots d’exploration.
- Built-in SEO fonctionnalités seulement capture fields: SEO Fields App (
seo-metatags, Growth plan, per content type), AI SEO App (sb_ai_seo, Premium, 22 languages), or manual field modeling. The frontend doit encore render every tag server-side. - Preview mode is the defining risk. Preview URLs utiliser
_storybloktokens and draft content. Protéger non-production with a server-renderedX-Robots-Tag: noindex+Disallow: /— jamais JS, parce que Google may skip JS execution on une page withnoindex. - Canonicals, sitemap, robots.txt, JSON-LD are tout frontend-built. Compute
absolute canonicals from
full_slug; generate le sitemap from le contenu Delivery API and refresh via the publish webhook. - Images: append
/m/pour WebP + transforms (CloudFront-cached); définirwidth/height(CLS),fetchpriority="high"on the hero (LCP), explicitaltfields. - Redirections/i18n: aucun built-in redirection manager — slug changements don’t 301; construire a
redirects_configcontent type. Utiliser thealternatesarray pour hreflang +x-default. - AI search: structured content is a strength, but LLMs lire rendered HTML — so
SSR/SSG + JSON-LD encore appliquer; optionally ship
llms.txt.
Documentation officielle
Primary-source documentation from the moteur de recherches (the headless/rendering rules que govern Storyblok SEO) and from Storyblok.
- Comprendre JavaScript SEO Basics — the explorer → render → index pipeline, the render-queue delay, the
noindex-via-JS warning, and pourquoi SSR/pre-rendering is preferred. - Rendering pour Content-Driven Web Apps — SSR vs. SSG vs. CSR tradeoffs, directement applicable to choosing a Storyblok frontend mode.
- Dynamic Rendering (deprecated workaround) — pourquoi Google ne … plus recommends dynamic rendering; utiliser SSR, static rendering, or hydration à la place.
- Robots meta tag, data-nosnippet, and X-Robots-Tag — how to définir
noindexvia theX-Robots-TagHTTP header (le serveur-side méthode pour protecting preview/staging). - Block search indexation with noindex — the meta-tag vs. header méthodes pour keeping pages out of the index.
Bing / Microsoft
- The nouveau evergreen Bingbot (Microsoft Edge) — Bingbot renders JavaScript via Edge (Chromium), but moins consistently que Google — un autre raison to préférer SSR/SSG.
- IndexNow / indexnow.org — push protocol to wire to votre Storyblok publish webhook so modifié URLs are signaled instantly.
Storyblok
- FAQ: CMS headless and SEO — Storyblok’s propre framing of où SEO responsibility sits.
- SEO Fields App docs and AI SEO App docs — the native SEO field plugins.
- Image Service API — the
/m/transform/WebP service. - Internationalization and Visual Editor concepts.
Quotes from the source
On-the-record statements from Google and from Storyblok. Chaque lien is a deep lien que jumps to the quoted passage on the source page.
Google — how JavaScript pages are processed
- “Once Google’s resources allow, a headless Chromium renders the page and executes the JavaScript. The page may stay on this queue for a few seconds, but it can take longer than that.” — Recherche Google Central docs. Jump to quote
- “Keep in mind that server-side or pre-rendering is still a great idea because it makes your website faster for users and crawlers, and not all bots can run JavaScript.” Jump to quote
- “If the content isn’t visible in the rendered HTML, Google won’t be able to index it.” Jump to quote
Google — pourquoi noindex-via-JS fails (the preview trap)
- “When Google encounters the
noindextag, it may skip rendering and JavaScript execution, which means using JavaScript to change or remove the robotsmetatag fromnoindexmay not work as expected.” — Recherche Google Central docs. Jump to quote
Storyblok — où SEO responsibility sits
- “Since Google doesn’t load content directly from Storyblok, your team is responsible for a fast and performant website.” — Storyblok FAQ: CMS headless and SEO. Jump to quote
- “AI doesn’t see your CMS directly. Search engines and generative models read what’s rendered on your website or app, not the JSON coming from Storyblok’s APIs.” — Olena Teselko, Storyblok (Structured Content, Oct 2025). Jump to quote
- “Laying the foundation for structured content will pay off either way—both search engines and LLMs rely on it.” — Ronny Shani, Storyblok (SEO with Storyblok and Astro, Aug 2025). Jump to quote
- “headless CMSs and SPAs aren’t inherently SEO-unfriendly; rather, developers gain full markup control but must implement SEO foundations manually.” — Markus Oberlehner, Storyblok (SEO in Times of CMS headlesss and SPAs, 2019). Jump to quote
Storyblok SEO checklist
Skip ce que the platform doesn’t do pour vous and do the choses it leaves to the frontend.
Rendering
- Public content pages render leur content in HTML on premier requête (SSG or SSR), pas seulement après client-side JavaScript runs.
- Aucun content page ships as a CSR-only SPA (raw HTML maximizes AI-crawler coverage).
- Storyblok publish webhook triggers an SSG rebuild / ISR revalidation so content and le sitemap stay current.
Metadata & canonicals
- SEO fields exist on every content type (SEO Fields App is per content type, or utiliser manual fields).
- A global head component reads SEO field valeurs and renders title, description, OG, and Twitter tags server-side, with fallback chains.
- Balise canonicals are absolute URLs computed from
full_slug+ domain and rendered server-side on every template.
Preview / staging protection
- Production uses the publié content version + public accès token; preview uses draft + preview token (ideally separate spaces).
- Preview/staging renvoie a server-rendered
X-Robots-Tag: noindexheader — pas a JavaScript-injected meta tag. - Preview/staging robots.txt has
Disallow: /. - Search Console vérifié pour unexpected preview domains dans l’index.
Explorer infrastructure
- Sitemap generated from the Content Delivery API and submitted to GSC + Bing Webmaster Outils.
- Production robots.txt permet exploration of page publiques.
- JSON-LD (Article/BreadcrumbList/Organization/etc.) rendered server-side and passing the Résultats enrichis Tester.
Images & i18n
- Image URLs utiliser the
/m/prefix pour WebP + transforms. - Images carry
width/height(CLS), hero usesfetchpriority="high", below-fold usesloading="lazy", and every image has an explicitaltfield. - hreflang construit from the
alternatesarray, notammentx-default. - A
redirects_configcontent type maps modifié slugs to 301s (Storyblok won’t).
The mental models
1. Storyblok stores; the frontend renders. The CMS is nearly SEO-neutral. Avant debugging quelconque Storyblok SEO problème, réponse un question premier: how is the frontend rendering ce content? Almost everything resolves to que.
2. The rendering-mode decision rule.
- Mostly-static content (blog, docs, marketing) → SSG (rebuild via publish webhook).
- Always-fresh / volatile content (prices, inventory) → SSR.
- Grand site, mixed content, vouloir static speed → ISR (mind the stale-first-request trap).
- Logged-in, not-meant-to-be-indexed surfaces → CSR is acceptable.
- Public content vous vouloir ranked or AI-cited → jamais CSR.
3. Apps capture fields; the frontend renders tags.
The SEO Fields App and AI SEO App seulement populate valeurs. Aucun tag reaches the <head>
unless votre framework reads the field and outputs it server-side. “We installed the
SEO app but tags aren’t showing” is almost toujours a manquant render step.
4. noindex doit be server-rendered.
Pour preview/staging, the seulement reliable noindex is an HTTP réponse header or
SSR-rendered meta tag. A JS-injected noindex may jamais run, parce que Google peut
skip JS execution quand it déjà sees noindex. Server header > JS, toujours.
5. Un source of truth pour URLs.
Canonicals, sitemap entries, hreflang, and lien internes devrait tout derive from the
story’s full_slug plus a unique SITE_URL — construit absolute at the rendering couche,
jamais hand-assembled or relative.
Storyblok SEO — cheat sheet
Rendering modes En un coup d’œil
| Mode | Où HTML is construit | SEO | Meilleur pour | Watch out pour |
|---|---|---|---|---|
| SSG | Construire temps → static fichiers | ✅ Meilleur | Mostly-static content | Stale jusqu’à rebuild — wire the publish webhook |
| SSR | Server, per requête | ✅ Meilleur | Always-fresh content | Plus élevé infra cost; slightly plus élevé TTFB |
| ISR | Static + background regen | ✅ Bon | Grand mixed sites | Premier requête après revalidation obtient stale page |
| CSR | In le navigateur | ⚠️ Risky | Logged-in dashboards | Vide HTML to AI robots d’exploration; render-wave delay |
Built-in SEO field options
| Option | Field ID | Plan | Notes |
|---|---|---|---|
| SEO Fields App | seo-metatags | Growth | Title/desc/OG + SERP preview; ajouter per content type |
| AI SEO App | sb_ai_seo | Premium | LLM-generated meta, 22 languages; bulk via Management API |
| Manual fields | (votre propre) | Quelconque | La plupart flexible; seo_title, noindex, canonical_url, etc. |
Ce que Storyblok fait vs. what’s on the frontend
| Handled by Storyblok | Left to the frontend |
|---|---|
| Stores content + sert API | Rendering mode (SSG/SSR/ISR/CSR) |
| SEO field valeurs (via apps) | Rendering meta tags into <head> |
Image transforms via /m/ | Applying /m/, width/height, alt, lazy-load |
alternates données | hreflang + x-default tags |
| — | Canonicals, sitemap, robots.txt, JSON-LD, redirections |
Fast rules
- noindex preview/staging via server header (
X-Robots-Tag) — jamais JS. - Production = publié content + public token; preview = draft + preview token.
- Image WebP/transforms seulement fire with the
/m/URL prefix. - Slug changements don’t créer 301s — construire a
redirects_configcontent type. - Sitemap = récupérer publié stories from the CDN API; refresh via publish webhook.
- AI-crawler rendering varies by provider → raw HTML is the safest coverage baseline.
How devrait a Storyblok route render?
Choose the frontend rendering path
Storyblok SEO mistakes
- Assuming SEO fields render themselves. Storyblok stores valeurs; the frontend doit output titles, canonicals, robots directives, and données structurées.
- Shipping rankable routes as CSR-only pages. Render principal content and liens into the initial HTML with SSG or SSR.
- Letting preview URLs index. Protéger preview accès and retourner server-level
noindex; ne faites pas wait pour client JavaScript to ajouter it. - Publishing content sans invalidating the frontend. Connecter publication events to rebuild or cache-revalidation workflows.
- Building sitemaps from every story. Inclure seulement canonical, public, indexable routes—pas drafts, components, or preview paths.
Publié Storyblok changements are manquant on le site
Probable causer: a failed webhook, stale static construire, or mis en cache API/page réponse. Fix: trace the publish event via construire or revalidation logs and purge seulement the affected cache. Confirmer: live raw HTML contient the nouveau content and metadata.
Metadata exists in Storyblok but pas in page source
Probable causer: the frontend jamais maps the field, or updates it seulement après hydration. Fix: render the SEO component on le serveur/construire chemin. Confirmer: curl renvoie the intended title, canonical, and robots directive.
Preview pages apparaître in search
Probable causer: the preview host is public and lacks server-rendered exclusion. Fix: exiger authentication and send X-Robots-Tag: noindex or equivalent HTML in the initial réponse. Confirmer: the live preview réponse contient the directive avant JavaScript runs.
Storyblok images are slow or oversized
Probable causer: original assets are requested sans /m/ transformations or dimensions. Fix: generate correctement sized variants and reserve layout space. Confirmer: production requêtes utiliser the transformed asset and rendered dimensions match afficher nécessite.
Vérifier Storyblok output in raw HTML
url='https://example.com/page/'
curl -fsSL "$url" | grep -Eio '<title>[^<]+|<link[^>]+rel="canonical"[^>]*|<meta[^>]+name="robots"[^>]*'Run ce in DevTools Console to inspect the rendered head:
({title: document.title, canonical: document.querySelector('link[rel="canonical"]')?.href, robots: document.querySelector('meta[name="robots" i]')?.content});Differences entre the two outputs point to client-only head changements.
Outils pour Storyblok QA
- Render Gap compares initial and rendered content, metadata, liens, and robots signals.
- Google Index Checker checks observable status, canonical, and noindex blockers on public routes.
- HTTP Header Checker checks preview
X-Robots-Tag, mise en cache, and redirection behavior. - Sitemap Validator checks que generated sitemap URLs resolve and ne faites pas expose preview or noncanonical routes.
Prove a Storyblok SEO release
Publish-path tester
Tester to run: publish a controlled story modifier and trace webhook, construire/revalidation, and live source HTML. Attendu result: the canonical production route updates dans the normal publishing window. Échec interpretation: the delivery chain or cache is stale. Monitoring window: le site’s publish SLA. Rollback trigger: production content and metadata come from différent versions.
Preview-exclusion tester
Tester to run: requête preview URLs with curl -I and inspect raw HTML. Attendu result: accès contrôler and a server-visible noindex prevent indexation. Échec interpretation: exclusion dépend on JavaScript or is absent. Monitoring window: immediate. Rollback trigger: a public preview réponse is indexable.
Rendering tester
Tester to run: comparer raw and rendered output pour representative templates. Attendu result: principal content, liens, title, canonical, and robots rules agree. Échec interpretation: the frontend relies on client rendering pour essential SEO output. Monitoring window: every frontend release. Rollback trigger: a clé template loses content or head signals in raw HTML.
Ressources utiles
My writing
- The Beginner’s Guide to SEO technique — the foundation everything ici sits on.
- JavaScript SEO Problèmes & Meilleur Practices — my principal référence on rendering modes, JS canonicals, and metadata; directement relevant to quelconque headless/Storyblok construire.
My speaking
- JavaScript SEO — Ungagged 2019 (SlideShare) — how headless/decoupled CMSes split frontend from backend, plus Googlebot’s stateless rendering. (Standing disclaimer: the dynamic-rendering advice in que deck is now outdated — Google deprecated it; utiliser SSR/SSG.)
On ce site
- SEO pour a CMS headless — the general headless playbook ce article specializes; rendering modes, the ISR trap, canonical fragmentation, migrations.
- JavaScript SEO — the rendering side in depth.
- Canonicalization — the consolidation mechanism behind frontend canonicals.
From autour the industry
- Storyblok — CMS headless and SEO FAQ — Storyblok’s propre framing of où SEO responsibility lands.
- Storyblok — SEO with Storyblok and Astro (Ronny Shani, Aug 2025) — the current, framework-specific official tutorial.
- Storyblok — Structured Content (Olena Teselko, Oct 2025) — the AI-search/structured-content cas pour Storyblok.
- Storyblok — Managing Redirections with a CMS headless — the
redirects_configcontent-type pattern. - Webstacks — Storyblok SEO Technical Optimization Guide — the strongest independent guide; content modeling, rendering, Core Web Vitals, plus migration cas données (TomTom “2x SEO performance,” Unified “84% LCP improvement”).
- FocusReactive — Typical Suivant.js SEO Pitfalls (Alex Hramovich) — le serveur-rendered-metadata échec mode: “if they’re not set server-side, it’s a disaster.”
- Straffesites — Localized Sitemap with Astro + Storyblok — a worked sitemap/i18n implementation pour the Astro + Storyblok stack.
Testez vos connaissances: Storyblok SEO
Five rapide questions on doing SEO with the Storyblok CMS headless. Pick an réponse pour chaque, alors vérifier.
Journal des modifications
Mis à jour le 18 juil. 2026.
Résumé éditorial et détails enregistrés des changements.Détails des changements
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
Comparaison complète indisponible — aucun instantané antérieur n’a été archivé pour cette révision.