CRAFT CMS SEO AUDIT · SEOMATIC · URL STRUCTURE · STRUCTURED DATA

Free Craft CMS SEO Audit

Craft CMS SEO depends on SEOmatic plugin configuration, URI format quality per section, JSON-LD coverage from field mappings, multi-site hreflang, and Twig template performance. DeepSEOAnalysis audits your live Craft site — validating SEOmatic meta tag output in the server-rendered HTML, structured data completeness, sitemap coverage per site, real CrUX Core Web Vitals, and AI visibility — with SEOmatic settings paths and Twig template snippets for every finding.

Audit my Craft CMS site →How we score

WHAT WE CHECK

6 Craft CMS-specific SEO checks

Craft CMS SEO auditing covers SEOmatic meta tag and canonical configuration, URI format slug quality per section, JSON-LD structured data from field mappings, XML sitemap coverage per multi-site, Core Web Vitals from real CrUX data, and AI visibility — with SEOmatic control panel paths and Twig template snippets for each finding.

🔧

SEOmatic configuration and meta tag coverage

SEOmatic is the standard SEO plugin for Craft CMS and the primary mechanism for meta tag generation, canonical URL management, and structured data output. The audit checks the server-rendered HTML of every crawled page for: `title` tag presence and uniqueness (duplicate titles across entries indicate the SEO title source field is not entry-specific); `meta name="description"` presence and length (50–160 characters); Open Graph tags (`og:title`, `og:description`, `og:image`, `og:url`); canonical tag self-reference (or intentional canonical to a different URL for translated variants); and the robots meta tag (pages that should be indexed must not carry `noindex`). Common SEOmatic configuration gaps: the SEO title source is set to the global site name rather than the entry title field, producing identical titles across all entries; the OG image source field is empty so social shares show no image; the canonical URL isn\'t set to the production domain (staging domain canonicals leak into production). The audit identifies all of these patterns across the crawled page set with the specific SEOmatic control panel settings path for each fix.

🔗

URL structure and slug quality

Craft CMS\'s flexible URI format system is one of its greatest SEO strengths — unlike rigid CMSes, you can define exactly what pattern each section\'s URLs follow. The audit checks: URI format pattern quality (numeric ID-based slugs like `/news/12345` instead of descriptive slugs like `/news/best-practices-for-craft-seo`); slug character composition (special characters, accented characters that survive but rank poorly); Structure section depth (entries at depth 4+ clicks from the homepage via parent/child nesting, common in complex Structure sections); URL uniqueness across entries (two entries with the same slug in the same section create a conflict — Craft appends `-2`, `-3` suffixes automatically, but these should be prevented at content creation time); and category page URL coverage (Categories in Craft generate their own URLs only if a Category group has a URI format configured — unconfigured category groups produce no category landing pages, leaving category-level commercial queries unserved). The audit also checks for 301 redirect coverage of any URL changes — if entries were moved or slugs changed without Retour plugin redirects, old URLs return 404 and lose link equity.

📋

JSON-LD structured data coverage

SEOmatic outputs several JSON-LD types automatically from its configuration: `WebSite` with `SearchAction` (sitelinks search box), `Organization` or `LocalBusiness` from global settings, `BreadcrumbList` from the entry\'s URL structure, and `WebPage` for all pages. For blog/news entries, `Article` JSON-LD is available when the Content SEO → Structured Data → Article type is configured per section. For product sections, `Product` JSON-LD requires mapping Craft fields to the schema properties in SEOmatic\'s field settings. The audit checks: JSON-LD block presence and completeness in the server-rendered HTML (not injected via Twig `{% js %}` or JavaScript — SEOmatic should render JSON-LD in the document `head` on first load); `Article.author` property with `Person` type and `sameAs` linking to authoritative author profiles (critical for E-E-A-T); `BreadcrumbList.item` URLs matching the canonical URL of each hierarchy level; and FAQPage schema — SEOmatic supports FAQ structured data via its Scape plugin addon or via a custom Twig template that reads from a Matrix field of question/answer pairs. The audit flags missing schema types per section and provides the SEOmatic control panel settings path or Twig template pattern for each addition.

🗺️

XML sitemap and multi-site configuration

SEOmatic generates an XML sitemap for each Craft site in a multi-site setup. For single-site Craft installations, the sitemap is typically at `/sitemap.xml`. For multi-site (multiple languages or domains in one Craft install), each site has its own sitemap. The audit checks: sitemap accessibility at the canonical domain (not a staging or preview URL), `lastmod` dates populated from Craft\'s entry `dateUpdated` field (SEOmatic uses this for lastmod — verify it\'s current for recently updated entries), sitemap coverage completeness (all live, non-excluded sections and category groups with URI formats should appear; entries excluded from sitemap via the SEO → Sitemap toggle in the entry editor should not appear), and the `Sitemap` directive in `robots.txt` pointing to the correct sitemap URL. For Craft multi-site with hreflang: SEOmatic generates hreflang tags for entries that exist across multiple sites in the same group — check that all entry variants are published in each site and that the hreflang URLs are reciprocal (each variant references all other variants including itself). A common gap: entries published in the primary site but not yet translated/published in secondary sites — this results in missing hreflang tags on the primary site\'s entries for those locales.

Core Web Vitals for Craft CMS

Craft CMS is a server-side PHP application — templates render in Twig on the server and serve HTML directly, so there\'s no JavaScript rendering gap for content. However, Craft sites vary significantly in performance depending on the front-end framework choice, caching configuration, and asset handling. **LCP** — Craft doesn\'t include native image optimisation; use the Imager-X plugin (transformations to WebP, lazy loading, responsive srcset) or a cloud image CDN (Cloudinary, Imgix). Ensure the LCP image in the template uses `fetchpriority="high"` and includes explicit width/height. **INP** — Craft\'s Twig templates are static HTML by default; JavaScript INP issues come from front-end frameworks layered on top (Alpine.js, Vue.js, React islands), third-party embeds, or custom JavaScript for search, filtering, or animations. **CLS** — image dimensions not specified in Twig template (use `{% set transform = craft.imager.transformImage(image, { width: 1200, height: 630 }) %}` or explicit dimensions); custom web fonts loaded without a font-display strategy. **Caching** — Craft\'s built-in template caching (`{% cache %}` tag) and full-page caching via Blitz plugin significantly improve TTFB. For high-traffic Craft sites, Blitz full-page cache is the most impactful single performance improvement. The audit uses real CrUX field data for LCP, INP, and CLS on mobile and desktop.

🧠

AI visibility for Craft CMS sites

Add `llms.txt` to the Craft CMS web root (`/web/llms.txt` in a standard Craft installation, as Craft\'s public web root is the `/web` directory by default). The file lists key content sections, their purposes, and important entry types in plain text. Verify AI crawlers are not blocked in `robots.txt` — Craft doesn\'t generate a default robots.txt that blocks AI crawlers, but custom robots.txt configurations should be checked. For FAQPage JSON-LD: the most natural Craft implementation is a Matrix field with question/answer block types on entry types that have FAQ sections — a Twig template then iterates the Matrix blocks and outputs FAQPage JSON-LD. SEOmatic supports this pattern via the Scape plugin or custom meta bundles. For question-format headings: instruct content editors to use heading-format H2 subheadings in Matrix body copy blocks (`{% block %}` types) or in the rich text Redactor field — headings phrased as questions ("How does X work?", "What is the best Y?") contribute to the question-heading ratio signal. The audit checks all five AI visibility signals — llms.txt, AI crawler access, FAQPage/HowTo schema in server-rendered HTML, question-heading ratio (≥20%), and content chunkability (avg section ≤400w) — with Twig template snippets and SEOmatic settings paths for each fix.

HOW IT WORKS

Audit your Craft CMS site in 60 seconds

  1. Enter your Craft CMS site URL. No admin access, plugin credentials, or GraphQL API keys needed — the audit crawls the public HTTP output as Googlebot would. Works with all Craft versions (3.x, 4.x, 5.x), any template structure, and with or without SEOmatic installed.
  2. We crawl and analyse. The engine checks SEOmatic meta tag output in the raw server HTTP response, validates JSON-LD schema blocks per section type, audits URI format slug quality across crawled entries, checks sitemap coverage and hreflang reciprocity for multi-site installations, measures CrUX Core Web Vitals from real Chrome field data, and evaluates all five AI visibility signals.
  3. You get a prioritised report. Craft CMS-specific issues first — SEOmatic configuration gaps, missing section-level structured data, slug quality issues, hreflang missing for multi-site entries — then general SEO, each with the SEOmatic control panel path, Twig template snippet, or Retour plugin configuration for the fix.

FAQ

Questions about the Craft CMS SEO audit

Does Craft CMS have good SEO features built in?

Craft CMS itself doesn\'t include SEO-specific features out of the box — it\'s a flexible content management framework, not an opinionated CMS with built-in SEO tooling. SEO capabilities in Craft come from the SEOmatic plugin (the industry-standard SEO plugin for Craft, by nystudio107) or custom field implementations. SEOmatic provides: per-entry meta title and description overrides, Open Graph and Twitter Card tags, canonical URL management, XML sitemap generation and submission, robots.txt management, JSON-LD structured data (Article, WebSite, BreadcrumbList, and custom entity support), and hreflang for multi-site/multi-language Craft installations. Without SEOmatic or an equivalent custom implementation, a Craft site will lack proper meta tag management, canonical tags, XML sitemap, and structured data. The audit identifies whether these signals are present in the server-rendered HTML regardless of whether SEOmatic or a custom implementation provides them.

How do I set up SEO fields in Craft CMS?

The standard pattern with SEOmatic: (1) Install SEOmatic via `composer require nystudio107/craft-seomatic` and enable in the Craft plugin store. (2) In SEOmatic → Content SEO, configure defaults per section (Singles, Channels, Structures) — set the SEO title source field (typically the entry Title field or a dedicated SEO Title field), description source, and OG image source. (3) For per-entry overrides: add SEOmatic\'s `seomatic` field to your entry field layouts — this surfaces an SEO panel in the entry editor where authors can override the title, meta description, canonical, and social image on a per-entry basis. (4) For structured data: SEOmatic auto-generates WebSite, BreadcrumbList, and Organization JSON-LD from plugin settings. For Article JSON-LD on blog entries, configure the Content SEO → Structured Data section per section type. (5) Verify the Twig template includes `{% hook \'seomaticFrontendTemplateHooks\' %}` (or the equivalent) in the `head` — SEOmatic injects all meta tags via this hook.

How does Craft CMS handle URLs for SEO?

Craft CMS generates URLs based on the URI format defined per section in Settings → Sections. The URI format uses Twig expressions: `news/{slug}` generates `/news/my-article-slug`, while `{parent.uri}/{slug}` generates nested structure URLs for Structure section types with parent/child relationships. Key SEO considerations: (1) The `slug` field in Craft is auto-generated from the entry title but is editable — keep slugs keyword-descriptive, lowercase, hyphen-separated, under 75 characters. (2) Structure sections with nested entries create parent/child URLs (`/services/web-design/seo-services`) — verify the depth doesn\'t exceed 3 levels for crawl efficiency. (3) Matrix fields don\'t generate their own URLs — they render as part of the parent entry URL. (4) Category group URLs are set similarly to sections; verify category pages have keyword-descriptive slugs. (5) When entries are moved, disabled, or deleted, Craft doesn\'t automatically create 301 redirects — use the Retour plugin (also by nystudio107) or SEOmatic\'s redirect management to handle URL changes without losing link equity.

Is the Craft CMS SEO audit free?

Yes. The complete audit is free with no signup and no email gate. Paid plans add saved history, scheduled monitoring, larger crawls (up to 1,000 pages), and agency workflows.