SEO

Aurora scores and audits content with deterministic checks and is explicit about what is measured and what is estimated.

What it does

CapabilityHowMeasured or estimated
Page audit (POST /products/{id}/seo/audit)Fetches a public URL (SSRF-checked on every redirect hop, 2 MB cap) and checks title, meta description, headings, canonical, robots, viewport, lang, Open Graph, alt text, JSON-LD, word count and links; returns a 0-100 score and itemised fixesComputed from the page
Content score (POST /artifacts/{id}/seo/score)Keyword in H1/title and first 100 words, density, heading structure, meta lengths, length, readability (Flesch), internal links; stores the block in Artifact.metadata_["seo"] with meta title/description and Article JSON-LDComputed from the draft
Keyword research (POST /products/{id}/seo/keywords)Provider chosen by SEO_PROVIDERSee below
SEO article typeContent type seo_article (and blog, technical_deep_dive) generates the draft and stores the SEO block on the artifactComputed
WordPress publishingChannel wordpress: title/excerpt/JSON-LD from the SEO block; only reachable through the approved-artifact, hash-bound publish gaten/a

Keyword providers

If a provider is selected but not configured, Aurora falls back to grounded and says so in the response (provider, measured). GET /seo/providers reports what is configured.

Approval

The SEO block is published with the content. Recomputing it on an approved artifact returns that artifact to draft, so a reviewer approves the meta text and JSON-LD together with the body.

Status

Unit-tested against fixtures and mocked HTTP: audit, content score, providers, WordPress adapter, redirect/SSRF handling. Not yet verified against live DataForSEO, Google Search Console or a WordPress site (needs operator credentials). The Search Console OAuth consent flow is not built: supply an access token from your own OAuth app.

Edit this page on GitHub