STATAMIC SEO AUDIT · SEO PRO · ANTLERS · URL ROUTES

Free Statamic SEO Audit

Statamic SEO relies on the SEO Pro addon configuration, collection route slug quality, JSON-LD in Antlers templates, XML sitemap per-collection coverage, and SSG vs dynamic mode performance. DeepSEOAnalysis audits your live Statamic site — validating SEO Pro meta tag output in the server-rendered HTML, structured data completeness, sitemap coverage, real CrUX Core Web Vitals, and AI visibility — with Antlers template snippets and SEO Pro config paths for every finding.

Audit my Statamic site →How we score

WHAT WE CHECK

6 Statamic-specific SEO checks

Statamic SEO auditing covers SEO Pro fieldset configuration and meta tag output, collection route URL structure, JSON-LD in Antlers templates, XML sitemap per-collection coverage, Core Web Vitals from real CrUX data (SSG and dynamic mode), and AI visibility — with Antlers template snippets and SEO Pro config paths for each finding.

🔧

SEO Pro fieldset configuration and meta tag output

SEO Pro is the standard SEO addon for Statamic 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 Pro title field is not entry-specific or the fallback to the entry title field isn\'t configured); `meta name="description"` presence and length (50–160 characters); Open Graph tags (`og:title`, `og:description`, `og:image` with an absolute URL, `og:url`); canonical tag self-reference (entries that should be their own canonical must not carry a different URL in the canonical tag — a common issue when staging domain canonicals leak into production via misconfigured `APP_URL` in `.env`); and the robots meta tag (entries with noindex enabled in SEO Pro should carry `meta name="robots" content="noindex"`, and entries that should be indexed must not). Common SEO Pro configuration gaps: the `{{ seo_pro:meta }}` tag is missing from the layout partial; the SEO title source isn\'t configured to fall back to the entry title field so many entries have empty titles; the OG image source isn\'t configured so social shares have no image. The audit identifies all patterns across the crawled page set with Antlers template paths and SEO Pro config keys for each fix.

🔗

URL structure from routes, collections, and taxonomy terms

Statamic\'s routing is configured via route files (`routes/web.php`), collection blueprint routes (`collections/[handle]/routes.yaml`), and taxonomy term URLs. The audit checks: route URL pattern quality (entries with `/id/{id}` or auto-generated non-descriptive slugs vs keyword-descriptive slugs like `/blog/best-practices-for-statamic-seo`); slug character composition (special characters, accented characters that may survive but rank poorly, or uppercase characters in slugs); collection route depth (entries at more than 3 URL segments from the root via nested collection structures or manually nested routes — `/{section}/{subsection}/{slug}` is fine; `/{section}/{subsection}/{category}/{subcategory}/{slug}` is too deep); taxonomy term URL coverage (taxonomies in Statamic generate term index URLs only if a route is configured for the taxonomy — unconfigured taxonomy routes produce term pages that 404, potentially missing commercial-query-relevant category landing pages); and URL uniqueness (duplicate slugs across collections are possible if routing isn\'t unique per collection — the audit detects pages with duplicate canonical URLs). For URL changes (slug edits, blueprint restructuring), check that the Redirect utility in the Statamic control panel or a custom redirect file is handling the old URLs to prevent link equity loss.

📋

JSON-LD structured data in Antlers templates

SEO Pro outputs `WebSite` with `SearchAction`, `Organization` from global site settings, and `BreadcrumbList` from the entry\'s URL structure. For content-type-specific schema, you need either SEO Pro extensions or custom Antlers template additions. The audit checks: JSON-LD block presence and completeness in the server-rendered HTTP response (not fetched via Alpine.js/Axios after page load — JSON-LD must be in the initial `head` response); `Article` JSON-LD on blog-type entries (requires per-entry `datePublished`, `dateModified`, `author` Person with `sameAs` pointing to LinkedIn or Wikipedia for E-E-A-T signals); `FAQPage` schema on entries that have FAQ sections (implement via a Bard fieldset with question/answer block types, then iterate in the Antlers template with a JSON-LD `script` block that maps the Bard blocks to `Question`/`acceptedAnswer` pairs); `Product` JSON-LD on product-type entries (if building a product or service site on Statamic); `BreadcrumbList` URL accuracy (each `item.id` must exactly match the canonical URL at that breadcrumb level — common error: trailing slash inconsistency between the breadcrumb item URL and the actual canonical). The audit flags missing schema types per collection and provides the Antlers template snippet for each addition.

🗺️

XML sitemap via SEO Pro and collection configuration

SEO Pro generates an XML sitemap at `/sitemap.xml` (configurable in `config/statamic/seo-pro.php`). The audit checks: sitemap accessibility at the canonical domain (not staging or a preview URL — verify `APP_URL` in `.env` matches the production domain); `lastmod` dates populated from the entry\'s `updated_at` timestamp (SEO Pro uses this automatically — verify entries have realistic `updated_at` values and not all showing the same bulk-import date); sitemap coverage completeness (all public collections with routes should appear in the sitemap — check `config/statamic/seo-pro.php` under `collections` to verify each collection is included with `enabled: true`; by default, new collections may not be added automatically); entries with the noindex field enabled in SEO Pro should not appear in the sitemap (SEO Pro handles this — verify by checking if noindex entries appear in the rendered sitemap XML); and the `Sitemap` directive in `robots.txt` (should point to `https://yourdomain.com/sitemap.xml`). For Statamic multi-site: each site should have its own sitemap with `hreflang` tags. SEO Pro supports multi-site sitemap generation — verify each site\'s sitemap includes `<xhtml:link rel="alternate">` annotations for each language/region variant and that the annotations are reciprocal (each variant references all others including itself).

Core Web Vitals for Statamic

Statamic serves PHP-rendered responses via Laravel, so there\'s no JavaScript rendering gap for server-side content — Googlebot and real users get the HTML from the first response. However, performance varies significantly by deployment architecture and front-end implementation. **LCP** — Statamic doesn\'t include image optimisation out of the box; use the Glide asset manipulation (built into Statamic for basic resizing) combined with WebP conversion or a cloud image CDN (Cloudinary, Imgix). Ensure the LCP image in the Antlers layout template has `loading="eager"` and `fetchpriority="high"` on the hero image, and explicit `width`/`height` attributes on all images. **INP** — Statamic templates are static HTML by default; JavaScript INP issues come from Alpine.js interactivity (a common Statamic front-end pattern), Livewire components, third-party embeds (Hubspot forms, Intercom, chat widgets), or JavaScript-heavy customisations. Audit front-end JS with Chrome DevTools Performance tab. **CLS** — image dimensions not specified in `{{ glide:image width="800" height="600" }}` tags; web font FOUT without `font-display: swap`; dynamically injected banners or cookie consent overlays. **TTFB and caching** — Statamic pages in dynamic mode benefit significantly from Laravel response cache (via the `spatie/laravel-responsecache` package) or Statamic\'s own full-page caching. In SSG mode, TTFB is determined by your CDN — deploy static output to Netlify, Vercel, or Cloudflare Pages for optimal TTFB. The audit uses real CrUX field data for LCP, INP, and CLS on mobile and desktop.

🧠

AI visibility for Statamic sites

Add `llms.txt` to the Statamic web root (the `public/` directory in a standard Statamic installation, since Statamic\'s public web root is `public/`). The file lists key content sections, their purposes, and important entry types in plain text — deploy as `public/llms.txt`. Verify AI crawlers are not blocked in `robots.txt` — Statamic\'s generated robots.txt (via SEO Pro or a custom Antlers route) should explicitly allow GPTBot, ClaudeBot, and PerplexityBot. Check the `config/statamic/seo-pro.php` robots.txt configuration to ensure AI crawler user agents are in the allow list. For FAQPage JSON-LD: the most natural Statamic implementation is a Bard fieldset with a question-answer repeater block type on entry blueprints that have FAQ sections. In the Antlers template, iterate the Bard blocks and output a `script type="application/ld+json"` FAQPage block that maps each question/answer block to a `Question`/`acceptedAnswer` pair. For question-format headings: instruct content editors to use question-phrased H2/H3 headings in Bard body content — "How does Statamic handle URL routing?", "What is the Antlers templating language?" — to meet the ≥20% 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 Antlers template snippets and SEO Pro config paths for each fix.

HOW IT WORKS

Audit your Statamic site in 60 seconds

  1. Enter your Statamic site URL. No Control Panel access, Statamic API keys, or SSH needed — the audit crawls the public HTTP output as Googlebot would. Works with all Statamic versions (3.x, 4.x, 5.x), Static Site Generator mode, and any Antlers or Blade template structure.
  2. We crawl and analyse. The engine checks SEO Pro meta tag output in the raw server HTTP response, validates JSON-LD schema blocks per collection type, audits collection route URL slug quality, checks sitemap coverage and per-collection SEO Pro configuration, measures CrUX Core Web Vitals from real Chrome field data (both SSG and dynamic mode), and evaluates all five AI visibility signals.
  3. You get a prioritised report. Statamic-specific issues first — SEO Pro configuration gaps, missing collection-level structured data, slug quality issues, sitemap coverage gaps — then general SEO, each with the Antlers template snippet, SEO Pro config key, or `config/statamic/seo-pro.php` path for the fix.

FAQ

Questions about the Statamic SEO audit

Does Statamic have built-in SEO features?

Statamic\'s free core doesn\'t include built-in SEO tooling — it provides the fields, routes, and templates, but the SEO output depends on your implementation. The standard SEO solution is the official SEO Pro addon (Statamic Marketplace, free and commercial tiers), which adds: per-entry meta title and description fields, Open Graph image handling, canonical URL management, robots.txt and noindex controls per entry, XML sitemap generation with lastmod and per-section include/exclude, and JSON-LD output for WebSite, Organization, and BreadcrumbList types. Custom JSON-LD (Article, FAQPage, Product) requires Antlers template additions or custom SEO Pro extensions. Without SEO Pro or an equivalent custom implementation, a Statamic site will typically be missing canonical tags, a sitemap, and structured data. The audit detects these gaps in the server-rendered HTML regardless of whether SEO Pro or a custom addon provides them.

How do I set up meta tags in Statamic?

With SEO Pro: install via Composer (`composer require statamic/seo-pro`), run `php artisan vendor:publish --tag=seo-pro-config` to publish the config, then configure global defaults in `config/statamic/seo-pro.php` (site name, default OG image, meta title append format). Add the `{{ seo_pro:meta }}` Antlers tag to your layout template\'s `head` — this outputs title, meta description, canonical, OG tags, and robots from the configured fields. For per-entry overrides, add the SEO Pro fieldset to your blueprints (Collections → [Collection] → Blueprint → Add Fieldset → SEO Pro). This surfaces SEO fields in the entry editor. Without SEO Pro: create a layout partial that uses Antlers variables from entry frontmatter or fieldsets: `title>{{ seo_title ?? title }} | {{ site_name }}</title`, `link rel="canonical" href="{{ permalink }}"`. Check that the layout partial is included via `{{ layout:head }}` or direct include in your main layout file.

What is Statamic\'s Static Site Generator mode and how does it affect SEO?

Statamic can operate in two modes: Dynamic mode (PHP/Laravel server-rendered on each request) and Static Site Generator (SSG) mode via the `statamic/ssg` package, which pre-builds all pages to static HTML files at build time. For SEO, SSG mode is generally preferable: static HTML is instantly available to Googlebot without any server-side processing, responses are served via CDN with very fast TTFB, and there\'s zero risk of dynamic rendering errors affecting crawl. The main SEO tradeoff: in SSG mode, content changes require a rebuild to appear in Google\'s index (no real-time update). For mostly-static content (marketing sites, documentation), SSG is the clear performance winner. For frequently-updated content (news, e-commerce with price changes), dynamic mode with aggressive caching (via Laravel response cache or Varnish) is typically better. The audit detects the rendering mode by comparing the raw HTTP response against the JavaScript-rendered DOM — if the content is identical, it\'s server-rendered (either dynamic or SSG); if content appears only in the rendered DOM, it\'s client-side rendered (rare in Statamic but possible via Alpine.js/Livewire fetches).

Is the Statamic 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.