Guide Strapi SEO

Strapi est a CMS headless avec aucun frontend, donc votre SEO est decided par comment le frontend renders — plus contenu modeling, le SEO plugin, sitemaps, drafts, et preview hygiene.

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

Strapi est an open-source CMS headless avec aucun rendu couche, donc c’est SEO-neutral — chaque résultat est decided par le frontend (Suivant.js, Nuxt, Astro) que consumes son API. Rendre dans HTML à construire or requête temps (SSG/SSR), pas dans le navigateur (CSR). Model SEO champs dans votre contenu types (utiliser le community SEO plugin), garder drafts et preview/staging deployments out de le indexer, bloquer le /admin panel et raw /api JSON, et construire sitemap.xml et robots.txt à le frontend. Obtenir rendu correct et a Strapi site peut beat a traditional CMS on Core Web Vitals.

TL;DR — Strapi est a backend-seulement CMS headless (REST + GraphQL, self-hosted or Strapi Cloud) avec aucun rendu couche, donc il est SEO-neutral — le frontend’s rendu mode decides tout. SSG/SSR ship fully-rendu HTML et sont sûr; CSR est risky (a robot d’exploration que récupère seulement le initial HTML voit an vide shell — c’est comment plusieurs major AI robots d’exploration currently behave); ISR a le stale-on-premier-requête trap. Model SEO champs dans votre contenu types (le community @strapi/plugin-seo stores et previews les mais fait pas sortie HTML, sitemaps, or robots.txt — c’est le frontend’s job). Garder drafts out via le publish workflow (jamais réussir auth tokens dans public requêtes), noindex preview/staging à le host level, garder /admin et raw /api/* JSON out de recherche, et construire sitemap.xml + robots.txt à le frontend. Strapi est neutral; votre architecture est le produit.

Strapi n’est pas le SEO décision — le frontend est

Le unique la plupart important concept dans Strapi SEO: Strapi a aucun rendu couche. Il est contenu storage, a contenu model, an editing UI, et an API. Chaque SEO résultat — indexability, metadata, speed, données structurées — est determined par le frontend framework consuming Strapi’s API. Strapi’s job est purely à store et servir le correct champs.

Preuve à l’appui de cette affirmation Strapi provides REST and GraphQL content APIs rather than rendering a public website. Portée : GraphQL requires Strapi's GraphQL plugin; REST is available for content types. Niveau de confiance : élevé · Vérifié : Strapi: REST API

Que rend “Strapi est mauvais pour SEO” le incorrect frame. Strapi est neutral. As Strapi’s propre team puts il, “headless architectures exiger developers à prendre ownership de SEO aspects que traditional système de gestion de contenus handle automatiquement.” A Strapi + Suivant.js site rendu on SSG, avec a disciplined metadata couche, va outperform a neglected WordPress install. A Strapi site fronted par a client-rendu React SPA avec aucun metadata wiring va quietly fall apart. Même backend, opposite résultats — parce que le rendu decisions differ. Ce est le même point Je faire à propos de JavaScript SEO généralement: le question à commencer avec est toujours comment est le frontend rendu ce contenu?

Le four rendu modes (le la plupart critical décision)

«- SSG — Static Site Generation. HTML built at build time, served as static files. Best-case SEO: fully-rendered HTML on first fetch, fast TTFB and Core Web Vitals. Tradeoff: new/changed content needs a rebuild. Gatsby and Astro are SSG-first; Next.js does it per route. » (Traduction) (Résumé en français de la section vingt-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- SSR — Server-Side Rendering. HTML rendered per request on a server or edge. Always-fresh, fully-rendered HTML. Tradeoff: Strapi API latency lands directly in your TTFB on every request. Next.js, Nuxt, SvelteKit, Remix. » (Traduction) (Résumé en français de la section vingt-cinq, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- ISR — Incremental Static Regeneration. Static pages regenerated in the background after a revalidation window. A good middle ground with one trap (below). » (Traduction) (Résumé en français de la section vingt-cinq, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.) «- CSR — Client-Side Rendering. A near-empty shell ships and the browser fetches from Strapi and builds the DOM. Worst SEO option: Google must queue the page for a later render wave — “Googlebot queues all pages with a 200 HTTP status code for rendering, unless a robots meta tag or header tells Google not to index the page” — so your content doesn’t exist until that wave runs. AI crawlers and Bing handle this far worse than Google. Acceptable only for logged-in dashboards you don’t want indexed anyway. A raw React/Vue SPA over Strapi lands here by default — avoid it for public content.

Preuve à l’appui de cette affirmation Google sends pages with successful HTTP responses to a rendering queue and recommends server-side or pre-rendering for reliable content delivery. Portée : Google Search JavaScript processing; rendering is not an assurance of indexing. Niveau de confiance : élevé · Vérifié : Google: JavaScript SEO basics

» (Traduction) (Résumé en français de la section vingt-cinq, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.)

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

Content modeling pour le SEO in Strapi

Strapi donne le frontend rien à rendre unless vous put le champs dans le contenu model. Pour chaque public contenu type, ajouter an SEO component avec à 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 champ pour slugs — il auto-generates depuis le titre et enforces uniqueness. Pour multilingual sites, enable Strapi’s built-dans i18n per contenu type, localize le slug et SEO champs per locale, alors sortie <link rel="alternate" hreflang="..."> dans le frontend en utilisant le localizations relationship chaque entry exposes. As SALT.agency notes, le titre “peut soit être populated avec le Strapi SEO Plugin or par creating a texte champ où le titre balise va être stored, avec conditions ajouté tel as pas étant shorter que or pas exceeding a définir amount de characters.”

Le frontend alors lit ceux champs depuis le API et populates le <head> — Suivant.js generateMetadata, Nuxt useSeoMeta, Astro’s layout <head>. Le reliability règle est le même as tout headless SEO: HTML-level metadata beats JS-injected metadata, parce que Google voit il on le premier récupérer.

«## The Strapi SEO plugin — what it does and doesn’t do » (Traduction) (Résumé en français de la section trente-deux, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«The community SEO plugin (@strapi/plugin-seo, formerly @strapi-community/plugin-seo, listed on the Strapi Market) is the standard tool. It “embeds a side panel in every Content-Type edit view where you can set meta titles, descriptions, canonical URLs, and social share images,” adds a SERP preview, and runs in-content analysis — green, orange, or red indicators for readability, keyword distribution, and schema compliance. » (Traduction) (Résumé en français de la section trente-trois, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«What it does not do, and this is the most common misconception: » (Traduction) (Résumé en français de la section trente-quatre, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«- It does not generate the <head> HTML — the frontend renders the fields. » (Traduction) (Résumé en français de la section trente-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- It does not generate a sitemap — that’s a separate plugin (on Strapi 5, the Webtools sitemap add-on or strapi-5-sitemap-plugin). » (Traduction) (Résumé en français de la section trente-cinq, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- It does not write robots.txt or implement structured data — frontend’s job. » (Traduction) (Résumé en français de la section trente-cinq, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)

«In other words, the plugin gives editors a good authoring UX and stores clean fields. The frontend still has to do the actual SEO output. » (Traduction) (Résumé en français de la section trente-six, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«## Drafts, preview, /admin, and /api — keeping the wrong things out of the index » (Traduction) (Résumé en français de la section trente-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«This is where Strapi has more failure modes than a hosted platform like Shopify. » (Traduction) (Résumé en français de la section trente-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«- Draft/Publish. Strapi marks drafts with publishedAt: null; the API returns only published entries to unauthenticated requests. The critical discipline: never pass an authenticated API token in public frontend requests, or all draft content becomes fetchable. The sitemap plugin/add-on respects publish state and only includes published URLs. » (Traduction) (Résumé en français de la section trente-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- Preview / staging environments. Vercel branch deploys, Netlify deploy previews, and dedicated preview hosts consuming Strapi drafts are usually publicly reachable. Block them with a layered approach: an X-Robots-Tag: noindex header at the host level (not just a meta tag a CSR page injects late), Disallow: / in robots.txt, a noindex meta tag on every page, and HTTP authentication where possible. Watch Search Console for unexpected hostnames — that’s your early warning. » (Traduction) (Résumé en français de la section trente-neuf, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- The /admin panel. Strapi’s admin is a React SPA; confirm it carries <meta name="robots" content="noindex"> (Strapi v4+ does), keep it off public links, and password-protect it — an unprotected /admin is discoverable via Google dorking. » (Traduction) (Résumé en français de la section trente-neuf, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.) «- The raw /api/* JSON. It won’t rank as a page, but it wastes crawl budget and can leak data. Most production setups put the API on its own subdomain (cms.example.com / api.example.com); block that subdomain entirely in robots.txt and keep it off the sitemap. If API and frontend share a domain, Disallow: /api/. » (Traduction) (Résumé en français de la section trente-neuf, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.)

«## Sitemaps and robots.txt — built at the frontend » (Traduction) (Résumé en français de la section quarante, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

il y a aucun Yoast, donc les deux sont explicit. Deux sitemap routes:

  1. A sitemap plugin à l’intérieur Strapi — generates XML et seulement inclut publié entries. On Strapi 5 le maintained option est le Webtools sitemap ajouter-on (strapi-plugin-webtools + webtools-addon-sitemap) pour plus grand, multilingual sites, or strapi-5-sitemap-plugin pour simpler ones. Le older standalone strapi-plugin-sitemap (pluginpal) tops out à Strapi 4 — son propre docs point v5 utilisateurs à Webtools à la place, donc ne pas install il on a v5 project. Quoting le plugin docs: quand draft/publish est on, “ce paramètre va assurez-vous que tout draft pages sont excluded depuis le sitemap.”
  2. Frontend-generated — Suivant.js sitemap.ts, Astro @astrojs/sitemap, Nuxt sitemap modules, fetching publié URLs depuis le Strapi API. Plus contrôler over URL canoniques, lastmod, et changefreq.

robots.txt est servi depuis le frontend (Suivant.js robots.ts, Astro public/robots.txt). Inclure a Sitemap: directive, bloquer preview hosts avec Disallow: /, et — as avec quelconque headless stack — jamais disallow .js or .css (il bloque rendu).

Le élevé-valeur modèle est le webhook workflow: Strapi fires a webhook on publish → triggers a Vercel/Netlify rebuild or on-demand revalidation → regenerates le sitemap → pings Recherche Google Console et IndexNow. Parce que headless contenu mises à jour flow via an API plutôt que a plugin que pings moteur de recherches, IndexNow (Bing, Yandex, et others) est surtout valuable wired à que publish webhook.

Strapi Cloud vs. self-hosted — le SEO implications

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

  • SSG/ISR: Strapi API speed matters à construire temps, pas runtime — pages sont pre-built, donc API latency ne fait pas touch le utilisateur’s TTFB.
  • SSR: Strapi API latency ajoute directement à TTFB on chaque requête → affecte LCP → a réel classement entrée. Ce est le cas à optimize.

Strapi Cloud est managed infrastructure avec an asset CDN — bon pour teams sans DevOps. Self-hosted donne vous complet contrôler de mise en cache (Redis), database indexation, et geographic proximity à le frontend. Soit façon: cache Strapi API réponses à le CDN couche, or utiliser ISR avec court revalidation, à decouple frontend runtime depuis Strapi latency. Un caveat worth stating plainly — Strapi Cloud’s CDN sert le Strapi API et assets, pas votre frontend site web; votre Core Web Vitals sont mesuré contre le frontend, qui est hosted séparément (Vercel, Netlify, Cloudflare Pages).

Migrating à or depuis Strapi

WordPress → Strapi est le courant chemin, et migrations sont où headless SEO en réalité goes incorrect:

  • Map chaque existing slug exactly sur Strapi’s UID champ; quelconque slug modifier nécessite a 301 redirection (utiliser strapi-plugin-redirect-urls or Smart Redirection Manager, lire par le frontend/middleware).
  • Migrate meta titles, descriptions, et og:image depuis wp_postmeta dans le SEO component champs, et image texte alternatif dans le Media Library alternativeText champ.
  • Inventory chaque URL — pas simplement posts: balise pages, paginated archives, parameter URLs — et construire le redirection map avant go-actif.
  • Migrate canonicals explicitly; ne pas assume le frontend auto-generates les correct.
  • Post-launch: exécuter a Screaming Frog explorer comparaison, re-vérifier données structurées avec le Résultats enrichis Tester, resubmit sitemaps à GSC et Bing, et stand up IndexNow.

Strapi SEO est vraiment a specialized application de JavaScript SEO et rendu — le sibling CMS headless SEO écrire-up covers le plateforme-agnostic version de tout de ce.

Ajouter une note d’expert

Épingler une citation d’expert

Nouvelle personne ? Créez son profil non revendiqué à /admin/experts/ → Épingler une citation d’expert d’abord.