Guide Strapi SEO

Strapi is a CMS headless with aucun frontend, so votre SEO is decided by how the frontend renders — plus content modeling, the SEO plugin, sitemaps, drafts, and preview hygiene.

Première publication : 27 juin 2026 · Dernière mise à jour : 3 août 2026 · Advanced
Langues

Strapi is an open-source CMS headless with aucun rendering couche, so it's SEO-neutral — every outcome is decided by the frontend (Suivant.js, Nuxt, Astro) que consumes its API. Render in HTML at construire or requête temps (SSG/SSR), pas in le navigateur (CSR). Model SEO fields in votre content types (utiliser the community SEO plugin), garder drafts and preview/staging deployments out of the index, block the /admin panel and raw /api JSON, and construire sitemap.xml and robots.txt at the frontend. Obtenir rendering correct and a Strapi site peut beat a traditional CMS on Core Web Vitals.

TL;DR — Strapi is a backend-only CMS headless (REST + GraphQL, self-hosted or Strapi Cloud) with aucun rendering couche, so it is SEO-neutral — the frontend’s rendering mode decides everything. SSG/SSR ship fully-rendered HTML and are safe; CSR is risky (a robot d’exploration que récupère seulement the initial HTML sees an vide shell — that’s how several major AI robots d’exploration currently behave); ISR has the stale-on-first-request trap. Model SEO fields in votre content types (the community @strapi/plugin-seo stores and previews les but fait pas output HTML, sitemaps, or robots.txt — that’s the frontend’s job). Garder drafts out via the publish workflow (jamais réussir auth tokens in public requêtes), noindex preview/staging at the host level, garder /admin and raw /api/* JSON out of search, and construire sitemap.xml + robots.txt at the frontend. Strapi is neutral; votre architecture is the product.

Strapi n’est pas the SEO decision — the frontend is

The unique la plupart important concept in Strapi SEO: Strapi has aucun rendering couche. It is content storage, a content model, an editing UI, and an API. Every SEO outcome — indexability, metadata, speed, données structurées — is determined by the frontend framework consuming Strapi’s API. Strapi’s job is purely to store and serve the correct fields.

Evidence for this claim Strapi provides REST and GraphQL content APIs rather than rendering a public website. Scope: GraphQL requires Strapi's GraphQL plugin; REST is available for content types. Confidence: high · Verified: Strapi: REST API

Que rend “Strapi is bad for SEO” the incorrect frame. Strapi is neutral. As Strapi’s propre team puts it, “headless architectures exiger developers to prendre ownership of SEO aspects que traditional système de gestion de contenus handle automatically.” A Strapi + Suivant.js site rendering on SSG, with a disciplined metadata couche, va outperform a neglected WordPress install. A Strapi site fronted by a client-rendered React SPA with aucun metadata wiring va quietly fall apart. Même backend, opposite outcomes — parce que the rendering decisions differ. Ce is the même point I faire à propos de JavaScript SEO généralement: the question to commencer with is toujours how is the frontend rendering ce content?

The four rendering modes (the la plupart critical decision)

  • SSG — Static Site Generation. HTML construit at construire temps, served as static fichiers. Best-case SEO: fully-rendered HTML on premier récupérer, fast TTFB and Core Web Vitals. Tradeoff: nouveau/modifié content nécessite a rebuild. Gatsby and Astro are SSG-first; Suivant.js fait it per route.
  • SSR — Rendu côté serveur. HTML rendered per requête on a server or edge. Always-fresh, fully-rendered HTML. Tradeoff: Strapi API latency lands directement in votre TTFB on every requête. Suivant.js, Nuxt, SvelteKit, Remix.
  • ISR — Incremental Static Regeneration. Static pages regenerated in the background après a revalidation window. A bon middle ground with un trap (ci-dessous).
  • CSR — Rendu côté client. A near-empty shell ships and le navigateur récupère from Strapi and builds the DOM. Worst SEO option: Google doit queue lune page pour a plus tard render wave — “Googlebot queues tout pages with a 200 Code d’état HTTP pour rendering, unless a robots meta tag or header indique Google pas to index the page” — so votre content doesn’t exist jusqu’à que wave runs. AI robots d’exploration and Bing handle ce far worse que Google. Acceptable seulement pour logged-in dashboards vous don’t vouloir indexé anyway. A raw React/Vue SPA over Strapi lands ici by par défaut — éviter it pour public content.
Evidence for this claim Google sends pages with successful HTTP responses to a rendering queue and recommends server-side or pre-rendering for reliable content delivery. Scope: Google Search JavaScript processing; rendering is not an assurance of indexing. Confidence: high · Verified: Google: JavaScript SEO basics

The ISR trap: quand the revalidation window expires, the suivant requête — qui pourrait be Googlebot — encore obtient the stale mis en cache page; the fresh un sert seulement on the suivant requête. Pour volatile données (prices, stock), préférer SSR. ISR is ideal pour content que changements on the order of hours or days.

Content modeling pour le SEO in Strapi

Strapi donne the frontend nothing to render unless vous put the fields in le contenu model. Pour every public content type, ajouter an SEO component with at minimum:

  • metaTitle, metaDescription
  • canonicalURL
  • ogImage (and Ouvrir Graph / Twitter fields)
  • a robots directive — e.g. a preventIndexing Boolean pour per-entry noindex contrôler

Utiliser Strapi’s UID field pour slugs — it auto-generates from the title and enforces uniqueness. Pour multilingual sites, enable Strapi’s built-in i18n per content type, localize the slug and SEO fields per locale, alors output <link rel="alternate" hreflang="..."> in the frontend en utilisant the localizations relationship chaque entry exposes. As SALT.agency notes, the title “peut soit be populated with the Strapi SEO Plugin or by creating a text field où the title tag va be stored, with conditions ajouté tel as pas being shorter que or pas exceeding a définir amount of characters.”

The frontend alors reads ceux fields from the API and populates the <head> — Suivant.js generateMetadata, Nuxt useSeoMeta, Astro’s layout <head>. The reliability rule is the même as tout headless SEO: HTML-level metadata beats JS-injected metadata, parce que Google sees it on the premier récupérer.

The Strapi SEO plugin — ce que it fait and doesn’t do

The community SEO plugin (@strapi/plugin-seo, formerly @strapi-community/plugin-seo, listed on the Strapi Market) is the standard outil. It “embeds a side panel in every Content-Type edit view où vous pouvez définir meta titles, descriptions, URL canoniques, and social share images,” adds a SERP preview, and runs in-content analysis — green, orange, or red indicators pour readability, keyword distribution, and schema compliance.

Ce que it fait pas do, and ce is the la plupart courant misconception:

  • It fait pas generate the <head> HTML — the frontend renders the fields.
  • It fait pas generate a sitemap — that’s a separate plugin (on Strapi 5, the Webtools sitemap add-on or strapi-5-sitemap-plugin).
  • It fait pas écrire robots.txt or implement données structurées — frontend’s job.

En d’autres termes, the plugin donne editors a bon authoring UX and stores clean fields. The frontend encore has to do the réel SEO output.

Drafts, preview, /admin, and /api — keeping the incorrect choses out of the index

Ce is où Strapi has plus échec modes que a hosted platform comme Shopify.

  • Draft/Publish. Strapi marks drafts with publishedAt: null; the API renvoie seulement publié entries to unauthenticated requêtes. The critical discipline: jamais réussir an authenticated API token in public frontend requêtes, or tout draft content becomes fetchable. Le sitemap plugin/add-on respects publish state and seulement inclut publié URLs.
  • Preview / staging environments. Vercel branch deploys, Netlify deploy previews, and dedicated preview hosts consuming Strapi drafts are usually publicly reachable. Block les with a layered approach: an X-Robots-Tag: noindex header at the host level (pas simplement a meta tag a CSR page injects late), Disallow: / in robots.txt, a noindex meta tag on every page, and HTTP authentication où possible. Watch Search Console pour unexpected hostnames — that’s votre early warning.
  • The /admin panel. Strapi’s admin is a React SPA; confirmer it carries <meta name="robots" content="noindex"> (Strapi v4+ fait), garder it off public liens, and password-protect it — an unprotected /admin is discoverable via Google dorking.
  • The raw /api/* JSON. It won’t rank as une page, but it wastes budget d’exploration and peut leak données. La plupart production setups put the API on its propre subdomain (cms.example.com / api.example.com); block que subdomain entirely in robots.txt and garder it off le sitemap. Si API and frontend share a domain, Disallow: /api/.

Sitemaps and robots.txt — construit at the frontend

There’s aucun Yoast, so les deux are explicit. Two sitemap routes:

  1. A sitemap plugin à l’intérieur Strapi — generates XML and seulement inclut publié entries. On Strapi 5 the maintained option is the Webtools sitemap add-on (strapi-plugin-webtools + webtools-addon-sitemap) pour plus grand, multilingual sites, or strapi-5-sitemap-plugin pour simpler ones. The older standalone strapi-plugin-sitemap (pluginpal) tops out at Strapi 4 — its propre docs point v5 utilisateurs to Webtools à la place, so don’t install it on a v5 project. Quoting the plugin docs: quand draft/publish is on, “ce setting va assurez-vous que tout draft pages are excluded from le sitemap.”
  2. Frontend-generated — Suivant.js sitemap.ts, Astro @astrojs/sitemap, Nuxt sitemap modules, fetching publié URLs from the Strapi API. Plus contrôler over URL canoniques, lastmod, and changefreq.

robots.txt is served from the frontend (Suivant.js robots.ts, Astro public/robots.txt). Inclure a Sitemap: directive, block preview hosts with Disallow: /, and — as with quelconque headless stack — jamais disallow .js or .css (it blocks rendering).

The high-value pattern is the webhook workflow: Strapi fires a webhook on publish → triggers a Vercel/Netlify rebuild or on-demand revalidation → regenerates the sitemap → pings Recherche Google Console and IndexNow. Parce que headless content updates flow via an API plutôt que a plugin que pings moteur de recherches, IndexNow (Bing, Yandex, and others) is surtout valuable wired to que publish webhook.

Strapi Cloud vs. self-hosted — the SEO implications

Strapi’s hosting affecte API réponse temps, qui matters differently by rendering mode:

  • SSG/ISR: Strapi API speed matters at construire temps, pas runtime — pages are pre-built, so API latency doesn’t touch the user’s TTFB.
  • SSR: Strapi API latency adds directement to TTFB on every requête → affecte LCP → a réel ranking input. Ce is the cas to optimize.

Strapi Cloud is managed infrastructure with an asset CDN — bon pour teams sans DevOps. Self-hosted donne vous complet contrôler of mise en cache (Redis), database indexation, and geographic proximity to the frontend. Soit façon: cache Strapi API réponses at the CDN couche, or utiliser ISR with short revalidation, to decouple frontend runtime from Strapi latency. Un caveat worth stating plainly — Strapi Cloud’s CDN sert the Strapi API and assets, pas votre frontend website; votre Core Web Vitals are mesuré contre the frontend, qui is hosted separately (Vercel, Netlify, Cloudflare Pages).

Migrating to or from Strapi

WordPress → Strapi is the courant chemin, and migrations are où headless SEO en réalité goes incorrect:

  • Map every existing slug exactly onto Strapi’s UID field; quelconque slug modifier nécessite a 301 redirection (utiliser strapi-plugin-redirect-urls or Smart Redirection Manager, lire by the frontend/middleware).
  • Migrate meta titles, descriptions, and og:image from wp_postmeta into the SEO component fields, and image texte alternatif into the Media Library alternativeText field.
  • Inventory every URL — pas simplement posts: tag pages, paginated archives, parameter URLs — and construire the redirection map avant go-live.
  • Migrate canonicals explicitly; don’t assume the frontend auto-generates les correct.
  • Post-launch: run a Screaming Frog explorer comparison, re-verify données structurées with the Résultats enrichis Tester, resubmit sitemaps to GSC and Bing, and stand up IndexNow.

Strapi SEO is really a specialized application of JavaScript SEO and rendering — the sibling CMS headless SEO write-up covers the platform-agnostic version of tout of ce.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.