SEO Vitals brings real, per-field SEO quality scoring straight into the Strapi 5 content-manager.
released July 28, 2026
npm install strapi-plugin-seo-vitalsSEO quality scoring for Strapi 5 — attach one shared.seo component to any content-type and get real, per-field scoring (not just "is this filled in") both while editing and across your whole project.
shared.seo component (meta title/description/keywords/canonical URL, robots/indexing controls, OpenGraph fields, Twitter Card fields, and JSON-LD structured data) that you attach to any content-type from Content-Type Builder./admin/plugins/seo-vitals) — lists every content-type, whether it has the SEO component attached, and its health: for single types, the real good/improvements/bad numbers directly; for collection types, a green/orange/red bucket count plus average score, sorted worst-first. Expand a row to see every entry's real saved values and full check breakdown.yarn add strapi-plugin-seo-vitals
# or
npm install strapi-plugin-seo-vitals
# or
pnpm add strapi-plugin-seo-vitalsEnable in config/plugins.ts:
export default () => ({
'seo-vitals': { enabled: true },
});Restart your Strapi app once after installing — the plugin creates the shared.seo component on first boot and needs a full process restart (not just the in-app auto-reload) to register it.
SEO component (shared.seo)./admin/plugins/seo-vitals to see SEO health across every content-type in your project.shared.seo naming conflicts. This plugin creates a component named shared.seo. If your project already has a shared.seo component — whether created manually in Content-Type Builder or by another plugin (e.g. @strapi-community/plugin-seo) — the two will conflict: whichever exists first "wins", and this plugin's extra fields simply won't exist. The plugin logs a warning on boot if it detects an existing shared.seo component missing fields it expects, which usually means this conflict.
Fix: remove the existing shared.seo component in Content-Type Builder before installing this plugin, so it can create its own complete version. Deleting a component deletes its data on any entries already using it — back up or migrate anything you need first.
Fields are global per component, not per content-type. Strapi doesn't support per-content-type field customization for shared components — every content-type attaching shared.seo gets the same 17 fields, with no native way to show a smaller subset on one content-type only.
This project is licensed under the MIT License.
Share your work with the community and get it listed in the Strapi ecosystem for everyone to discover and use.
Submit
