SEO readiness before production
Technical SEO checks for metadata, crawlability, accessibility signals, and social previews. SEO findings account for 10% of the overall score.
Metadata checks
Up to 50 HTML, TSX, JSX, Vue, and layout files are scanned for these signals:
| Check | Detection pattern | Severity if missing |
|---|---|---|
| Page title | <title> or Next.js title: export | Medium |
| Meta description | meta description or description: export | Medium |
| Open Graph | og:title, property="og:…" | Medium |
| Twitter/X card | twitter:card, name="twitter:…" | Medium |
| Canonical URL | rel="canonical" or canonical: export | Medium |
| JSON-LD structured data | application/ld+json script blocks | Medium |
When seo.defaultTitle is set in config, missing-metadata recommendations include your configured title as a hint.
Content checks
| Check | Scope | Severity |
|---|---|---|
| Image alt text | <img> tags without alt in up to 30 files | Low |
| Heading hierarchy | HTML pages missing <h1> (more than 2 pages) | Low |
Public assets
CF Ready searches the same candidate paths as AI readiness checks:
| Asset | Candidate paths | Severity if missing |
|---|---|---|
sitemap.xml | public/sitemap.xml, sitemap.xml, static/sitemap.xml | Medium |
robots.txt | public/robots.txt, robots.txt, static/robots.txt | Low |
fix --seo output
cf-ready fix --seo generates:
| File | Description |
|---|---|
public/sitemap.xml | URL set from detected routes + criticalRoutes (up to 30 URLs) |
cf-ready-seo-suggestions.md | Copy-paste HTML metadata, JSON-LD Organization schema, and Next.js App Router metadata export using seo.* config values |
Existing files are skipped unless --force is passed. The suggestions file is meant for manual application — cf-ready does not modify your page components automatically.
Combine with AI readiness.
cf-ready fix --ai-readiness also generates public/robots.txt and public/sitemap.xml. Run both flags together or use --force to refresh.
Commands
cf-ready seo-ready # Run SEO checks only
cf-ready fix --seo # Generate sitemap + suggestions
cf-ready scan # Full scan including SEO category
Configure defaults in Configuration under the seo block: defaultTitle, defaultDescription, defaultImage, organizationName.